2 人のプレーヤー (またはチーム) がプレーするゲームを考えてみましょう。結果は両方のプレーヤーのスコアで表されます (例: サッカー)。そのようなゲームの結果をリレーショナル データベースに保存する慣用的な方法はありますか?
私は考えられる 2 つのスキーマを思いつきましたが、いずれも十分に普遍的ではないようです。
1. 1試合につき1列
games
列を持つテーブルがありgame_id, winner, loser, winner_points, loser_points
、各ゲームはテーブルの 1 つの行に格納されます。
- この表現は、すべてのゲームを反復する必要がある場合に最適です。
- プレーヤーの統計を計算するのは難しい (例: プレーヤーの平均ポイント数を計算する)
2. 1 ゲームにつき 2 列
列を持つgames
テーブルがありますgame_id, player, opponent, player_points, opponent_points
。各ゲームはテーブルの 2 つの行に格納され、同じgame_id
.
- すべてのゲームを反復することは簡単ではありませんが、それでも簡単です
- プレーヤーの平均ポイントの計算は簡単です
SELECT AVG(player_points) FROM games WHERE player = some_player
- 残念ながら、テーブル内のデータは冗長になりました