数据库结构 - 属于多个团队的用户

时间:2017-03-06 16:03:41

标签: mysql database

如果我有一个包含电子邮件和登录详细信息等的用户表,如果用户只属于一个团队,我可以创建一个名为team的新列,但如果该用户在多个团队中,您将如何构建它?

我能想出的最好方法是为特定用户创建一个名为PlayersTeams的表,但是在规模上看起来像要创建的大量表。这是我能提出的最佳方式,但我认为这里经验丰富的人可能对我有更好的建议。

只有一个团队:

PlayerID   email           TeamID
1          John@abc.xyz    123
2          sarah@pqr.stu   456
3          peter@asd.jkl   789

多个小组:

PlayerID    TeamID
1           123
1           456
1           789
2           123
2           789
3           456
3           789

我对此表示怀疑,但是我应该有一个特定的用户数据库,然后一旦用户登录,然后切换到团队数据库?

2 个答案:

答案 0 :(得分:1)

您正在寻找多对多关系。

使用第三个(联结)表将是完成此方案的正确方法。示例表结构:

player: player_id, email
team: team_id, name
player_teams: player_id, team_id

答案 1 :(得分:1)

问题是球队和球员之间的关系是多对多关系(球队由零,一个或多个球员组成,一个球员可以属于零,一个或多个球队)。

解决多对多关系的唯一方法是通过关联表(就像你的直觉引导你的PlayerTeam表)。

关联表的好处是你可以添加添加列,如位置,球衣号等......

关联表将由两个表的主键组成,其中外键返回原始表...

PlayerTeam
----------------------
PlayerID    same datatype and foreign key references to player(player_id)
TeamID      same datatype and foriend key references to team(TeamID)
team_number -- possible additional column for this association
position    -- possible additional column for this association

建议创建主键(PlayerID,TeamID)