我试图理解多对多的关系,但我的脑袋一直在我的这个爱好项目上崩溃:
在游戏数据库中,我目前有一个包含所有列和值的表。
GAMES
id name alt_name1 alt_name2 type length group_size
----------------------------------------------------------------------------
1 foo foozoo NULL ice, team, silly s, m s, l, xl
但是,在实现搜索时,我在专门为小团体寻找中等长度的愚蠢游戏时遇到了问题。
据我了解,为了规范化,我会为name
创建一个新表(一个 id 到最多三个名称)。 type
,length
和group_size
是多对多关系,所以我需要为它们的值创建一个表,并创建一个表来保存它们与游戏的关系:
type
games_type
length
games_length
group_size
games_group_size
有没有比创建所有这些表更好的方法?
感谢您的想法!
每当有多对多关系时,都应该有 2 个包含不同值的表,然后是另一个将两者关联的表(联结表)。
在包含非关联记录的表中,所有其他列都应描述主键特有的属性。如果描述性值可以在表中多次出现,则它可能应该有自己的表(查找表)。
例如:
Items_A
id,name
Items_B
id,name
A_with_B
item_a_id,item_b_id
这的常见用法是用户和组,如下所示:
Users
id,name
Groups
id,name
Group_Users
user_id,group_id
如果扩展该示例以包含查找表,则可以具有如下所示的内容(其中用户只能位于一个位置,但可以属于多个组):
Users
id,name,location_id
Locations
id,name
Groups
id,name
Group_Users
user_id,group_id
这是正确的,你使用games_type
、games_length
和games_group_size
表有效地分解了多对多关系,从而允许一个游戏具有多个类型、长度和组大小。