web-dev-qa-db-ja.com

複合キーの使用は2NFに違反しますか?

私が遭遇したすべてのデータベース関連の参考書から、データベーステーブルは少なくとも3NFである必要があると述べる一般的なルールがあります。

私が理解していることから、テーブルが1NFを満たし、単一列の主キーを持っている場合、テーブルは2NFと見なされます。私が間違っていたら訂正してください。

そのため、特にM:Nテーブルに関連するエンティティに対して複合キーを使用することの議論が多い理由を理解できませんでした。例えば:

A Product_Customerテーブル、列:

  • CustomerProductID
  • CustomerID
  • ProductID

主キー(CustomerProductID)は必要なく、複合キー(CustomerID, ProductID)代わりに。

しかし、複合キーを使用しても2NFを満たさないため、それはテーブルの普遍的な規則に違反していないのではないでしょうか。

私が間違っている場合は修正してください。特に、テーブルに複合キーがある場合、2NFにはならないことを理解している部分です。

2
stackno

2NFの定義は正しくありません。

2NFは、リレーションが1NFにあり、それが部分的な依存関係なしの場合です。つまり、マルチパートキーの一部のみに依存する述語(列)はありません。

つまり、すべての(1つ以上の)キーが単一列のキーであるテーブルは、定義上、2NFviolate2NFを実行できません。ただし、alsoが2NFに違反しない複数列(複合)キーを持つテーブルを持つこともできます。キーに含まれる列の数ではなく、候補キーのpartのみに依存する非キー列があるかどうかについてです。

テーブルが複数列のキーを持つことが2NFである可能性があるので、複数列のキーを持つテーブルが3NFである可能性もあります。推移的な依存関係もないことを確認する必要があります。

7
Joel Brown