【问题标题】:Database Table Structure for Shopping Cart购物车的数据库表结构
【发布时间】:2023-03-21 01:18:02
【问题描述】:

我是 SQL 的初学者,正在研究我的第一个数据库。我正在尝试创建一个非常精简的购物车,目前正在努力在开始编写网站代码之前整合数据库。

我正在努力解决的一件事是如何构建数据库的产品部分。如果我所有的产品都是单独的物品,那就没问题了。我的问题是,我还希望能够创建各种“包装”,将多种产品组合成一个具有自己唯一 ID 但价格不同的包装/产品。

以前有没有人解决过这个问题...哎呀,我敢肯定有人有。我的问题是:是否有一种最佳实践方法来构建数据库表以允许这种事情?从逻辑上讲,我很难理解这一点。

【问题讨论】:

    标签: database-design


    【解决方案1】:

    Ayende Rahien(来自 RhinoMocks)最近做了一系列关于构建购物车的工作,从这里开始:http://ayende.com/Blog/archive/2008/12/07/designing-a-shopping-cart.aspx。它确实使用了类图,但您应该能够将概念转换为数据库图。

    【讨论】:

      【解决方案2】:

      我可能会创建一个包含包裹 ID 和价格的包裹表,然后在包裹和带有包裹 ID(作为包裹表的 FK)和相应产品 ID 的产品之间创建一个中间(交叉引用)表(作为产品表的 FK)。

      【讨论】:

        【解决方案3】:

        Ayende 所做的任何事情都会超出初学者的想象。要回答您的问题,您需要 3 张桌子。一种用于您的产品,一种用于您的包裹,另一种用于将产品“链接”到包裹。我假设你已经涵盖了前两个。第三种称为多对多关系。

        它应该被称为 ProductsPackages 并且有两列(PackageId 和 ProductId)。您应该为 Products 和 Packages 表创建外键约束。

        现在,要将产品添加到包中,请将每个产品的 id 插入 ProductsPackages 表中。

        【讨论】:

          【解决方案4】:

          一种避免额外表但施加一些限制的方法是简单地将一个自引用的“ParentID”字段添加到产品表中。该“ParentID”只是指向相关的包装产品。由于都是同一张表,因此您的包裹与您的单个产品具有相同的字段(价格等)。要查找组成包的产品,只需查询具有包的“ProductID”的“ParentID”的所有产品。

          限制是产品只能是一个包装的一部分。因此,如果您销售棒球、球棒和手套,以及包含这三者的“棒球”包装,则手套永远不会成为“足球”包装的一部分。

          但是,一个优点是“棒球”和“足球”套装以及“教练手册”产品都可以成为“完整运动”套装的一部分。如果您将球棒从“棒球”包装中取出,它也会从“完整运动”包装中取出。无需添加单个表格。

          当然,每个产品的单一包装限制意味着这肯定不会适用于所有情况。

          【讨论】:

            猜你喜欢
            • 2023-03-16
            • 2012-07-16
            • 2012-05-11
            • 1970-01-01
            • 1970-01-01
            • 2015-01-26
            • 1970-01-01
            • 2011-08-12
            • 2011-10-23
            相关资源
            最近更新 更多