【问题标题】:Database design for e-commerce site电子商务网站的数据库设计
【发布时间】:2011-10-24 21:11:34
【问题描述】:

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

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

问题#1Product table 应该考虑到什么? Product 表有一个名为 Products 的字段是否有意义,其中包含与该产品关联的所有 productId? (或归一化为自己的表进行优化)

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

【问题讨论】:

  • 我们在谈论家庭作业?
  • Abe,我已经重新审视了我的大部分问题,并接受了我认为已经回答的问题。 @danihp,是的,这个问题纯粹是为了我的学习目的。正如我所提到的,我主要是一个前端的人,但我应该多样化一点:)
  • 分支没有错 ;) 坚持下去

标签: mysql database database-schema


【解决方案1】:

问题一:

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

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

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

问题 2:

我会使用这种结构来获得折扣:

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

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

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

【讨论】:

  • 谢谢,安倍。您如何区分产品折扣与整个订单折扣?如果 ProductId = null,那么就是订单折扣,就像@evan 建议的那样?
  • 是的,我会更新我的答案。我还会引用Order 表中的Discount
  • 谢谢,安倍。我也喜欢ParentProductId 的想法。如果没有更好的答案,我会接受你的回答。
  • 拥有一个产品表和包含的产品将只允许一个产品包含在 1 个父产品中。一个座位可能在多种类型的汽车中,每种汽车还包含方向盘,笔可能与笔记本或笔盒捆绑在一起,等等。
  • @evan,这是真的。我曾假设产品只能有一个父级,但如果不是这样,那么你的结构就更有意义了。
【解决方案2】:

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

第一季度。

带有 ID 的产品表
包含多行包含产品 id 和包含产品 id 的表

第二季度。

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 2015-11-22
    • 2018-09-03
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多