我正在尝试找到为以下场景设计 sql 模式的最佳方法:
-一个用户可以有多种兴趣
-平台提供预定义的兴趣,用户可以从中选择
-用户可以创建自己的自定义兴趣并选择它们
我建议采用以下模式:
兴趣(ID,姓名)
自定义兴趣(id、名称、user_id)
user_interests(id,interest_id,custom_interest_id,user_id)
//其中(interest_id为NULL且custom_interest_id不为NULL)OR(interest_id不为NULL且custom_interest_id为NULL)
在这种方法中,用户在 user_interests 表中,用户将能够从 custom_interests 中选择不属于他的项目。
它肯定可以通过适当的后端验证来限制,但是有人对这种类型的场景有更好的建议吗?
谢谢! :)
我建议您将系统提供的兴趣和用户自定义的兴趣分开。因为如果不同的用户根据自己的兴趣选择相同的名称怎么办?您不想只在表中存储一行用户自定义兴趣。谁知道他们将来可能想要做什么,例如更新名称或删除他们创建的自定义兴趣?即使您将它们视为相同的结构,它们实际上是代表系统中不同事物的不同实体(通过以不同的颜色显示它们,您实际上承认存在差异)。
我建议的桌子设计:
system_interests: id, name
custom_interests: id, name
user_system_interests: user_id, system_interest_id (user can have multiple interests)
user_custom_interests: user_id, custom_interest_id
这种设计为您的系统开辟了一种更灵活的方法。因为有一天你可能会发现
custom_interests
的结构实际上与system_interests
不一样(反之亦然),所以你可以轻松地单独修改它们。