정규화
정규화란, 관계형 데이터베이스의 설계에서 중복을 최소화하고, 독립적인 관계를 가진 속성을 분리시켜 데이터를 구조화하는 작업을 말한다.
정규화의 기본 목표는 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현하는 것이다.
- 함수적 종속이란, 어떤 릴레이션 R의 속성 X와 Y에 대해, X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값에 Y의 값이 달라질 때, Y는 X에 함수적 종속이라고 한다. 학번을 알면 학생의 이름을 알 수 있는 것.
정규형
제1정규형
릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(Atomic value)만으로 구성되어 있어 반복 그룹이 없는 상태를 말한다. 즉, 하나의 기본키에 두 개 이상의 값을 가지는 속성 집합이 있어서는 안된다는 것이다.
학번 | 이름 | 과목 번호 |
---|---|---|
231701 | 석규 | (AP010, AP011) |
231702 | 상범 | (AP010, AP120) |
위 테이블은 과목 번호에 반복 그룹이 있기 때문에 제1정규형을 만족하지 못한 상태이다.
제1정규형을 만족시키려면 아래와 같이 수정해주면 된다.
학번 | 이름 | 과목 번호 |
---|---|---|
231701 | 석규 | AP010 |
231701 | 석규 | AP011 |
231702 | 상범 | AP010 |
231702 | 상범 | AP120 |
제2정규형
릴레이션이 제1정규형을 만족하고, 부분 함수의 종속성이 제거된 형태를 말한다. 즉, 기본키가 아닌 모든 속성이 기본키에 함수 종속적이라는 것이다.
학번 | 과목 번호 | 지도 교수 | 성적 |
---|---|---|---|
231701 | AP010 | 현성 | 100 |
231701 | AP011 | 수현 | 70 |
231702 | AP010 | 현성 | 90 |
231702 | AP120 | 정희 | 80 |
위 테이블에서 학생의 성적을 알기 위해 학생번호 + 과목이 필요하지만, 과목의 지도 교수를 알기 위해선 과목 번호만 알고 있으면 된다. 따라서 지도 교수는 과목에만 종속 되어 있는 부분적 종속을 가지고 있으므로, 제2정규형을 만족하지 못한 상태이다.
제2정규형을 만족시키려면 아래와 같이 수정해야 한다.
학번 | 과목 번호 | 성적 |
---|---|---|
231701 | AP010 | 100 |
231701 | AP011 | 70 |
231702 | AP010 | 90 |
231702 | AP120 | 80 |
과목 번호 | 지도 교수 |
---|---|
AP010 | 현성 |
AP011 | 수현 |
AP010 | 현성 |
AP120 | 정희 |
제3정규형
릴레이션이 제2정규형을 만족하고, 기본키가 아닌 모든 속성이 이행적 함수 종속이 없는 상태를 말한다.
- 이행적 함수 종속이란, A -> B 와 B -> C 일때, A -> C 가 성립하는 것을 말한다.
학번 | 식권 ID | 가격 |
---|---|---|
231701 | A1 | 6000 |
231702 | B1 | 10000 |
231703 | A1 | 6000 |
231704 | A2 | 8000 |
위 테이블에서 각 학생은 1개의 식권만 선택할 수 있다고 할 때, 학번을 알면 선택한 식권을 알 수 있고, 식권을 알면 지불해야할 금액을 알 수 있기 때문에, 학번을 알면 학생이 지불해야할 금액을 알 수 있게 된다. 따라서 제3정규형을 만족하지 못한 상태이다.
제3정규형을 만족시키려면 아래와 같이 수정해야 한다.
학번 | 식권 ID |
---|---|
231701 | A1 |
231702 | B1 |
231703 | A1 |
231704 | A2 |
식권 ID | 가격 |
---|---|
A1 | 6000 |
B1 | 10000 |
A1 | 6000 |
A2 | 8000 |
보이스/코드 정규형
보이스/코드 정규형(BCNF)은 릴레이션이 제3정규형이고, 모든 결정자가 후보키인 상태를 말한다.
- 결정자란, 함수 종속 관계에서 특정 종속자를 결정짓는 요소를 말한다. X -> Y일 때 X가 결정자, Y는 종속자이다.
학번 | 지도 교수 | 강의명 |
---|---|---|
231701 | 현성 | DB |
231701 | 수현 | 운영체제 |
231702 | 상호 | DB |
231702 | 정희 | 인간과 사회 |
한 학생은 한 교수의 강의만 수강할 수 있고, 한 교수는 한 강의만 담당하고, 한 강의를 여러 교수가 맡을 수 있다고 할 때, (학번, 강의명) 또는 (학번, 지도 교수) 가 후보키가 되며, 이 때 새로운 교수가 새로운 강의를 맡는다고 할 때, 학번은 NULL이 되는 문제점이 발생한다. 즉, 지도 교수 속성이 결정자이지만 후보키가 아니므로, 지도 교수 속성을 분리해야 한다.
학번 | 지도 교수 |
---|---|
231701 | 현성 |
231701 | 수현 |
231702 | 상호 |
231702 | 정희 |
지도 교수 | 강의명 |
---|---|
현성 | DB |
수현 | 운영체제 |
상호 | DB |
정희 | 인간과 사회 |