我正在尝试创建一个数据库架构,我可以在其中存储每个游戏都有团队统计信息的体育联盟的统计信息。
我有以下内容:
Home Team | Away Team | Venue | Home stat #1 | Away stat #1 | Home stat #2 | Away stat #2 | ... | Home stat #n | Away stat #n
有两个以上的统计数据。例如,一个统计可以是目标,一个可以是目标射门。主队和客队都有记录相同类别的统计数据,但他们没有相关性(例如,通过了解客队得分的数量,无法找到主队得分的目标数)。
存储此内容的最佳架构是什么?
此刻,我在想:
Teams(TeamID, TeamName)
Venues(VenueID, VenueName)
Games(GameID, HomeTeamID, AwayTeamID, VenueID)
Stats(GameID, TeamID, Stat#1, Stat#2, ... , Stat#n)
这样可以避免必须在不同的列中复制主队和客队的每个统计数据,如果我想在“游戏”中包含所有内容,我必须这样做。表。我不确定这个好的架构设计是否会受到任何反馈。
答案 0 :(得分:1)
为了真正回答你的问题,而不只是评论它,这里有一些额外的想法。
根据您的描述,这是您的表格外观:
就个人而言,我尝试尽可能多地使用自然键,但在这种情况下我可以看到Games
表最终会得到home_team_id
,away_team_id
的复合键,venue_id
和额外的game_date
,以确保游戏行是唯一的。
这会产生在Stats
表中需要傻数量外键的连锁效应;所以坚持使用代理钥匙。
使用代理game_id
表示可以创建重复的游戏,因此在home_team_id
,away_team_id
上添加唯一索引,{ {1}}& (附加字段)venue_id
。然后你有更简单的设计,但仍然可以防止重复。
正如我在评论中所说,如果您想要添加更多的统计数据,或者经常添加它们,最好将它们排成行以避免过于频繁地更新模型并且不得不重写查询。如果你遇到这种情况,请发布另一个问题:)