有3个主要实体:用户,产品和产品清单。用户可以将产品标记为收藏。可以在产品列表中设置仅最喜欢的产品。
示例1:我将牛奶和面包标记为收藏。并添加标记牛奶列出“为儿子”。 此外,用户可以在向其添加喜爱的产品之前创建空的产品列表。
示例2:我创建了“for sun”列表,将牛奶和面包标记为favotite,并添加标记牛奶以列出“for sun”。
最喜欢的产品可以在没有产品列表的情产品列表可以在没有喜欢的产品的情可以在不同的列表中设置相同的产品。
主要问题:产品列表必须与用户关联。如果它有喜欢的产品,可以通过它们链接。但是如果他没有产品,它必须直接链接到用户。
可能的解决方案:创建4个表:用户,产品,产品列表和连接表产品列表 - 产品。在每个用户的产品列表中创建列表“收藏夹”。但它也打破了规范化的规则,因为每当将这些产品添加到另一个列表时,我需要重复添加产品来列出“最喜欢的”。
答案 0 :(得分:3)
如果某个产品同时包含ProductLists
名为“收藏”和其他ProductLists
,则ProductListsProducts
中需要有两个条目。这不违反规范化。您在ProductsLists
中存储了两个ProductsListsProducts
和两个多对多关系。我没有看到该建模存在问题。
如果每个用户都有一个(可能为空的)“收藏”产品列表,您希望将其视为与其他ProductsLists
分开的概念,那么只需创建您的表格:
Users
,ProductsLists
,ProductsListsProducts
,Products
以及UsersFavoriteProducts
。
UsersFavoriteProducts
将包含user_id
和product_id
,并与典型的ProductsLists
分开处理。 ProductsListsProducts
不会包含“最喜欢”产品的关系; “收藏夹”关系只会存储在UsersFavoriteProducts
。