3

Person(ID, Name)テーブルと。を備えた小さなデータベースがあるとしましょうProduct(ID, Name, Color)。ID列は、明らかに各テーブルの主キーです。いつものように、多対多のテーブルの関連付けを追加したいと思いますOrder(PersonID, ProductID, Date)。テーブルオーダーの主キーは組み合わせだという印象を受けました(PersonID, ProductID)。ただし、一部のアプローチでは、この組み合わせ(PersonID, ProductID, Date)が主キーとして推奨されます。違いは何ですか?(PersonID, ProductID)主キーであっても、それぞれの組み合わせ(PersonID, ProductID)に対応する日付は1つだけだと思います。後者が当てはまる場合、主キーに日付を含める必要があるのはいつですか?

4

1 に答える 1

1

個人/製品の組み合わせに関連付けられる日付が 1 つしかない場合、PK は になります(PersonID, ProductId)Dateこのような関連付けが複数存在する可能性があり、日付がそれらを区別する場合にのみ、PK に を含める必要があります。不要なときに PK に日付を含めると、同じ個人/製品で日付が異なる重複行を作成しようとしても、データベースはエラーを報告しません。

アップデート:

ID 列の追加に関するあなたのコメントにより、これは正しくないことに気付きました。一意のキーとして宣言するだけ(PersonID, ProductID)でよく、主キーである必要はありません。次に、ID フィールドを主キーとして持つことができます。一意のキーは重複を防ぎます。Dateを PK に追加すると、同じことができます。

ただし、適切に正規化されたデータベースでは、主キーはテーブル内の唯一の一意のキーである必要があります。リレーションは Key->Data のマッピングであり、PK はこのマッピングを反映する必要があります。

于 2012-11-01T08:46:41.253 に答える