2016-12-03 3 views
0

タイトルは非常にあいまいであるので、私はさらに以下に説明します:契約に応じて、異なる価格を持つ製品データベースを設計する方法

コンテキスト:

  • 製造会社が持っていますの製品の幅広い範囲で、すべての製品に基本料金が付きます。

  • 会社が異なるバイヤーと異なる契約を持っています。

  • 各契約は製品の買い手はで購入することができとその割引価格リストが含まれています。契約に記載されていない製品は、基本価格で購入されます。一言で言えば

、製品自体は変更されませんが、その価格契約に応じて変化します。割引価格は数式で計算されていないことに注意してください - それらは文字通り価格の異なるセットです。

私の製品表には、このような設定である:私は、データベースの設計にかなり新しいですし、私の人生のために私はなるように契約のテーブルを設計するための効率的な方法を把握することはできません

==================================== 
product_id | category_id | base_price| 
==================================== 
1   | 1   | 300  | 
2   | 3   | 200  | 
3   | 5   | 500  | 

それそれに含まれる製品の価格を変更することができます。どんな助けでも大歓迎です。


ここで私が試したものです。しかし、このアプローチはpricingsテーブル内の行を増加させないでしょう

=============================================== 
pricing_id | price | product_id | contract_id | 
=============================================== 
1   | 400 | 3  | 1   | 
2   | 230 | 2  | 2   | 
3   | 520 | 5  | 3   | 

契約テーブル

======================== 
contract_id | buyer_id | 
======================== 
1   | 1  | 
2   | 3  | 
3   | 5  | 

Pricingsテーブルを契約の各製品がこの表の一意の行になるため、劇的に変化しますか?だから私は4つの契約があった場合、行は4 X (No. of products in the contract)になりますか?

+0

は私達にあなたの最高のショットを与えます。また 'category'はそれ自身のテーブルを持つべきです。 –

+1

ちょうど契約によってインデックスされた価格表があります。基本価格を返すデフォルト契約がある。 –

+0

@ PM77-1ありがとう、あなたのレビューのために私のアプローチを更新しました –

答えて

1

デザインはきれいです。契約上の各製品の価格がある場合は、それを保管する必要があります。テーブルの大きさやテーブル数は重要ではありません。あなたが適切な設計とインデックスを持っていれば、データベースはこれを処理できます。

自然キーを持つあなたのデザイン:サロゲートキーで

Product   (id (pk), ..., base_price) 
Buyer   (id (pk), ...) 
Contract  (id, id_buyer (fk1 to Buyer), ...) 
Contract_Product(id_contract (pk, FK1 to contract), 
        id_product (pk, FK2 to product), 
        price, ...) 

あなたのデザイン:

Product   (id (pk), ..., base_price) 
Buyer   (id (pk), ...) 
Contract  (id, id_buyer (fk1 to Buyer), ...) 
Contract_Product(id (pk), 
        id_contract (unique1, FK1 to contract), 
        id_product (unique1, FK2 to product), 
        price, ...) 
関連する問題