정규화

릴레이션과 함수 종속성을 주고 특정 정규형으로 릴레이션을 분할하는 문제는 감리사 시험의 데이터베이스 과목에서 늘 출제되는 문제다.


정규화의 기본 원칙은 무손실 분해하는 것이다.

분해된 릴레이션을 조인하여 원래의 릴레이션으로 복구할 수 있어야 한다.



BCNF 정규형 구하기

2012년 56번 문제를 보자.


56. 다음과 같은 함수 종속을 갖는 릴레이션 R(A, B, C, D, E) BCNF로 가장 적절하게 분해한 결과는? (아래 답 문항에서 밑줄은 기본키를 표현한다.)

 

      A → (B, C, D, E)

      B → (A, C, D, E)

      E → (C, D)

      C → D

 


         ① R1(A, B, E), R2(E, C, D) 

         ② R1(A, B, C, E), R2(C, D)

         ③ R1(A, B, E), R2(E, C), R3(C, D)

         ④ R1(A, B, E), R2(E, C, D), R3(C, D)

1. 종속성에서 기본키를 찾기

기본키는 나머지 모든 속성들을 함수적으로 결정하므로 A, B는 각각 기본키가 될 수 있다.

따라서 (A,B) 속성들을 묶어서 하나의 기본키로 정의한다.

2. 함수적 종속성을 그림으로 그려보기

"① -> ② -> ③"의 순서대로 추적하면 모든 속성을 찾을 수 있다.


3. 분해하기

①은 기본키가 나머지 속성들을 함수적으로 결정하는 것을 나타낸다.


③의 C -> D는 이행함수 종속이므로 따로 테이블로 분리한다.


②의 E -> (C,D)는 분해규칙을 적용하여 E -> C와 E -> D로 나누면 

      (A, B) -> E -> C로 이행함수 종속이므로 (A,B) -> E와 E -> C로 나눈다.

      E -> D는 C -> D로 이미 분리하였으므로 제외한다.



4. 재생성하기


자연조인으로 원래 릴레이션 R이 정상적으로 복구가 되었다.

+ Recent posts

티스토리 툴바