2

この投稿を見ましたが、使用されている用語がよくわかりません (重要な関数の依存関係、スーパーキー)

私が読んだことから、2番目の正規形は複合キーに関連しているようですが、3番目の正規形は主キーに関連しているようです。

これが正しいかどうかはわかりません。

したがって、第 2 の正規形 - 複合キーがあり、テーブル内のすべてのフィールドが両方の複合キー フィールドに関連付けられている必要があります。何かが関連していない場合は、別のテーブルにリファクタリングする必要があります。

第 3 正規形 - すべてが主キーに依存する必要があるため、複合キーが存在する可能性がある第 2 正規形ではなく、第 3 正規形ではキーが 1 つしかないと推測していますか?

アドバイスをいただければ幸いです。

4

1 に答える 1

2

S -> T と書き、列のセット S が機能的に別のセット T を決定すると言います。最初の各サブ行が常に 2 番目の同じサブ行と共に表示される場合、テーブル値の S -> T。制約ごとに発生する可能性のあるすべての値で S -> T の場合、テーブル変数/スキーマで S -> T。

S を行列式集合、T を決定集合と呼びます。S -> T を FD (機能依存性) と呼びます。S が T のスーパーセットであるとき、それは自明な FD であると言います。S が {A} のとき、A -> T と言い、T が {A} のとき、S -> A と言う。

スーパーキーは、行を一意に識別する一連の列です。これは、すべての属性を機能的に決定する場合に当てはまります。セットの適切なサブセットまたはスーパーセットは、それと等しくないものです。CK (候補キー) は、適切なスーパーキーを含まないスーパーキーです。CK を PK (主キー) として選択できます。列が CK にある場合、その列は素数です。

あなたがリンクしている答えを理解するのに十分です:

2NFと3NFの違いはこれです。何らかの関係が、A->B という形式の自明ではない機能依存関係を満たすとします。ここで、B は非素数属性です。

A がスーパーキーではなく、候補キーの適切なサブセットである場合、2NF に違反します。

A がスーパーキーでない場合、3NF に違反します

引用は、そのようなFDが存在する場合、NFは「違反される」と述べています。また、そのような FD が存在する場合にのみ違反します。

FD S -> T は、S の適切な部分集合が機能的にも T を決定する場合、部分的です。それ以外の場合はいっぱいです。これには CK は含まれないことに注意してください。すべての非プライム列が完全に機能的にすべての CK に依存している場合、テーブルは 2NF にあります。

S -> T は、S -> X および X -> T であり、X -> S ではなく X = T ではない X がある場合に推移的です。これは CK を含まないことに注意してください。すべての非プライム列がすべての CK に非推移的に依存している場合、テーブルは 3NF にあります。

(引用とは異なる 2NF & 3NF の別の定義に注意してください。)

于 2014-12-16T12:41:24.777 に答える