정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스가 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정이다.
테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것
이름 | 나이 | 수강과목 |
---|---|---|
홍길동 | 20 | C,C++ |
이순신 | 21 | Java |
위와 같은 테이블을 아래처럼 변경
이름 | 나이 | 수강과목 |
---|---|---|
홍길동 | 20 | C |
홍길동 | 20 | C++ |
이순신 | 21 | Java |
제1 정규화를 진행한 테이블에 대해 부분 함수 종속을 제거한 형태
※부분 함수 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 의미한다.
이름 | 나이 | 수강과목 |
---|---|---|
홍길동 | 20 | C |
홍길동 | 20 | C++ |
이순신 | 21 | Java |
위와 같은 테이블을 아래처럼 분리하여 변경
이름 | 나이 |
---|---|
홍길동 | 20 |
이순신 | 21 |
이름 | 수강과목 |
---|---|
홍길동 | C |
홍길동 | C++ |
이순신 | Java |
제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해
※이행적 종속이라는 것은 A->B, B->C가 성립할 때 A->C가 성립되는 것을 의미한다.
학생 코드 | 학생이름 | DOB | Street | City | State | ZIP |
---|
학생코드가 기본키이고, 기본키가 하나이므로 2차 정규형은 만족한다. 하지만 이 데이터의 Zip컬럼을 알면 Street, City, State를 결정할 수 있다. 또한 여러명의 학생들이 같은 Zip코드를 갖는 경우에 Zip코드만 알면 Street, City, State가 결정되기 때문이 이 컬럼들에는 중복된 데이터가 생길 가능성이 있다.
학생 코드 | 학생이름 | DOB | ZIP |
---|
ZIP | Street | City | State |
---|
3차 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형
※결정자란 함수 종속 관계에서 특정 종속자(dependent)를 결정짓는 요소, 'X->Y'일 때 X는 결정자, Y는 종속자이다.
학생 | 과목 | 교수 | 학점 |
---|---|---|---|
1 | AB123 | 김인영 | A |
2 | CS123 | Mr.Sim | A |
3 | CS123 | Mr.Sim | A |
위와 같이 테이블이 구성된 경우에 데이터가 중복되고, 갱신 이상이 발생하므로 2개의 테이블로 분리한다.
교수 | 과목 |
---|---|
김인영 | AB123 |
Mr.Sim | CS123 |
학생 | 과목 | 학점 |
---|---|---|
1 | AB123 | A |
2 | CS123 | A |
3 | CS123 | A |