데이터베이스 테이블을 설계할 때 ‘한 칸에는 한 가지 정보만 들어가야 한다.’라는 규칙을 지켜야 한다. 이 규칙이 뭔지 알아보기 위해 이 규칙을 안 지킨 사례 먼저 살펴보자.
[사례 1]
users (사용자)
id (PK)
이름
이메일
1
박재성
js123@naver.com, js00@naver.com
2
김시안
king123@naver.com,
queen123@naver.com
[사례 2]
stores (가게)
id (PK)
가게명
판매 상품
1
JSCODE 카페
JS아메리카노, JS카페라떼
2
재성이네 국밥
재성이네 돼지국밥, 재성이네 육개장, 재성이네 수육
위 사례를 살펴보면 한 칸에 2가지 이상의 정보가 들어가있는 걸 확인할 수 있다.
“왜 한 칸에 2가지 이상 정보가 들어가면 안 되는걸까?”
외우지말고 이해를 해보자. 판매 상품을 조회해서 사용할 때마다 중간에 있는 콤마(,)를 제거하고 배열에 집어넣는 로직을 넣어야 한다. 판매 상품을 삽입할 때든 삭제할 때든 항상 콤마(,)를 신경써서 작업해야 한다. 그리고 한 칸에 데이터를 여러개 집어넣다보면 실수로 데이터를 중복해서 넣어버리기도 한다. 따라서 한 칸에는 한 가지의 정보만 넣으려고 하는 것이다.
✅ 한 칸에 2개 이상의 정보가 들어가있을 땐?
한 칸에 2가지 이상의 정보가 들어가있을 때는 테이블을 분리하면 된다. 테이블을 분리함으로써 한 칸에 한 가지 정보만 들어가도록 해야 한다.
[사례 1 - 테이블 분리]
users (사용자)
id (PK)
이름
1
박재성
2
김시안
emails (이메일)
id (PK)
이메일
1
js123@naver.com
2
js00@naver.com
3
king123@naver.com
4
queen123@naver.com
테이블을 분리하는 것까진 좋은데 위와 같이 테이블을 분리하면, 특정 사용자의 이메일 주소를 알 수 있는 방법이 없다. 특정 사용자의 이메일 주소가 어떤 건지 알 수 있게 테이블을 보완해보자.
[사례 1 - 잘못된 분리]
users (사용자)
id (PK)
이름
이메일 id (FK)
1
박재성
1, 2
2
김시안
3, 4
emails (이메일)
id (PK)
이메일
1
js123@naver.com
2
js00@naver.com
3
king123@naver.com
4
queen123@naver.com
위와 같이 데이터를 저장하니 특정 사용자의 이메일 주소를 알 수는 있게 됐다. 하지만 한 칸에 2가지 이상의 정보가 다시 들어가게 됐다. 이럴 때는 FK를 다른 테이블로 옮겨보자. 즉, FK의 위치를 users 테이블에서 emails 테이블로 옮겨보자.
[사례 1 - 최종]
users (사용자)
id (PK)
이름
1
박재성
2
김시안
emails (이메일)
id (PK)
이메일
사용자 id (FK)
1
js123@naver.com
1
2
js00@naver.com
1
3
king123@naver.com
2
4
queen123@naver.com
2
위와 같이 데이터를 저장하니 특정 사용자의 이메일 주소도 알 수 있고, 한 칸에 한 가지의 정보만 들어가게 만들었다. 위와 같이 테이블을 분리해야 한다.
다시 한 번 정리해보자.
한 칸에 두 가지 이상의 정보가 들어가있을 땐, 테이블을 분리해서 FK를 활용해 한 칸에 한 가지의 정보만 들어가게 만들어야 한다.