0

同僚が新しいテーブルの値を次のようにスケッチしました。

"Foo", "some value 1"
"Foo", "some value 2"
"Foo", "some value 3"
"Bar", "some value 3"

これらは、テーブル内の唯一の列です。列名は Col1、Col2 です。

ある人は、この表は正規化されていないと言い、別の人は正規化されていると言いました。

正規化に違反したという具体的な議論は、Col1 の「Foo」で「Foo」を含む 3 つのレコードを削除すると、システムに存在しなくなるというものです。その人は、ID と Name 列を含むルックアップ テーブルが必要だと言いました。上記のテーブルは、そのテーブルの Id をその FK として参照します。

正規化されていないという議論は、最初の列 (3 番目の正規化された形式) に依存するテーブルに 3 番目の列がなかったことです。

私が思う混乱は、この例を満たすという点で 1NF であることから来ています。

Customer    Tr. ID  Date            Amount
Jones   12890   14-Oct-2003     -87
Jones   12904   15-Oct-2003     -50
Wilkins     12898   14-Oct-2003     -21
Stevens     12907   15-Oct-2003     -18
Stevens     14920   20-Nov-2003     -70
Stevens     15003   27-Nov-2003     -60

http://en.wikipedia.org/wiki/Database_normalizationから。

しかし、「同じ情報を複数の行で表現できるため、テーブルを更新すると論理的な矛盾が生じる可能性がある」というルールに違反しているように聞こえます。これは、1NF を超える正規化に適用されます。

したがって、元のテーブルは 2NF に違反し、それによって 3NF に違反するように見えますが、1NF は満たします。これは正しいです?

4

5 に答える 5

3

これらの 2 つの列が本当にすべてである場合、このデータベース テーブルは第 3 正規形であると言えます。これが私の推論です:

  1. どの属性も「多値」ではないため、明らかに 1NFです
  2. col1 も col2 も有効なキー候補ではないため (値が重複しています!)、このテーブルで可能な唯一の有効な主キーは (col1,col2) です。
  3. 2NF は、非プライム属性が候補キーの一部に機能的に依存してはならないことを規定しています。唯一の可能な候補キーの一部である col1 と col2 しかないため、この点は議論の余地があります - テーブルは 2NF にあります
  4. EFCodd による 3NF は基本的に、非キー属性は「キー、キー全体、およびキー以外には依存しない」必要があると述べています。キーを構成する列は 2 つしかないため、他の非キー属性はありません。したがって、非キー属性はいずれもこの規則に違反しません --> テーブルISは 3NFです

あなたの仕事仲間が本当に4NF、5NF、またはBoyce-Codd NFに興味があるかどうかはわかりません.

マルク

于 2009-06-05T20:31:49.613 に答える
2

さまざまな正規化レベルがあります。しかし、実際のフィールド名がなければ、正規化する必要があるかどうかを本当に知ることはできません。

于 2009-06-05T19:11:56.840 に答える
1

http://en.wikipedia.org/wiki/Database_normalization

于 2009-06-05T19:10:54.160 に答える
1

正規化にはいくつかの異なるレベルがあります。

"Foo", "some value 1" "Foo", "some value 2" "Foo", "some value 3" "Bar", "some value 3" は、テーブルが次のようになることを意味します。

Col1| Col2
------------------
フー | フー | 何らかの値 1
フー | フー | いくつかの値 2
フー | フー | 何らかの値 3
バー | バー | 何らかの値 3

そして、Col1/Col2 に主キーがあり、はい、「正規化」されています。
キーがまったくない場合は、いいえ、「Bar」の別のインスタンス「some value 3」を挿入できるため、正規化されません。

あなたが追加した新しい質問に関して:
Col1とCol2にまたがるPKがある場合、それはまだ2NFと3NFにあります。違反するキーの一部ではない列を追加する必要があり、Col1 または Col2 のみから派生できる必要があります。

于 2009-06-05T19:18:26.640 に答える
0

表の値のリストは次の 4 つの行を表していると思います。

col1 col2
Foo  some value 1
Foo  some value 2
Foo  some value 3 
Bar  some value 3

私の理解に基づいて、このテーブルは正規化されていると見なされます。ここでの主キーは、{col1, col2} の複合キーであると予想されます。

通常、col1 と col2 がそれぞれ、マップされるエンティティの追加属性を含む他のテーブルへの外部キーである場合、このタイプのテーブル内の値の多対多マッピングが見られると予想します。

これらの nvarchar 値ではなく、数値キーを検討することもお勧めします。これらのテキスト値は、それらが表すエンティティの適切な候補キーではない可能性があると思われますが、その判断を完全に下すのに十分な情報がありません。

于 2009-06-05T19:25:48.543 に答える