模式规范化::团队约束的复合游戏时间表

时间:2011-05-20 12:56:57

标签: schema constraints normalization

与问题的原始通用版本相关:http://stackoverflow.com/questions/6068635/database-design-normalization-in-2-participant-event-join-table-or-2-column

正如您在上面的主题中所看到的,游戏(事件)被定义为在给定日期彼此相互比赛的2个团队(参与者)(没有一个团队在一天内互相玩耍多次)。

在我们的案例中,我们决定使用带有gameID PK的单个复合计划表,为团队提供2列(称为team1& team2)以及游戏日期,时间和范围。位置列。此外,由于两个团队+日期必须是唯一的,因此我们在这些组合字段中定义唯一键。另外,我们有一个teamID表,其中teamID PK与日程表列team1& team2来自FK。

这个模型适用于我们,但我没有在上面的帖子中发布的是预定游戏和结果之间的关系,以及处理每个团队的预定游戏的“版本”(即任何笔记team1或team2想要包括,比如说,“这是一场针对非分区对手的混战,不会计入联赛积分榜”。

我们目前的表格模型是:
团队>复合计划>结果>统计数据(得分和辩护表)
团队>玩家
团队>团队日程* *黑客处理票据问题并允许TBD / TBA游戏,其中对手,日期和/或位置可能在提交时间表时不知道。

我不禁想到我们可以整合这个模型。例如,是否真的需要单独的结果表?复合计划难道不能同时计划和游戏结果吗?这是连接表可以发挥作用的地方。

Join table实际上是一个gameID生成器,包括:
gameID(PK)
gameDate
gameTime
位置

然后修订的综合计划/结果将是:
id(PK)
teamID(FK到球队表)
gameID(FK加入表)
gameType(混战,锦标赛,季后赛)
得分(即进球数)
处罚
powerplays
结果(胜负平局)
笔记(团队的游戏版本)

思想赞赏,一直在努力深入探讨核心问题(因此上面的原始问题)

1 个答案:

答案 0 :(得分:1)

我认为没有任何理由为计划和结果设置单独的表格。但是,我会将“gameType”移动到Games表中,否则您将两次存储相同的值。我还考虑将teamID添加到Games表中。这将有两个目的:它将允许您轻松区分主队和客队,并且它将使编写一个查询,使同一行中的两个团队的数据显着更容易。

Games
   gameID       (PK)
   gameDate
   gameTime
   homeTeamID
   awayTeamID
   location
   gameType     (scrimmage, tournament, playoff)

Sides
   id           (PK)
   TeamID       (FK to teams table)
   gameID       (FK to games table)
   score
   penalties
   powerplays
   notes

如图所示,我也会忽略“结果”字段。这可以从“得分”栏中有效地得出。