Database design 针对有时预定义有时自定义的值的数据库设计

Database design 针对有时预定义有时自定义的值的数据库设计,database-design,Database Design,在我正在设计的网站的一部分中,有一个部分包含预定义值和指定自定义值的选项 作为一个简单的例子,我们假设这些值是“运动”,并且应用程序具有预定义的运动,但是一些用户会希望输入自己的运动,因为我无法预测他们将出现的所有内容。用户将无法访问其他人参与的运动,只能访问自己的运动 预定义运动和自定义运动是否应存储在同一个表中?在这种情况下,我必须允许该表中的user\u id列为null,或者为预定义的运动创建一个user和user\u id 大多数情况下,在按名称搜索运动时,我希望同时搜索预定义运动和用

在我正在设计的网站的一部分中,有一个部分包含预定义值和指定自定义值的选项

作为一个简单的例子,我们假设这些值是“运动”,并且应用程序具有预定义的运动,但是一些用户会希望输入自己的运动,因为我无法预测他们将出现的所有内容。用户将无法访问其他人参与的运动,只能访问自己的运动

预定义运动和自定义运动是否应存储在同一个表中?在这种情况下,我必须允许该表中的user\u id列为null,或者为预定义的运动创建一个user和user\u id

大多数情况下,在按名称搜索运动时,我希望同时搜索预定义运动和用户自己的自定义运动,因此,如果预定义运动和自定义运动分开,我仍然需要在两个表中进行搜索

另一方面,如果它们是分开的,那么基于sport_id指定外键关系就会变得更加困难


处理这种情况的好方法是什么?

我看不出在表中同时包含预定义值和自定义值的问题(也许您可以使用位标志来表示“自定义”,以防以后需要处理它们)。您可以很容易地将标识值指定为该表中的主键,因此指定外键关系不应该有问题


您将遇到的唯一问题是重复和拼写错误。

我看不出在表中同时包含预定义值和自定义值的问题(也许您可以使用位标志来指示“自定义”,以防以后需要对其进行处理)。您可以很容易地将标识值指定为该表中的主键,因此指定外键关系不应该有问题


您将遇到的唯一问题是重复和拼写错误。

我将实现多对多关系。 表1-运动(运动id、运动名称、系统定义) 表2-用户(用户id、用户名) 表3-用户×体育(用户id,体育id)

如果空间不够,users_x_sports表会将用户加入用户定义的运动和系统定义的运动

如果空间有限,则使用联合搜索系统定义和用户定义的运动。仅将用户链接到其用户定义的运动


规范化运动和减少重复所节省的空间可能会弥补users_x_sports表中的额外链接。

我将实现多对多关系。 表1-运动(运动id、运动名称、系统定义) 表2-用户(用户id、用户名) 表3-用户×体育(用户id,体育id)

如果空间不够,users_x_sports表会将用户加入用户定义的运动和系统定义的运动

如果空间有限,则使用联合搜索系统定义和用户定义的运动。仅将用户链接到其用户定义的运动


将运动规范化和减少重复所节省的空间可能会弥补用户运动表中的额外链接。

我将此标记为答案,但添加到问题中的jug评论与答案一样好。我将此标记为答案,但添加到问题中的jug评论与答案一样好。