複数のサイズがある商品があります。次のデザインは良いですか?
商品(#商品ID、商品名)
サイズ(#size_id, #product_id, size)
「#」は、外部またはプライマリのいずれかのキーを示します。
複数のサイズがある商品があります。次のデザインは良いですか?
商品(#商品ID、商品名)
サイズ(#size_id, #product_id, size)
「#」は、外部またはプライマリのいずれかのキーを示します。
どの列の組み合わせが主キーで、どれが外部キー制約で、どれがサイズ テーブルで一意に制約されるかを明確に指定していません。
Product_id は明らかに Product を参照する外部キーです。問題ありません。
Size_id はおそらく自動インクリメント識別子であり、Size の「主キー」となることを意図しています。私にはやり過ぎのように思えますが、実際には間違っていません。
文書化されていない Product_ID と Size の組み合わせには、次のような 2 つの行になってしまわないように一意の制約が必要です。
Size_ID Product_ID Size
1234 23456 12
1235 23456 12
これは同じことを 2 回言っています — ID 23456 の製品はサイズ 12 です。同じことを 2 回言うのは繰り返しであり、間違った答えにつながる傾向があります (製品 23456 のサイズはいくつありますか?単に COUNT(*) の代わりに COUNT(DISTINCT Size) を記述する必要があります。これは、入力のためではなく、DBMS がより多くの作業を行う必要があり、誰かがいつか忘れて間違ったクエリを生成し、それが行われないためです。何かが劇的にうまくいかなかった理由を事後分析するまで、問題として発見されました。
Product_ID と Size の組み合わせを主キーとして使用すると、Size_ID がなくても問題なく実行できます。それができない場合は、Product_ID と Size に一意の制約が必要です。