2017-03-06 79 views
0

如果我有电子邮件和登录信息等users表,如果一个用户只属于一个团队,我可以创建一个名为team新列,但用户如果该用户是在多个团队如何你会构造它吗?DB结构 - 属于多个团队

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

只有一支球队:

PlayerID email   TeamID 
1   [email protected] 123 
2   [email protected] 456 
3   [email protected] 789 

多个团队:

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

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

回答

1

多对多的关系是你在找什么。

使用第三(结)表将完成该场景的正确方法。示例表结构:

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

然后你就可以查询1)'team_id'为'player_id'的列表, 2)所有'team_id'的'player_id'。谢谢,我实际上并没有看到直到阅读你的文章才能清楚地从双方进行查询的要求。 – denski

+0

此外,您可以添加任意列到交界处,如团队中的角色等。 – lumatijev

+0

很酷,这就是让示例在这里简单的意图。 – denski

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)

+0

很酷,谢谢,我不知道关联表,我需要看看这些。 – denski