哪个数据库表设计更好?

时间:2015-10-21 00:00:01

标签: mysql database

我正在设计一个产品表,我希望揭示这些想法。

我需要为网站设计产品表,销售/折扣将在产品上......我有两种方法,我认为哪一种更好

选项1:产品表中的折扣

product table

id name price discount category
1  pen   70    0.20     2

选项2:折扣在另一个表

product table

id name   price category
1  pen     70    2
2  pencil

discount table
id discount
1  0.20

productdiscount table
prodid  discountid
 1        2

3 个答案:

答案 0 :(得分:2)

一般而言,选项2更好。

这是因为如果需要商业逻辑,很容易为单个产品添加多个折扣。

也可以重复使用折扣。假设您最终有这样的折扣表:

discount
id    type          value         expires          maxuses
1     percent       20            10-22-2015       500
2     flat          1.50          12-31-2015       null

您不需要修改product_discount表或产品表,以便上述工作仍然有效。

答案 1 :(得分:2)

取决于你的情况,我猜选项1更好。

如果你选择选项2,你也可以完全精神化并将价格放在另一张表中,因为你可以。问那些刚刚回答了选项2的人,他们会说你应该....

存在数据库表过度规范化的问题。

您需要问自己在两个选项之间做出选择的唯一问题是:我是否需要更改所有10美元折扣产品的折扣?我是否应该将折扣价值更改为15,以反映所有具有折扣的产品?大部分时间答案都是否定的,折扣是针对单个产品的。

答案 2 :(得分:0)

从我的观点来看,我会选择选项2但不同的想法。有几个原因
1。首先,表productdiscount是不必要的,因为你已经拥有discount表,除了它是多对多的关系并且你必须创建一个桥之外,再创建一个具有来自两个表的ID的表是不必要的。此外,您必须加入三个表才能检索产品详细信息和折扣价值,这使得这不是一个好习惯。

2。其次,我建议您创建一个表discountHistory,创建此表的原因是为了检查更改折扣的时间,人员和原因。同样的价格也可能是有代价的。例如,创建一个表priceHistory以跟踪过去的价格变化。

总的来说,应该有productdiscountdiscountHistorypriceHistory表,我建议您使用此数据库表设计,因为它通常是用于许多购物中心。