0

複数のサイズがある商品があります。次のデザインは良いですか?

  • 商品(#商品ID、商品名)

  • サイズ(#size_id, #product_id, size)

「#」は、外部またはプライマリのいずれかのキーを示します。

4

1 に答える 1

1

どの列の組み合わせが主キーで、どれが外部キー制約で、どれがサイズ テーブルで一意に制約されるかを明確に指定していません。

  • 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 に一意の制約が必要です。

于 2012-04-22T23:06:09.147 に答える