의미: 데이터베이스 설계 시, 중복을 줄이고 데이터 무결성을 보장하기 위해 테이블을 분리하고 구조를 체계화하는 과정.목표:
단계:
[잘못된 예시]
| 학번 | 이름 | 과목 |
|---|---|---|
| 1001 | 홍길동 | DB, 운영체제 |
[정규화 후]
| 학번 | 이름 | 과목 |
|---|---|---|
| 1001 | 홍길동 | DB |
| 1001 | 홍길동 | 운영체제 |
[잘못된 예시] (복합키 학번+과목이 기본키)
| 학번 | 과목 | 이름 |
|---|---|---|
| 1001 | DB | 홍길동 |
| 1001 | 운영체제 | 홍길동 |
여기서 이름은 학번에만 의존하므로, 과목과는 상관 없음 → 부분 함수 종속 발생!
[정규화 후]
예를 들어:
| 학번 | 과목코드 | 이름 | 과목명 | 교수 |
|---|---|---|---|---|
| 1001 | CS101 | 홍길동 | DB | 김교수 |
| 1001 | CS102 | 홍길동 | 운영체제 | 최교수 |
| 1002 | CS101 | 이순신 | DB | 김교수 |
학번, 과목코드 ⇒ 학생 한 명이 여러 과목을 들을 수 있음).이름은 사실 학번만 알면 알 수 있음 → 과목코드랑은 상관 없음.과목명, 교수는 사실 과목코드만 알면 알 수 있음 → 학번과는 상관 없음.👉 즉, 이름은 학번에 부분 종속, 과목명/교수는 과목코드에 부분 종속이 되어 있다.
2정규형 정규화:
학생 테이블
| 학번 | 이름 |
|---|---|
| 1001 | 홍길동 |
| 1002 | 이순신 |
과목 테이블
| 과목코드 | 과목명 | 교수 |
|---|---|---|
| CS101 | DB | 김교수 |
| CS102 | 운영체제 | 최교수 |
수강 테이블 (관계 테이블)
| 학번 | 과목코드 |
|---|---|
| 1001 | CS101 |
| 1001 | CS102 |
| 1002 | CS101 |
👉 요점 : “학생 정보는 학생 테이블에, 과목 정보는 과목 테이블에, 수강 내역은 관계 테이블에” 넣으면 된다.
[잘못된 예시]
| 학번 | 이름 | 학과 | 학과장 |
|---|---|---|---|
| 1001 | 홍길동 | 컴퓨터공학 | 김교수 |
여기서 학번 → 학과이고, 학과 → 학과장이므로 학번 → 학과장이라는 이행 종속이 발생.
[정규화 후]