연관관계는 1:1, 1:N, M:N 관계가 있다.
호텔을 예시로 들 수 있다.
방 : 방 번호
| 번호 | 방 |
|---|---|
| 1 | Room1 |
| 2 | Room2 |
손님 : 손님 번호
| 번호 | 이름 |
|---|---|
| 001 | 김길동 |
| 002 | 최팽이 |
💡만약 예약을 한다면 문제는 뭐가 있을까??
직원 대 호텔
| 번호 | 직원이름 | FK_호텔 |
|---|---|---|
| 1 | Anna | 001 |
| 2 | Bell | 001 |
| 3 | kim | 002 |
| 번호 | 호텔이름 |
|---|---|
| 001 | 신라호텔 |
| 002 | 롯데호텔 |
왜 쓰면 안되는 걸까?
하나의 학생 레코드에서 여러 StudyGroup FK를 갖도록 하기 위해 컬럼을 늘리는 경우 비효율적인 null이 발생함. 또한 속할 수 있는 StucyGroup의 수가 변경될 때마다 테이블 구조가 따라서 변경되어야 함.
학생
| id | name | group1 | group2 | group3 |
|---|---|---|---|---|
| 1 | 김길동 | 1 | null | null |
| 2 | 박현수 | 1 | 3 | null |
| 3 | 최박달 | 2 | null | null |
스터디그룹
| id | name | category |
|---|---|---|
| 1 | 네트워크 | 001 |
| 2 | 운영체제 | 002 |
| 3 | 데이터베이스 | 003 |
한명의 학생이 여러 StudyGroup에 속하기 위해서 FK 컬럼만 다른 레코드를 새롭게 추가하면 데이터의 중복이 발생함.
학생
| id | name | group |
|---|---|---|
| 1 | 김길동 | 1 |
| 2 | 박현수 | 3 |
| 3 | 최박달 | 2 |
| 4 | 최박달 | 1 |