1

私は3つのテーブルを持っています:

products (id, name, price, etc)
orders (id, date, payment_method, etc)
shipments (id, order_id, product_id, address, etc)

私の質問は次のとおりです。出荷テーブルproduct_idに保持するのは正しいですか? 注文テーブルを使用せずに出荷された製品に関する情報を見つけるために、ここに保管します。

4

3 に答える 3

2

私は提案します:

products (product_id, name, price, etc)
orders (order_id, date, payment_method, etc)
orderitem (orderitem_id, order_id, product_id, ...)
shipment (shipment_id, order_id, ... )

発送は冗長です - 住所などを注文に追加します...

于 2011-07-22T14:56:22.033 に答える
1

真実と美しさの原則に従って、冗長なデータを保存しないでください。バグが発生する絶好の機会であり、醜いです。将来の開発者の心に混乱を引き起こします。

真実と美の原則を破ることは許されていますが、問題にぶつかった場合にのみ、他の方法で解決することはできません。たとえば、注文テーブルに参加してクエリが遅すぎる場合は、データ(実行していることの技術名)を非正規化しても問題ありません。ドキュメントを作成し、すべての開発者が理解していることを確認してください。

クエリで余分な結合を回避するだけでは、十分な理由とは思えません。

于 2011-07-22T15:31:59.387 に答える
1

あなたはそれを行うことができますが、注意してください - テーブル orders の情報が変更される可能性がある場合、それは問題になります - つまり、テーブル orders の適切なレコードが product_id を変更すると、データベースが矛盾します。

静的辞書などで冗長な列を使用します。

また、データベース設計の NORMAL FORMS (NF) を確認してください。この冗長性が正規形に違反していないかどうかはわかりません。しかし、NFを維持するかどうかはあなた次第です。

于 2011-07-22T14:52:58.800 に答える