mysql:处理用户和团队之间关系的正确方法?

时间:2010-08-28 21:05:06

标签: mysql database

这里的mysql数据库很新。我有一张USERS表和一张TEAMS表。用户可以在多个团队中。什么是存储用户与他所在团队之间关系的最佳方式?

让我们说有数百个团队,每个团队由大约20个用户组成,平均而言,一个用户可以在大约10个团队中,同时也注意到用户可以不时更换团队。

我可以想到可能在我的TEAMS表中添加一个列,其中包含一个用户ID列表,但是我必须在我的USERS表中添加一个列,其中包含一个团队ID列表。虽然这可能是一个解决方案,但更新成员资格似乎很麻烦。似乎可能有一种更聪明的方法来处理这些信息......或许像另一张表一样?想法?

谢谢!

ps,最好的字段类型是什么,用于存储列表,最简单的划分方式是什么?

1 个答案:

答案 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}}