让我们有一场由两名球员(或球队)进行的比赛,结果由两名球员的得分表示(例如足球)。是否有一种惯用的方式将此类游戏的结果存储在关系数据库中?
我想出了两种可能的模式,但似乎都不够通用。
1. 每场一排
games
将有一个带有列的表格,game_id, winner, loser, winner_points, loser_points
每个游戏将存储在表格的一行中。
- 当需要遍历所有游戏时,这种表示非常有用。
- 计算球员的统计数据很困难(例如计算球员的平均得分)
2. 每场比赛两排
会有一个games
带有列的表game_id, player, opponent, player_points, opponent_points
。每个游戏将存储在表的两行中,并且它们将具有相同的game_id
.
- 遍历所有游戏并非易事,但仍然很容易
- 计算球员的平均分很简单
SELECT AVG(player_points) FROM games WHERE player = some_player
- 不幸的是,表中的数据现在是多余的