3

我试图理解多对多的关系,但我的脑袋一直在我的这个爱好项目上打破:

在游戏数据库中,我目前有一个包含所有列和值的表。

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 到最多三个名称)创建一个新表。typelength并且group_size是多对多关系,所以我需要为它们的值创建表,并创建一个表来保存它们与游戏的关系:

type
games_type
length
games_length
group_size
games_group_size

有没有比创建所有这些表更好的方法?

谢谢你的想法!

4

2 回答 2

3

任何时候你有一个多对多的关系,你应该有 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
于 2013-01-23T18:20:43.210 回答
1

没错,您正在使用和表有效地分解多对多关系games_type,从而允许游戏具有多个类型、长度和组大小。games_lengthgames_group_size

于 2013-01-23T18:20:36.833 回答