제품명 키보드 State 형태 북한 중국 미세먼지 방사능 섬
카테고리 없음
017 정규화
정규화란 데이터베이스의 설계를 재구성하여 발전시키는 것이다.
불필요한 데이터 (redundancy)와
이상현상(Anamolies)을 방지할 수 있다.
◆ 제 1정규형
각 컬럼마다 단 하나의 값만 존재해야 한다.
이를 원자값을 갖는다 (Atomic Value) 또는 원자값만으로 되어있다 라고 한다.
<주문목록>
주문번호
주소
1001
1002
모니터
마우스
서울
광주
1010
1030
키보드
마이크
부산
제주
위의 주문목록 테이블에서 제 1 정규형을 실행할 수 있다.
주문번호
제품명
주소
1001
모니터
서울
1002
마우스
광주
1010
부산
1030
마이크
제주
원자값을 가지게 되었다.
◆ 제 2정규형
사실 제 1정규형은 정규화라고 보기도 힘들다.
제 2정규형부터가 진정한 정규화라고 할 수 있다.
제 2정규형의 조건은
모든 컬럼이 완전 함수적 종속을 만족하는 것이다.
즉, 부분적 종속이 아예 없어야 한다는 뜻이다.
이게 뭔 소리냐면, 표를 보도록 하자.
<identity>
name
birth
hobby
Bino
1998
dope off
KOR
Bino
1998
doodle
KOR
John
1978
piano
Spring
Gogh
1853
drawing
Zundert
위 <identity>테이블에서 birth 속성은 name속성에 따라 결정되는 함수적 종속 상태이다.
하지만 name과 같은 기본키인 hobby속성에는 종속되지 않는다.
그렇기 때문에 1998이라는 컬럼이 두 개씩이나 들어가게 되어 버렸고,
이는 불필요한 것이기 때문에 두 테이블로 나눠야 한다.
<idy1>
name
birth
Bino
1998
John
1978
Gogh
1853
<idy2>
name
hobby
State
Bino
dope off
KOR
Bino
doodle
KOR
John
piano
Spring
Gogh
drawing
Zundert
이렇게 한다면 모든 테이블<idy1, idy2>에 완전 함수적 종속이 완성된다.
◆ 제 3정규형
국적
특산물
핵
육지
육지
일본
위의 테이블을 보면
국적 → 특산물
특산물 → 형태
의 모습을 보인다.
즉, 특산물은 국적속성에 함수적 종속상태이고,
형태는 특산물속성에 함수적 종속상태라는 말인데
이 말을 다시 풀어쓰자면
국적 → 특산물 → 형태
의 관계라는 것이며
결론적으로는
국적 → 형태
가 되는것이다.
위의 예제와 같은 상황을 바로 이행적 함수 종속이라고 한다.
3차 정규형은 이렇게
기본키를 제외한 속성들 간의 이행적 함수 종속이 배제된 것이다.
◆ BCNF
BCNF는 3차 정규형을 만족함과 동시에 모든 결정자가 후보키인 정규형이다.
BCNF는 (Boyce and Codd Normal Form) 3차 정규형을 조금 더 강화한 버전으로 볼 수 있습니다. 이는 3차 정규형으로 해결할 수 없는 이상현상을 해결할 수 있습니다. BCNF란 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형입니다. 아래와 같은 경우를 생각해보면, 후보키는 수퍼키중에서 최소성을 만족하는 건데, 이 경우 (학생, 과목) 입니다. (학생, 과목)은 그 로우를 유일하게 구분할 수 있습니다. 근데 이 테이블의 경우 교수가 결정자 입니다.(교수가 한 과목만 강의할 수 있다고 가정) 즉, 교수가 정해지면 과목이 결정됩니다. 근데 교수는 후보키가 아닙니다. 따라서 이 경우에 BCNF를 만족하지 못한다고 합니다. 3차 정규형을 만족하면서 BCNF는 만족하지 않는 경우는 언제일까요? 바로 일반 컬럼이 후보키를 결정하는 경우입니다.
학생
과목
교수
학점
1
AB123
김인영
A
2
CS123
Mr.Sim
A
3
CS123
Mr.Sim
A
위와 같이 테이블이 구성된 경우에 데이터가 중복되고, 갱신 이상이 발생합니다. 예를 들어 Mr.Sim이 강의하는 과목명이 바뀌었다면 두 개의 로우를 갱신해야합니다. 이를 해결하기 위해서는 마찬가지로 테이블을 분리합니다.
교수 테이블
교수
과목
김인영
AB123
Mr.Sim
CS123
수강 테이블
학생
교수
학점
1
김인영
A
2
Mr.Sim
A
3
Mr.Sim
A
제 1정규형
원자값 제거
제 2정규형
부분적 함수 종속 제거
제 3정규형
이행적 함수 종속 제거
BCNF
결정자이지만 후보키가 아닌 것 제거
제 4정규형
다중 값 종속(다치종속) 제거
제 5정규형
조인 속성 이용