【问题标题】:How to model a relational table that store order details如何为存储订单详细信息的关系表建模
【发布时间】:2020-09-28 19:58:05
【问题描述】:

我正在研究如何创建电子商务数据库。经过一番搜索,这是我发现的:

这里的问题是 OrderDetails 是对 Products 表的引用。如果我编辑了价格、sku 等产品,它将影响之前添加的订单。

当第一个订单创建时,我可以在 OrderDetails 列的新列中插入产品数据(序列化或 json 化)。但缺点是如果我想从产品数据中查询特定数据,将很难查询。

我的问题是如何设计 OrderDetails 产品在创建订单时坚持数据,所以将来如果我编辑产品,它不会丢失该数据。

【问题讨论】:

  • 问 1 个(具体研究非重复)问题。
  • 你从哪里得到你的模式,为什么你认为这是“正常的”,你认为你的 etc 中隐藏了什么?阅读典型的产品标识符:通常有一个“SKU”(库存单位),通常它有一些编码结构样式-颜色-尺寸的服装。通常有一个定义 SKU 的“产品”表,其中有一个从 order-item-detailsProductForeign Key 引用,这样如果有订单,您就无法删除产品或价格。
  • @AntC,我在一些教程中看到过。请参考我更新的问题。
  • @philipxy,请参考我更新的问题。
  • 3 个问号和我想知道如何。请参阅我的第一条评论。遵循已出版的有关信息建模、关系模型和数据库设计与查询的学术教科书。 (用于记录和使用设计的语言和工具的手册不是这样的教科书。)(维基文章或网络帖子也不是。)问一个特定的研究过的非重复问题。基本问题是常见问题解答。 PS请不要插入编辑/更新,只是让你的帖子成为编辑时最好的演示文稿。添加不清楚的内容并不能说明问题。

标签: database relational-database e-commerce


【解决方案1】:

这里的问题是 OrderDetails 是对 Products 表的引用。如果我编辑了价格、sku 等产品,它将影响之前添加的订单。

建议您在做出这样明显错误的陈述之前阅读架构。

OrderDetails 引用 Products 不是“问题”,这是我所期望的:客户不得订购不存在的产品。

并回答我关于第一个版本中etc 中的内容的问题:OrderDetail 包括price。这是一个常见的结构:OrderDetailprice 取自客户下订单时的Product。这是给客户的报价;因此,我们有法律义务向客户收取该价格。如果价格随后在Product 发生变化,则不会影响此订单。

同样:IDSKUSizeColour 出现在 OrderDetails 上,因此如果您“编辑了产品”,它不会影响“之前添加的订单”。

这里没有什么“难以查询”的地方。如果您需要产品数据(可能下一个新订单),请查询Product。如需历史实际订单数据,请查询OrderDetails。如果您想查找差异,OrderDetails INNER JOIN Product ON OrderDetails.ProductID = Product.ProductID。现在你必须小心为你想要的表添加点前缀Size, Colour。但请注意,UnitPricePrice 不同。

我的问题是如何设计 OrderDetails 产品在创建订单时坚持数据,所以将来如果我编辑产品,它不会丢失该数据。

您现在应该可以回答自己的问题了。

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多