누군가는 박재성이라는 전체 이름이 하나의 정보라고 생각할 수 있지만, 누군가는 박이 하나의 정보고, 재성이 하나의 정보라고 판단할 수도 있다. 둘 다 올바른 관점이다. 말 그대로 ‘한 가지 정보’라는 건 절대적이지 않다. 자신의 서비스에 맞게 판단해야 한다.
그럼 어떻게 판단해야 할까?
→ 서비스에서 데이터의 사용 방식에 따라 결정해야 한다!
예를 들어, 서비스에서 성과 이름을 따로따로 조회해야 하는 경우가 많다면 2번째 테이블의 형태로 구성하는 게 좋다. 반대로 서비스에서 성과 이름을 따로따로 조회할 일이 없고 통째로 쓰는 경우만 있다면 1번째 테이블의 형태로 구성하는 게 좋다.
이와 비슷한 예시를 하나 더 알아보자.
stores (가게)
id
전화번호
1
0321112345
2
0521234567
stores (가게)
id
전화번호1
전화번호2
전화번호3
1
032
111
2345
2
052
123
4567
누군가는 전화번호가 하나의 정보라고 생각할 수도 있지만, 누군가한테는 전화번호는 3가지의 정보라고 생각할 수 있다. 둘 다 맞는 말이다. 어떻게 테이블을 설계해야 하는 지는 서비스에 맞게 판단하면 된다. 만약 전화번호의 3가지 정보를 분리해서 따로따로 사용해야 하는 경우가 있다면 두 번째처럼 설계를 해야 한다. 그렇지 않다면 첫 번째처럼 설계를 하면 된다.
✅ 요약
한 칸에는 한 가지 정보만 들어가야 한다.
한 칸에 두 가지 이상의 정보가 들어가있을 땐, 테이블을 분리해서 FK를 활용하면 된다.
특정 테이블에 FK를 도입했을 때 규칙 1이 안 지켜진다면, 다른 테이블로 FK를 옮겨보자.