0

私はこのように関係を見つけました -CUSTOMER (NAME, STREET, CITY, STATE, ZIP)

以下の各方法の略語を使用すると、

Name - N
STREET - R
CITY - C
STATE - T
ZIP - Z

そして与えられたF = {N->RCT, RCT->Z, Z->CT}

質問は と に分解さ3NFBCNFます。

に分解しますが3NF、ここでは実用的な方法を考えました。

R1(N,R,Z)
R2(Z,C,T)

それが正しいか?

または、分解のために特定の機能依存関係のみを考慮する必要がありますか。このように考えて に分解すると3NF答えは

R1(N,R,C,T)
R2(R,C,T,Z)

誰かが正しい方法を教えてください。

4

1 に答える 1

1

最初の分解は正しくありませんが、2 番目の分解は正しくありません。3NF で分解するには、「合成」アルゴリズムの最初のステップで、依存関係のセットの標準的なカバーを見つけてから、同じ左辺を持つグループで見つかった依存関係をグループ化する必要があります。

依存関係には冗長な依存関係や余分な属性がないため、左辺が異なる 3 つの依存関係から開始して、3 つの関係を作成できます。

 from N → RCT, R1 (N, R, C, T), with key N
 from RCT → Z, R2 (R, C, T, Z), with key RCT
 from Z → CT, R3 (C, T, Z), with key Z

次に、3 番目の関係が 2 番目の関係に完全に含まれていることに注意して、それを削除できます。アルゴリズムの最後の正式なステップでは、分解されたリレーションに元のリレーションのキーが存在するかどうかを確認する必要があります (存在しない場合は、キーを持つ新しいリレーションを追加する必要があります)。Zこのようなキーは 2 番目の関係に存在するため、これは真です。したがって、最終的な分解は次のとおりです。

 R1 (N, R, C, T), with key N
 R2 (R, C, T, Z), with key RCT

「分析」アルゴリズムを適用して BCNF を見つけることにより、別の解が得られることに注意してください。

R1 <(N, R, C, T),
    { N → RCT }>

R2 <(C, T, Z),
    { Z → CT } >

R3 <(R, Z),
    { } >

しかし、この分解では機能依存性CRT → Zが失われます。

于 2016-10-29T20:12:44.613 に答える