如果我有一个包含电子邮件和登录详细信息等的用户表,如果用户只属于一个团队,我可以创建一个名为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
我对此表示怀疑,但是我应该有一个特定的用户数据库,然后一旦用户登录,然后切换到团队数据库?
答案 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)