2010-08-28 110 views
1

这里给MySQL数据库新手。我有一张USERS表和一张TEAMS表。用户可以在多个团队中。存储用户与他所在的团队之间的关系的最佳方式是什么?假设有数百个团队,每个团队由大约20个用户组成,平均而言,一个用户可能在大约10个团队中,同时也注意到用户可以不时更换团队。mysql:处理用户和团队之间关系的正确方法?

我想到可能会添加一列到我的TEAMS表中,该表包含用户标识的列表,但是我不得不向我的USERS表中添加一个列,其中包含团队标识列表。虽然这可能是一个解决方案,但更新成员资格似乎很麻烦。似乎可能有更聪明的方式来处理这些信息......也许像另一张桌子一样?思考?

谢谢!

ps,什么是存储列表的最佳字段类型,以及最好的划分方式是什么?

回答

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 S表示一个user以及用于一个team任何数量的user_id秒。 (但是主键确保有没有重复相同的用户和组的映射。)

然后选择你可以说一个用户团队的细节是这样的:

SELECT teams.* 
FROM user_teams 
JOIN teams ON teams.id= user_teams.team_id 
WHERE user_teams.user_id= (...some id...); 
+0

+1但为什么你是否声明两者都是主键? – Eldelshell 2010-08-28 21:10:18

+0

完美。正是我在找的东西。谢谢。 – ctown4life 2010-08-28 21:23:21

+0

@Ubersoldat:因为它会停止user_id/team_id组合的重复项,但仍允许user_id与各种team_id的不同组合,反之亦然。 – 2010-08-28 21:35:45