Database design 购物车的数据库表结构

Database design 购物车的数据库表结构,database-design,Database Design,我是SQL的初学者,正在开发我的第一个数据库。我正在尝试创建一个非常精简的购物车,目前正在努力在开始编写网站之前将数据库整合在一起 我正在努力解决的问题之一是如何构造数据库的产品部分。如果我所有的产品都是单独的,那就可以了。我的问题是,我还希望能够创建各种“包”,将多个产品组合成一个包/产品,具有自己独特的ID,但价格不同 以前有人解决过这个问题吗…见鬼,我肯定有人解决过。我的问题是:是否有一种最佳实践方法来构造数据库表以允许这种事情?从逻辑上讲,我很难理解这一点。我可能会创建一个包含包装id和

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

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


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

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

Ayende Rahien(Rhinomock公司)最近一直在做一系列关于构建购物车的工作,从这里开始:。它确实使用类图,但您应该能够将概念转换为数据库图。

Ayende所做的任何事情都将超出初学者的理解。要回答您的问题,您需要3个表。一个用于您的产品,一个用于您的软件包等等将产品与包装“链接”。我假设您已经涵盖了前两个。第三个称为多对多关系

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


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

一种避免额外表格的方法,但有一些限制,就是只需将自引用的“ParentID”字段添加到产品表中。该“ParentID”只需指向关联的包产品。因为它是同一个表,所以包与您的单个产品具有相同的字段(价格等)。要查找组成包的产品,只需查询包的“产品ID”中包含“ParentID”的所有产品

限制是,产品只能是一个包装的一部分。因此,如果你销售棒球、球棒和手套,以及包括所有三种产品的“棒球”包装,那么手套永远不能成为“足球”包装的一部分

然而,一个优势是“棒球”和“足球”包以及“教练手册”产品都可以是“完整运动”包的一部分。如果你从“棒球”包中取出球棒,它也会从“完整运动”包中取出。所有这些都不需要添加一张桌子

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