릴리이션 간의 잘못된 종속관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하는 과정이자, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정
릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값 만으로 구성되어야 합니다.
위의 테이블은 현재 1NF를 위반하고 있음으로 수정하면 아래와 같다.
✔️ 데이터 중복 생김 ➡️ primary key도 변경 필요
💡 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다.
위의 테이블을 보면 기본키는 {학번, 과목코드}인 복합키이다.
성적은 학번과 과목코드 두개에 의해 결정되어 {학번, 과목코드}에 종속되는 완전 함수 종속이다.
학부는 학번에 의해 결정 되어 {학번}에만 종속하는 부분적 종속이다.
등록금은 학번에 의해 결정 되어 {학번}에만 종속되는 부분적 종속이다.
또한 등록금은 학부에 의해 결정되는 완전 함수 종속이다.(기본키가 아니라도 가능하다.)
위의 부분적 종속을 제거하면 아래와 같다.
💡 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 한다.
함수 종속성 ( 학생 릴레이션 )
학번 -> 학부
학부 -> 등록금
학번 -> 등록금
X->Y, Y->Z 함수적 종속관계로 인해 X->Z 의 이행적 함수 종속 관계가 나타나면 [X, Y], [Y, Z] 두 릴레이션으로 분해한다.
BCNF란 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.
3NF를 만족하는 릴레이션에서 후보키가 1개밖에 없다면 BCNF도 만족하지만 3NF를 만족하는 릴레이션에 후보키가 여러개라면 BCNF를 만족하지 않습니다.
가정 : 우리 은행은 브론즈 실버를 가지고 국민은 프레스티지, 로얄 등급을 가진다.
위의 가정을 통해 우리는 class(결정자)만 알아도 어디 은행인지 알 수 있다.
하지만 class는 유일성을 만족하지 못함으로 후보키가 아니다.
따라서 아래와 같이 수정하면 BCNF를 만족한다.