본문 바로가기

Library/Database

정규화와 BCNF로의 분해

어떤 릴레이션 스키마가 BCNF에 속하지 않는다면, 이를 여러 개의 BCNF 릴레이션 스키마들로 무손실 조인을 유지하면서 분해하는 것은 항상 가능하지만, 불행히도 종속성 유지를 유지하면서 분해하는 방법은 가능하지 않다. 그러나, 여러 개의 3NF 릴레이션 스키마들로 종속성 유지와 무손실 조인을 모두 유지하면서 분해하는 것은 항상 가능하다.

함수 종속성들의 집합 F를 갖는 릴레이션 스키마 R을 여러 개의 BCNF 릴레이션 스키마들로 분해하는 알고리즘은 다음과 같다.

1. R이 BCNF에 속하지 않는다고 하자(이 말은, 주어진 FD가 해당 릴레이션에서 만족하지 않는다다는 이야기다). X ⊂ R이며, A는 R에 속한 단일 애트리뷰트이며, X → A는 BCNF를 위배하는 FD라고 하자. 이제 R을 R - A와 XA로 분해한다.

2. 만약 R - A 혹은 XA가 BCNF에 속하지 않으면, 위의 방법을 순환적으로 적용하여 이 릴레이션을 계속 분해한다.

하지만, 종속성을 유지하면서 BCNF로 분해할 수 없는 경우가 종종 있다. 예를 들어, 릴레이션 스키마 SBD를 참조해보자. 이 스키마는 '선원 S가 어떤 날짜 D에 배 B를 예약한다'는 것으로 해석할 수 있다. 이제 여기서 종속성 SB → D (즉 각 선원은 최대 하루만 배를 예약할 수 있다)와 D → B(하루에 많아샤 한 척의 배만 예약할 수 있다)가 주어졌다고 가정하자. 이때 B는 키가 아니기 때문에 SBD는 BCNF에 속하지 않는다. 그러나, 만약 이 스키마를 분해하려고 시도한다면 종속성 SB → D는 그대로 유지할 수 없게 된다.