标题非常模糊,所以我将进一步解释:
上下文:
-
一家制造公司拥有广泛的产品,所有产品均具有基本价格。
-
公司具有不同的合同与不同的买家。
-
每份合同包含产品和的折扣价格 。合同中未列出的产品将以基本价格购买。
简而言之,产品本身不会改变,但是它的 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, ... )