먼저 집고 갈 것
기본키=primary key
외래키=분리하면 원래 테이블에 생김
"엑셀표처럼 만든 테이블, 좀 더 깔끔하게 만들자!"
데이터가 중복되면 → 수정할 때도 중복으로 고쳐야 함 → 귀찮고 실수 나기 쉬움
그래서 정리하는 거임.
| 학생ID | 이름 | 수강과목 |
|---|---|---|
| 1 | 철수 | 수학, 영어 ❌ |
→ 하나의 셀에 여러 값이 들어가 있음 = 원자값 ❌
| 학생ID | 이름 | 수강과목 |
|---|---|---|
| 1 | 철수 | 수학 ✅ |
| 1 | 철수 | 영어 ✅ |
한 칸에 하나씩만! 이게 1NF
예: 수강기록 테이블
| 학생ID | 과목명 | 교수이름 |
|---|---|---|
| 1 | 수학 | 김교수 ❌ |
→ 교수이름은 과목명에만 관련 있음 → "학생ID + 과목명"이라는 복합키에 부분적으로만 종속된 정보
→ 이럴 땐 테이블을 나눠!
📘 수강 테이블
| 학생ID | 과목명 |
|---|---|
| 1 | 수학 |
📗 과목 테이블
| 과목명 | 교수이름 |
|---|---|
| 수학 | 김교수 ✅ |
복합키 썼다면, 거기에 일부만 종속된 애는 따로 떼자! 이게 2NF
예:
| 과목코드 | 과목명 | 교수이름 | 교수연락처 |
|---|---|---|---|
| MATH101 | 수학 | 김교수 | 010-1234 ❌ |
→ 교수연락처는 과목이 아니라 교수이름에 의존함 → 키 아닌 값끼리 의존
📘 과목 테이블
| 과목코드 | 과목명 | 교수이름 |
|---|
📗 교수 테이블
| 교수이름 | 교수연락처 |
|---|
기본키 아닌 값들끼리는 의존하지 마라! → 이게 3NF
| 단계 | 뭘 막는 거냐 |
|---|---|
| 1NF | 한 칸에 여러 값 ❌ |
| 2NF | 복합키 일부에만 종속 ❌ |
| 3NF | 키 아닌 애들끼리 의존 ❌ |