我是SQL的初学者,正在开发我的第一个数据库。我正在尝试创建一个非常简化的购物车,目前正在开始编写网站之前将数据库整合在一起。
我正在努力解决的一个问题是如何构建数据库的产品部分。如果我的所有产品都是单独的产品,那就没关系。我的问题是,我还希望能够创建各种类型的“包”,将几种产品组合成一个具有自己唯一ID但价格不同的包/产品。
有没有人在此之前解决过这个问题......哎呀,我相信有人有。我的问题是:是否有最佳实践方法来构建数据库表以允许这种事情?在逻辑方面,我很难绕过这个。
答案 0 :(得分:3)
答案 1 :(得分:1)
我可能会创建一个包表,其中包含包和包的价格,然后在包和带有包ID的产品(作为包表的FK)和相应的产品ID之间有一个中间(交叉引用)表(作为产品表的FK)。
答案 2 :(得分:1)
Ayende正在做的任何事情都将超过初学者的头脑。要回答您的问题,您需要3个表格。一个用于您的产品,一个用于包装,一个用于将产品“链接”到包装。我假设你有前两个被覆盖。第三种称为多对多关系。
它应该被称为ProductsPackages并且有两列(PackageId和ProductId)。您应该为Products和Packages表创建外键约束。
现在,要将产品添加到包中,请将每个产品的ID插入到ProductsPackages表中。
答案 3 :(得分:1)
避免额外表的一种方法,但强加一些限制是简单地将自引用“ParentID”字段添加到product表。 “ParentID”只是指向相关的包产品。由于它们都是相同的表,因此您的包与您的单个产品具有相同的字段(价格等)。要查找包含哪些产品的产品,只需使用包“ProductID”的“ParentID”查询所有产品。
限制是产品只能是一个包装的一部分。因此,如果你出售棒球,蝙蝠和手套,以及包括所有三个的“棒球”套装,手套就不可能成为“足球”套装的一部分。
然而,一个优点是“棒球”和“足球”套装以及“教练手册”产品都可以成为“完整体育”套餐的一部分。如果你从'棒球'包装中取出蝙蝠,它也会从'完整的运动'套装中移除。所有这些都没有添加单个表格。
当然,每个产品限制的单个包装意味着这肯定不适用于所有情况。