PostgreSQL表,适用于拥有独特玩家组合的团队



在PostgreSQL中,我构建了以下表:

  • player,其中每个玩家都有一个唯一的数字p_id
  • 使用t_id作为主键的表team
  • player_team记录了哪些球员属于哪些球队

player_team的样本如下所示。001队有3名队员(200300400(,002队有2名队员(200888(,003队有3人(999666333(。

player_team
t_id | p_id | 
------+------+    
001 | 200  | 
001 | 300  | 
001 | 400  | 
002 | 200  | 
002 | 888  | 
003 | 999  | 
003 | 666  | 
003 | 333  | 

在我的情况下,会有大量的球员,他们可以组建任意数量的球队。唯一的限制是每个成员组合只能出现一次。因此,由(200, 300, 400)组成的团队将始终具有001的t_id。这是必需的,这样我就可以跟踪同一组成员在一段时间内的表现,以及某些成员相互交互的频率。

如何在SQL中实现此约束?我收到的数据将是表格,其中每一行都是一名球员,列team name表示他们在一起比赛时属于哪支球队。我不能简单地使用team name,因为同一组玩家每次玩游戏都可以自由选择不同的名字。

我对这种语言比较陌生,所以任何指导都很感激。

这对于注释来说太长了。以下是一些备选方案。

首先,您可以按原样对数据使用触发器。只要检查一下,当新球员加入球队时,组合就不存在了。当然,这可能相当具有挑战性。如果每个插入的行都检查了触发器,那么由一名球员组成的球队可能会阻止该球员成为任何其他球队的第一名球员。哎哟

第二种方法是在teams表中存储每支球队的球员列表。这可以使用player_team上的触发器进行更新。这个列表可以有一个唯一的约束。然而,这具有相同的";哎哟";作为第一种解决方案。

第三种方法是省去player_team表,只将团队成员作为数组存储在teams中。这种方法的优点是所有玩家都可以一次性添加。这样,就不必担心关闭或延迟约束检查。

当然,第三种方法并没有给您带来索引的好处。但是,您可以将列表存储为允许索引的jsonb列。

最新更新