데이터 중복을 최소화하고 무결성을 향상시키는 데이터베이스 설계 기법
조건: 모든 속성 값이 원자값(Atomic Value)이어야 함
비정규형 테이블
| 학생ID | 이름 | 수강과목 |
|---|---|---|
| 1 | 홍길동 | 수학, 영어 |
1NF 적용
| 학생ID | 이름 | 수강과목 |
|---|---|---|
| 1 | 홍길동 | 수학 |
| 1 | 홍길동 | 영어 |
조건: 1NF + 부분 함수 종속 제거 (기본키가 아닌 속성이 기본키의 일부에만 종속되면 안됨)
1NF 테이블
| 학생ID | 과목코드 | 학생이름 | 과목이름 | 성적 |
|---|---|---|---|---|
| 1 | C01 | 홍길동 | 수학 | A |
2NF 적용
학생 테이블
| 학생ID | 학생이름 |
|---|---|
| 1 | 홍길동 |
과목 테이블
| 과목코드 | 과목이름 |
|---|---|
| C01 | 수학 |
수강 테이블
| 학생ID | 과목코드 | 성적 |
|---|---|---|
| 1 | C01 | A |
조건: 2NF + 이행적 함수 종속 제거 (기본키가 아닌 속성끼리 종속되면 안됨)
2NF 테이블
| 학생ID | 학생이름 | 학과코드 | 학과명 |
|---|---|---|---|
| 1 | 홍길동 | D01 | 컴퓨터공학 |
3NF 적용
학생 테이블
| 학생ID | 학생이름 | 학과코드 |
|---|---|---|
| 1 | 홍길동 | D01 |
학과 테이블
| 학과코드 | 학과명 |
|---|---|
| D01 | 컴퓨터공학 |
조건: 3NF + 모든 결정자가 후보키여야 함
3NF 테이블
| 학생ID | 과목 | 교수 |
|---|---|---|
| 1 | 수학 | 김교수 |
문제: 한 과목은 한 교수만 담당 → 교수가 과목을 결정 (교수→과목)
BCNF 적용
수강 테이블
| 학생ID | 교수 |
|---|---|
| 1 | 김교수 |
담당 테이블
| 교수 | 과목 |
|---|---|
| 김교수 | 수학 |
장점
단점