앞에서 배운 DB설계 핵심 원칙과 네이밍 규칙을 활용하여 DB설계를 하려면 보통 이론에서 정규형이라고 부르는 작업을 해야한다. 이름만 들어서는 전혀 이해가 안가니 이론적인 내용보다 실제 어떻게 적용되는지 알아보자.
🔴 [규칙 1] 한 칸에는 한 가지 정보만 들어간다.
🟢 그럼 어떻게 바꿀까?
🟢 한 가지 정보의 모호성?
- 위의 예시에서 누군가는
페레
가 이름 전체라고 생각할 수 있고 , 페레이라
가 전체이름이라고 생각할 수 있고, 성
과이름
을 분리한다면? -> 기획에 따라 유동적으로 결정하면 된다.
- 기획에 따라
성
과이름
을 따로 조회한다면 컬럼을 두 개로 나눠서 설계하면 되고, 통째로 사용한다면 위의 예시처럼 사용하면 된다.
🔴 [규칙 2] 어떤 테이블에 FK를 넣어도 ‘규칙 1’을 못 지킬 때는 중간 테이블을 만든다.
예시를 보면서 이해해보자.
-
movies (영화)
id(PK) | 이름 | 출연 배우 |
---|
1 | 배테랑 | 황정민, 오달수 |
2 | 신세계 | 황정민, 이정재 |
3 | 관상 | 이정재, 송강호 |
-
1. 테이블 분리
id(PK) | 이름 | 출연 배우 |
---|
1 | 베테랑 | 1,2 |
2 | 신세계 | 1,3 |
3 | 관상 | 1,4 |
-
actors (배우)
-
2. 중간 테이블 추가 movies(영화)
-
casings(캐스팅)
id (PK) | 영화 id (FK) | 배우 id (FK) |
---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 1 |
4 | 2 | 3 |
5 | 3 | 1 |
6 | 3 | 4 |
-
actors (배우)
요렇게 movies와 actors는 서로 무슨 관계일까?를 생각해보면 서로 캐스팅, 출연 하는 관계라고 생각이 되서 중간테이블인 castings를 추가해서 각각 참조할 수 있게 만들면 된다!
참조