[DB] 정규화 (1NF ~ BCNF)

오형상·2024년 4월 16일
0

데이터베이스

목록 보기
2/6
post-thumbnail

정규화 정의

릴리이션 간의 잘못된 종속관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하는 과정이자, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정

1NF

릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값 만으로 구성되어야 합니다.

위의 테이블은 현재 1NF를 위반하고 있음으로 수정하면 아래와 같다.

문제점

✔️ 데이터 중복 생김 ➡️ primary key도 변경 필요

2NF

💡 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다.

위의 테이블을 보면 기본키는 {학번, 과목코드}인 복합키이다.

성적은 학번과 과목코드 두개에 의해 결정되어 {학번, 과목코드}에 종속되는 완전 함수 종속이다.

학부는 학번에 의해 결정 되어 {학번}에만 종속하는 부분적 종속이다.

등록금은 학번에 의해 결정 되어 {학번}에만 종속되는 부분적 종속이다.

또한 등록금은 학부에 의해 결정되는 완전 함수 종속이다.(기본키가 아니라도 가능하다.)

위의 부분적 종속을 제거하면 아래와 같다.

3NF

💡 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 한다.

함수 종속성 ( 학생 릴레이션 )

학번 -> 학부

학부 -> 등록금

학번 -> 등록금

X->Y, Y->Z 함수적 종속관계로 인해 X->Z 의 이행적 함수 종속 관계가 나타나면 [X, Y], [Y, Z] 두 릴레이션으로 분해한다.

BCNF

BCNF란 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.

3NF를 만족하는 릴레이션에서 후보키가 1개밖에 없다면 BCNF도 만족하지만 3NF를 만족하는 릴레이션에 후보키가 여러개라면 BCNF를 만족하지 않습니다.

가정 : 우리 은행은 브론즈 실버를 가지고 국민은 프레스티지, 로얄 등급을 가진다.

위의 가정을 통해 우리는 class(결정자)만 알아도 어디 은행인지 알 수 있다.

하지만 class는 유일성을 만족하지 못함으로 후보키가 아니다.

따라서 아래와 같이 수정하면 BCNF를 만족한다.


출처

0개의 댓글