好吧所以我有一个足球网站,当用户注册时他们会得到一个团队和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
--------------------------------------|
我通常将数据透视表视为多对多关系的表,而不是一对一的关系。在这个例子中使用数据透视表是最好的解决方案,还是应该离开我目前正在使用的实现?
答案 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参考后,您应该能够掌握它。