8

3NF/BCNF にある関係を区別する方法について、さまざまな情報源を読んできました。そして、私はこれまでのところ、これが私の理解です...

この関係を例として使用します...

R = {A, B, C, D, E}

F = {A -> B, B C - > E, E D -> A}.

まず、関係のキーを見つける必要があります。そのためにこの動画を使いました。そして、私は得ました

Keys = {ACD, BCD, CDE}

RBCNFにあることを確認するには、 のすべての関数依存関係の左側FKeys. A -> B最初の FD はキーの 1 つであり、キーの 1 つではないため、そうではないことがすぐにわかりAます。したがって、BCNF にはありません。

R3NFにあることを確認するには、 のすべての機能依存関係の左側が のFいずれかであるか、 のすべての機能依存関係の右側が の 1 つのサブセットであるKeys ことを確認する必要があります。すべての FD の右側を見ると、、およびです。これらはそれぞれ a のサブセットであるため、これは 3NF にあることを意味します。FKeysBEAKey

したがって、これは(wiki によると) リレーションが に含まれているが含まれていないまれなケースの 1 つです。この方法は正しいですか?信頼できますか?何か不足していますか?3NFBCNF

4

2 に答える 2

8

最初に、スーパーキー、候補キー、およびプライマリ属性を学習する必要があります。

ただし、次の経験則が役に立ちます。

複数の重複する候補キーを持たない 3NF テーブルは、BCNF であることが保証されます。

つまり、3NF 関係の候補キーが

  • すべてアトミック、または
  • 非アトミックだが非オーバーラップ、

関係が BCNF にあることが保証されます。

BCNF に違反するが 3NF を満たす最も単純な関係には、次の関数依存関係があります。

A,B -> C C -> B

この場合、候補キーは(A,B)(A,C)です。
3NFを満たしているので

  • すべての機能依存関係の右側は、主要な属性です

BCNFに違反しているため

  • C -> Bですが、左側はスーパーキーではありませ
于 2017-11-04T00:37:12.287 に答える