电子商务网站的数据库设计

时间:2011-10-24 21:11:34

标签: mysql database database-schema

我更像是一个前端人员,所以如果这些问题变得愚蠢,我会事先道歉:)

我正在为电子商务网站设计数据库架构。本网站上销售的产品可能包含其他产品。 Eq:将汽车视为产品。汽车还可以包含其他产品,如座椅,方向盘,挡风玻璃等,每个产品都可以单独出售。

问题#1 Product表必须考虑到这一点? Product表是否有一个名为Products的字段包含与此产品关联的所有productIds? (或归一化到自己的表中进行优化)

问题#2 :此网站也会不时有折扣,可以应用于产品(在单个产品或包含其他产品的产品上)。还有一些折扣适用于整个订单。设计折扣表的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

问题1:

不要包含逗号分隔ID的列。你最终会讨厌生活。查询很难,难以更新,也不允许您强制执行数据完整性。我建议使用这样的东西:

Product
--------
ProductId
ProductName
ParentProductId  --nullable

这将为您提供一个具有递归层次结构的表。如果产品没有任何父母,只需将ParentProductId列保留为空。

问题2:

我会将此结构用于折扣:

ProductDiscounts
-----------------
DiscountId
ProductId  --nullable
Discount

Order
------
OrderId
DiscountId --nullable
OtherStuff

使用此结构,您必须构建逻辑,以便在没有特定产品ID的情况下将折扣应用于整个订单。

答案 1 :(得分:1)

不知道更多,这应该符合您的需求:

Q1。

带有ids的产品表
包含多行包含产品ID且包含产品ID

的表

Q2。

折扣表有:
折扣开始日期时间
折扣结束日期时间
金额小数
金额类型 - 百分比或直接金额
产品ID - 如果为null,则折扣适用于整个订单,而不仅仅是一个产品

希望这有帮助。