通过数据透视表实现一对一关系

时间:2014-06-27 13:38:45

标签: mysql sql database relationships

好吧所以我有一个足球网站,当用户注册时他们会得到一个团队和6个不同的体育场可供选择。所以我有一个团队表:

----------------------------------------
|  user_id  |  team_name  |  stadium_id  |
----------------------------------------
|     1     |     barca   |      2     |
----------------------------------------

然后我决定让体育场成为自己的桌子

----------------------------------------------
| id  |    name   |    capacity  |  price      |
----------------------------------------------
|  1  |  Maracana |     50000    |    90000    |
------------------------------------------------
|  2  |  Morombi  |     80000    |    150000    |
------------------------------------------------

获取团队竞技场名称我必须从球队表中获取arena_id然后获取带有id的竞技场名称。现在我不认为这是非常有效的,所以我给了它一些思考,我认为最好的解决方案是添加一个像这样的数据透视表:


| id  |    arena_id    |    team_id   | 
---------------------- ----------------
|  1  |    2           |     1    
--------------------------------------|
|  2  |    1           |     2   
--------------------------------------|

我通常将数据透视表视为多对多关系的表,而不是一对一的关系。在这个例子中使用数据透视表是最好的解决方案,还是应该离开我目前正在使用的实现?

1 个答案:

答案 0 :(得分:1)

您不需要使用数据透视表。它可以是一对一或一对多的关系。如果每个用户/团队仅涉及一个体育场(两个团队不能使用体育场),那么这是一对一的。在一对多关系中,多个团队/用户可以使用同一个体育场,如果您有数千名用户并且开始没有体育场馆,这可能是必要的。

此处JOIN statement效率很高。

SELECT s.name, t.team_name   -- Get the team's and stadium's name
  FROM team t                -- From the team table
  JOIN stadium s             -- Join it with the stadium table
    ON (t.stadium_id = s.id) -- Join ON the stadium_id

这将返回每个注册团队的团队名称和体育场名称。

您可能需要调整查询,但在阅读上面链接的MySQL参考后,您应该能够掌握它。