这里的mysql数据库很新。我有一张USERS表和一张TEAMS表。用户可以在多个团队中。什么是存储用户与他所在团队之间关系的最佳方式?
让我们说有数百个团队,每个团队由大约20个用户组成,平均而言,一个用户可以在大约10个团队中,同时也注意到用户可以不时更换团队。
我可以想到可能在我的TEAMS表中添加一个列,其中包含一个用户ID列表,但是我必须在我的USERS表中添加一个列,其中包含一个团队ID列表。虽然这可能是一个解决方案,但更新成员资格似乎很麻烦。似乎可能有一种更聪明的方法来处理这些信息......或许像另一张表一样?想法?
谢谢!
ps,最好的字段类型是什么,用于存储列表,最简单的划分方式是什么?
答案 0 :(得分:4)
用于存储列表的最佳字段类型是什么?最好的分隔方式是什么?
尝试在单个列中存储多个值通常是一个非常糟糕的主意。这是处理的地狱,你永远不会得到适当的参考完整性。
你真正想要的是join table。例如:
CREATE TABLE user_teams (
user_id INT NOT NULL FOREIGN KEY REFERENCES users(id),
team_id INT NOT NULL FOREIGN KEY REFERENCES teams(id),
PRIMARY KEY (user_id, team_id)
);
因此,一个team_id
可以有user
个,user_id
可以有team
个。SELECT teams.*
FROM user_teams
JOIN teams ON teams.id= user_teams.team_id
WHERE user_teams.user_id= (...some id...);
(但主键确保不存在同一用户和团队的重复映射。)
然后为用户选择团队详细信息,您可以说:
{{1}}