购物车的数据库表结构

时间:2008-12-11 21:13:59

标签: database-design

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

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

有没有人在此之前解决过这个问题......哎呀,我相信有人有。我的问题是:是否有最佳实践方法来构建数据库表以允许这种事情?在逻辑方面,我很难绕过这个。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

Ayende正在做的任何事情都将超过初学者的头脑。要回答您的问题,您需要3个表格。一个用于您的产品,一个用于包装,一个用于将产品“链接”到包装。我假设你有前两个被覆盖。第三种称为多对多关系。

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

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

答案 3 :(得分:1)

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

限制是产品只能是一个包装的一部分。因此,如果你出售棒球,蝙蝠和手套,以及包括所有三个的“棒球”套装,手套就不可能成为“足球”套装的一部分。

然而,一个优点是“棒球”和“足球”套装以及“教练手册”产品都可以成为“完整体育”套餐的一部分。如果你从'棒球'包装中取出蝙蝠,它也会从'完整的运动'套装中移除。所有这些都没有添加单个表格。

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