SQL 多对多设计

SQL many-to-many design

好的,所以我可能会因为懒惰而不是自己研究这个而被屠杀 - 但我无法理解它并且它让我的大脑受伤。我相信对于你们中的一些人来说,这是一个非常基本的问题。

我有一个 Excel table 有足球(足球)球员和他们的属性...

Player Table

还有一个是六人制足球队,六名球员,六名球员。

Teams Table

我希望能够 link 这两个 table 以便我可以根据球员属性汇总球队属性,然后 运行 查询球员的素质球队(即传球最好的球队、最具侵略性的球队等)。

在 Excel 中,我只是从球员 table 到球队 table 进行 vlookup,然后将球员属性的各种组合相加。

然而在SQL中它看起来很复杂——即每支球队有很多球员,任何一名球员都可以在多支球队中,任何一名球员都可以担任多个不同的位置。球员所处的位置会影响其对球队属性的贡献权重(即后卫对球队创造力的贡献小于攻击型中场,而对球队抢断能力的贡献大于前锋)。我想我需要一个中间连接 table 或多个?或者也许它毕竟很简单?

有人有什么建议吗?

谢谢你

如果我收到你的问题,答案如下。您将有一个 table 用于玩家(PlayerID、PlayerName、PlayerAtribbute1,...),一个 table 用于团队(TeamId、TeamName、HomeTown,...)和一个中间 table 用于连接两者(PlayerId,TeamId,Position,...)。最后一个中间体table用于SQL和数据库设计,表示多对多关系。

如果你采用这种方法,你还应该在 Players table 中索引 PlayerId,在 Teams table 中索引 TeamID,并在中间 [=PlayerId, TeamID) 上有一个复合索引 table 你应该是金色的。

在我看来,拼图中缺失的部分是连接中的复合索引 table(由 S Karras 提供)。我现在可以把它向前推进,看看它是如何进展的。