-1

スキーマの 3NF および BCNF 分解を作成しようとしています。私はアルゴリズムを見てきましたが、これを行う方法が非常に混乱しています。

最小限のカバーを次のように言ってもらいF' = {A->F, A->G, CF->A, BG->C)、その関係の候補キーを 1 つ特定した場合、それが であるとしAます。それから私は正確に何をしますか?

私は例を見てきました.1つは次のとおりです。

F = {A → AB,A → AC,A → B,A → C,B → BC}

最小限のカバー:F′ = {A → B,B → C}

最終結果は次のとおり(AB,A → B), (BC,B → C)です。彼らはどうやってこれにたどり着いたのですか?

4

1 に答える 1

1

最小限のカバーを持っている場合:F'= {A-> F、A-> G、CF-> A、BG-> C)そして私は関係の候補キーを1つ特定しました、それはAであると言います。正確に私はしますか?

F'は最小限のカバーではありません。A->FとA->GをA->FGに組み合わせる必要があります

BはAのクロージャに属していないため、価値のあるAでさえF'が与えられた候補キーになることはできません。可能な候補キーはABです。

3NFの場合、F'の依存関係ごとにテーブルを作成することから始めます。

R1(A,F,G) R2(A,C,F) R3(B,C,G)

次に、テーブルの1つに候補キーが含まれているかどうかを確認します。Bは依存関係の左側にのみ表示されるため、Bは常に候補キーの一部である必要があります。Bのある唯一のテーブルはR3であり、候補キーは含まれていません(チェックしてください!)。したがって、候補キーを属性として持つ新しいテーブルR4を追加します。

R4(A,B)

最後に、あるテーブルの属性のセットが別のテーブルの属性のセットに含まれているかどうかを確認します。これは、実行中の例には当てはまりません。

したがって、3NF分解は次のようになります。

  R1(A,F,G) R2(A,C,F) R3(B,C,G)  R4(A,B)

BCNFの場合、R(A、B、C、F、G)から始めて、BCNF違反を探します。

たとえば、この依存関係は自明ではなく、Aはスーパーキーではないため、A->FGはBCNFの違反です。したがって、Rをに分割します

R1(A,F,G) and R2(A,B,C)

得られた関係にはBCNF違反が含まれていないため、プロセスはここで停止します。

于 2012-04-15T07:27:38.323 に答える