# 정규화

> 데이터의 중복을 취소화하고 일관성을 최대화
>
> → 데이터를 분해하여 이상현상(삽입, 삭제, 수정)을 방지

#### 제 1정규화: attribute의 원자성 확보

속성값으로 2개의 값 → 원자성 X

| 학번 | 강의           |
| -- | ------------ |
| 1  | 데이터베이스, 알고리즘 |
| 2  | 알고리즘         |

제 1 정규화 진행

| 학번 | 강의     |
| -- | ------ |
| 1  | 데이터베이스 |
| 1  | 알고리즘   |
| 2  | 알고리즘   |

#### 제 2정규화: 키에 속하지 않는 속성들은 기본 키에 완전 함수 종속이도록 한다

`완전 함수 종속`: 기본키의 부분 집합이 결정자가 되면 안된다

(단, 기본키가 1개면 자동으로 제 2정규화 만족)

| 학번 | 학과    | 강의     | 성적 | 교수  | 연락처           |
| -- | ----- | ------ | -- | --- | ------------- |
| 1  | 컴퓨터공학 | 데이터베이스 | A  | 김철수 | 010-1234-1234 |
| 2  | 컴퓨터공학 | 알고리즘   | B  | 홍길동 | 010-1234-1234 |

제 2정규화 진행

`소속`

| 학번 | 학과    | 교수  | 연락처           |
| -- | ----- | --- | ------------- |
| 1  | 컴퓨터공학 | 김철수 | 010-1234-1234 |
| 2  | 컴퓨터공학 | 홍길동 | 010-1234-1234 |

`수강`

| 학번 | 강의     | 성적 |
| -- | ------ | -- |
| 1  | 데이터베이스 | A  |
| 2  | 알고리즘   | B  |

#### 제 3정규화: 이행적 종속 제거

→ 기본키가 아닌 속성이 결정자가 아니도록 한다.

제 3 정규화 진행

`소속`

| 학번 | 학과    | 교수 ID |
| -- | ----- | ----- |
| 1  | 컴퓨터공학 | 1     |
| 2  | 컴퓨터공학 | 2     |

`교수`

| 교수 ID | 이름  | 연락처           |
| ----- | --- | ------------- |
| 1     | 김철수 | 010-1234-1234 |
| 2     | 홍길동 | 010-1234-1234 |

`수강`

| 학번 | 강의     | 성적 |
| -- | ------ | -- |
| 1  | 데이터베이스 | A  |
| 2  | 알고리즘   | B  |
