2

有 3 个主要实体:用户、产品和产品列表。用户可以将产品标记为收藏。产品列表中只能设置喜欢的产品。

示例 1:我将牛奶和面包标记为最喜欢的。并将标记的牛奶添加到“给儿子”列表中。此外,用户可以在添加最喜欢的产品之前创建空产品列表。

示例 2:我创建列表“for sun”,将牛奶和面包标记为收藏夹,并将标记的牛奶添加到列表“for sun”。

喜欢的产品可以在没有产品列表的情况下存在。产品列表可以在没有最喜欢的产品的情况下存在。相同的产品可以设置在不同的列表中。

主要问题:产品列表必须与用户链接。如果它有喜欢的产品,可以通过它们链接。但是如果他没有产品,则必须直接链接到用户。 数据库的架构

可能的解决方案:创建 4 个表:用户、产品、产品列表和连接表产品列表 - 产品。在每个用户的产品列表中创建列表“最喜欢的”。但这也违反了规范化规则,因为每当将此产品添加到另一个列表时,我都需要重复添加产品以列出“收藏夹”。 在此处输入图像描述

4

1 回答 1

3

如果一个产品既在ProductLists命名的“收藏夹”中,又在其他一些中ProductLists,那么在 中需要有两个条目ProductListsProducts。这不违反规范化。您有两个ProductsLists和两个多对多关系存储在ProductsListsProducts. 我认为该建模没有问题。

如果每个用户都有一个(可能是空的)“最喜欢的”产品列表,您希望将其视为与其他产品不同的概念ProductsLists,那么只需制作表格:

Users, ProductsLists, ProductsListsProducts, Products, 和另外一个UsersFavoriteProducts.

UsersFavoriteProducts将包含 auser_id和 a product_id,并与典型的 . 分开处理ProductsListsProductsListsProducts不会包含“最喜欢的”产品的关系;“收藏夹”关系只会存储在UsersFavoriteProducts.

于 2012-10-01T05:02:49.153 回答