我的数据库关系表有什么根本错误吗?

时间:2016-05-03 17:31:48

标签: sql database

enter image description here

这是图表的正确布局吗?其中一些表共享相同的主键,但我不确定这是否是我应该列出的最佳实践/正确关系。

这是一个本地级别,玩家不会改变球队并假设球员位置是最终的。目的是收集统计数据,以便稍后进行分析。

2 个答案:

答案 0 :(得分:1)

Squad表应该是一个链接表,可以在PlayersTeam之间创建多对多关系。由于每个播放器/团队组合只能发生一次,因此Team_IDPlayer_ID列都应成为主键的一部分。

Squad应位于两个关系的n侧。它的名字可能应该是Membership

为什么需要单独的PlayerStatistics表?显然,它将与Squad相同的Player_ID / Team_ID组合的统计信息存储起来。该表的字段应该转到Squad表。

Positions是不是每个会员?每个成员一个职位,即一个职员在每个团队中有一个定义的职位,在这种情况下,Position_ID应该是Squad中的一列。

TeamMatchStatistics之间应该有两种关系。一个在Home_team_ID上,一个在Away_team_ID上。

enter image description here

或者,您可以将PlayerStatisticsPlayerMatch相关联,从而存储每个玩家在每个游戏中所做的事情。然后,您将通过适当的查询检索整体播放器统计信息或每个团队的玩家统计信息。

答案 1 :(得分:0)

除非你有一些奇怪的要求,否则我会介意。

通过这种设计,小队仅限于一名球员。

Team_ID与统计信息(非播放器)相关联。如果您想要一个与单个团队相关联的玩家,那么请在玩家中进行。然后你应该将统计数据与玩家合并。

两个表之间PK到PK的链接很少是正确的设计。

如果您希望玩家能够在多个团队中玩,那么拥有PlayerID,TeamID是统计数据中的复合键。

您需要披露正确审核的要求。小队显然搞砸了,但你没有说明小队的目的。