정규화는 제약 조건과 더불어 사용되어 구조적인 면에서 무결성을 지키기 위한 방법이다. 정규화는 데이터의 구조적 결함으로 인한 수정, 삭제, 삽입 시의 여러 가지 이상 현상(amomaly)을 해결해준다.
후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들을 말한다.
슈퍼키는 기본키(Primary key)와 마찬가지로 릴레이션을 구성하는 모든 튜플에 대해 유일성을 만족시키지만, 기본키와 달리 최소성은 만족시키지 못한다.
주민등록번호: 결정자
이름, 출생지, 주소: 종속자
주민등록번호는 이름, 출생지, 주소를 결정짓고, 포함하는 개념이다.
이때 이름, 출생지, 주소는 주민등록번호에 함수 종속성
을 가지고 있다고 말한다.
성적은 학번, 과목번호에 완전 함수 종속
학과는 학번에 완전 함수 종속
학과는 학번, 과목번호에 부분 함수 종속
모든 컬럼이 원자 값이 되려면 아래 사항에 해당하지 않아야 한다.
다가 속성
복합 속성
Primary key가 아닌 일반 속성들은 N개의 Primary key에 완전 함수 종속이어야하는데, 부분 함수 종속인 일반 속성이 있는 경우 이를 다른 릴레이션으로 분리(무손실 분해)해줘야 한다.
분해 결과 릴레이션은 아래와 같다.
일반 속성이면서 다른 속성을 결정짓는 역할(결정자 역할)을 하는 속성들이 있는 경우,
이 릴레이션에는 이행적 함수 종속
이 존재한다고 말한다.
(A가 B를 결정짓고, B가 C를 결정 짓는 경우)
즉 이행적 함수 종속(TD, Transitive Dependancy)을 다른 릴레이션로 분리하면 3NF가 된다.
앞의 정규형들은 Codd의 원론적 정의로, 하나의 후보 키(기본 키)만 가진 것으로 정의하였다. 따라서, 제 3 정규형 정의는 릴레이션이 복수의 후보 키를 갖는 경우에는 적용되지 않는다.
그렇기 때문에 릴레이션이 복수의 후보 키를 갖는 일반적인 경우에도 적용할 수 있는 보이스/코드 정규형이 제안되었다. 즉 BCNF에 속하는 릴레이션은 모두 3NF이지만, 3NF에 속하는 릴레이션이 모두 BCNF는 아니다.
위의 테이블에서 결정자를 모두 키(후보 키)로 하여 테이블을 분리한 결과는 아래와 같다.
cf)
3NF와 보이스 코드 정규형의 차이는 원론적인 부분이 크기 때문에, 둘 다 통틀어서 일반 속성이면서 결정자의 역할을 하는 것을 새로운 테이블로 분리시켜주면 된다는 정도로 이해하고 있으면 좋을 것 같다.
R1 (학번, 이름)
R2 (과목 번호, 과목 이름)
위와 같이 key와 attribute 2개로 이루어진 릴레이션을 이원 릴레이션
이라고 한다. 모든 이원 릴레이션은 3NF에 속한다.
제 4 정규형은 다치 종속을 독립된 릴레이션으로 분리한 것이다. 다치 종속(MVD, Multivalued Dependancy)이란, 결정자 하나에 종속자가 여러 개인 것을 의미한다.
예를 들어,
CPT {과목, 교수, 교재}
가 있을 때
과목마다 교수는 하나이지만,
과목마다 교재는 여러 개일 수 있다면,
과목 - 교재는 다치 종속 관계이다.
3개 또는 그 이상의 릴레이션으로 분해해야만 정보 무손실 분해가 되는 릴레이션을 n-분해 릴레이션
이라고 한다. 이런 릴레이션을 제 5 정규형이라고 하고, 이와 같은 릴레이션이 갖는 제약 조건을 n-way 순환 제약조건(cyclic constraint)이라고 한다.
이런 n-분해 릴레이션은 여러 번의 조인을 통해 원래의 분해 전 릴레이션으로 복구가 되기 때문에 조인의 중간 과정에서 원래 릴레이션에 없던 위조 투플이 생성될 수 있다.
어떤 릴레이션을 분해하고, 이를 다시 조인했을 때의 결과가 원래의 릴레이션과 같을 때 릴레이션 R은 조인 종속을 만족시킨다고 말한다.
한편, 정규화는 하면 할수록 릴레이션의 갯수가 많아지기 때문에, 테이블들로부터 데이터를 얻을 때 조인을 해야하는 횟수도 많아진다. 따라서 보통의 경우에는 제 3 정규형의 조건까지만 만족시키는 선에서 정규화를 마친다.