2017-03-14 30 views
0

다음과 같은 문제가 있습니다 : R (ABCDEFG) 및 F = {AB-> CD, C-> EF, G-> A, G-> F, CE-> F}. 분명히 B & G는 종속 세트의 일부가 아니므로 키의 일부 여야합니다. 또한, BG + = ABCDEFG, 따라서 후보 키. 분명히, AB-> CD는 BCNF를 위반합니다. 그러나 알고리즘을 따를 때 어떤 대답으로도 끝나지 않습니다. 아마 뭔가 잘못하고있는 것 같아. 누구든지 분해에 이르기 위해 알고리즘을 올바르게 적용하는 방법을 보여줄 수 있습니까?BCNF 분해 알고리즘이 작동하지 않습니다.

미리 감사드립니다.

답변

0

먼저 종속성에 대한 정식 커버를 계산해야합니다. 이 경우에는은 : (독특한) 후보 키 B G, 기능적 종속성 만족 BNCF이다

{ A B → C 
    A B → D 
    C → E 
    C → F 
    G → A 
    G → F } > 

입니다. 그런 다음 BCNF를 위반하는 기능적 종속성 X → Y부터 시작하여 X, X+의 종료를 계산하고 원본 관계 R<T,F>을 두 개의 관계 R1<X+>R2<T - X+ + X>으로 바꿉니다. 그렇지 않으면 우리가 적용, 그리고

R2 < (A B G) , 
    { G → A } > 

우리는 BCNF를 만족 있는지 확인하기 위해 각 분해 관계를 확인 :

R1 < (A B C D E F) , 
    { A B → C 
     A B → D 
     C → E 
     C → F} > 

과 : 그래서,이 경우 종속성 A B → C을 chosing, 우리는 원래 관계를 교체 재귀 적으로 알고리즘. 이 경우

는, 예를 들어, R1에 키 때문에 C -> E는 BCNF를 위반 A B, 우리는 함께 R1 교체 :

R3 < (C E F) , 
    { C → E 
     C → F } > 

과 : 만족

R4 < (A B C D) , 
    { A B → C 
     A B → D } > 

이 관계를 BCNF.

R5 < (A G) , 
    { G → A } > 

과 : (키가 B G입니다 beacuse) R2 너무 BCNF를 만족하지 않기 때문에

마지막으로, 우리는 R2에서 분해 BCNF에

R6 < (B G) , 
     { } > 

합니다.

따라서 최종 분해는 R3, R4, R5R6의 관계로 구성됩니다. 또한 원본 관계 에 대한 종속성 G → F은 분해시이 유실됨을 알 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 아직도 혼란 스럽다. R1과 R2로 분해되면 FD : G-> F가 사라진 것 같습니다. 이것은 내가 처음부터 혼란스러워하는 곳입니다. 분해가 진행되는 동안 일부 FD를 삭제해도 괜찮습니까? 이것에 대한 나의 이해는 매우 불분명하다. 나는 어떤 도움을 주셔서 감사합니다. – Rana

+0

@Rana 내가 대답의 마지막 문장에서 말했듯이 : "원래의 관계에 대한 의존성 G → F가 분해에서 상실된다는 것을 또한 주목할 수 있습니다."실제로 알고리즘에 의해 얻어진 분해에서 BCNF의 경우 일부 종속성이 손실됩니다.이것은 원래 스키마 (무결성 제약 조건, 기능적 종속성이 무결성 제약 조건으로 간주 될 수 있음)에 대한 중요한 정보를 잃어버린 점에서 부정적인 사실입니다. – Renzo

+0

BCNF 대신 3NF (제 3 정규형)를 사용할 수 있습니다. 분해 알고리즘으로 인해 종속성이 손실되지 않는다는 보장이 있기 때문입니다. 그러나 때로는 결과에 중복성과 같은 몇 가지 예외가 있습니다. 사실 이것은 정규화 이론에서 잘 알려진 사실이며, 실제로 이런 이유로 BCNF가 아닌 3NF가 사용됩니다. – Renzo