在我正在设计的网站的一部分中,有一个部分既有预定义值,也有指定自定义值的选项。
作为一个更简单的例子,让我们假设这些值是“体育”并且应用程序已经预定义了体育,但是有些用户想要输入他们自己的,因为我无法预测他们会出现的一切。用户无权访问其他人输入的体育赛事,只能访问自己的体育赛事。
预定义的运动和自定义运动是否应存储在同一个表格中?在这种情况下,我要么必须允许该表中的user_id列为null,要么为预定义的运动创建用户和user_id。
大多数情况下,当我按名称搜索运动时,我会想要搜索预定义的和用户自己的自定义运动,所以如果预定义和自定义运动是分开的,我仍然需要搜索两个表
另一方面,如果将它们分开,则会更难根据sport_id指定外键关系。
处理此类情况的好方法是什么?
答案 0 :(得分:1)
我没有看到包括表中的预定义值和自定义值的问题(也许您可以使用位标志来指示“自定义”,以防您以后需要对它们执行某些操作)。您可以轻松地将标识值指定为该表中的主键,因此指定外键关系不应该存在问题。
你将遇到的唯一问题是欺骗和误导。
答案 1 :(得分:0)
我会将其作为多对多关系来实现。 表1 - 体育(sport_id,sport_name,system_defined) 表2 - 用户(user_id,user_name) 表3 - users_x_sports(user_id,sport_id)
如果空间不是很重要,则users_x_sports表会将用户连接到用户定义的体育和系统定义的体育。
如果空间非常宝贵,则使用UNION搜索系统定义的和用户定义的运动。仅将用户链接到其用户定义的运动。
规范化运动和减少重复项的空间节省可以弥补users_x_sports表中的额外链接。