如何根据合同设计具有不同价格的产品数据库



标题非常模糊,所以我将进一步解释:

上下文:

  • 一家制造公司拥有广泛的产品,所有产品均具有基本价格。

  • 公司具有不同的合同与不同的买家

  • 每份合同包含产品的折扣价格 。合同中未列出的产品将以基本价格购买。

简而言之,产品本身不会改变,但是它的 Price 将根据合同而更改。请注意,折现价格不是由公式计算的 - 实际上它们是不同的价格。

我的产品表是这样的:

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

我是数据库设计的新手,对于我的寿命,我无法找到一种设计合同表的有效方法,以便它可以更改所包含的产品的价格。任何帮助都非常感谢。


这是我尝试的:

合同表

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

价格表:

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

但是,这种方法不会大大增加定价表中的行,因为合同中的每个产品将在此表中都是独特的行?因此,如果我有4个合同,则行将为4 X (No. of products in the contract)

您的设计看起来不错。如果您有合同上每种产品的价格,则应将其存储。桌子有多大或有多少桌子都没有关系。如果您有适当的设计和索引,数据库可以处理。

您使用天然键的设计:

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, ... )

最新更新