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 - 残念ながら、テーブル内のデータは冗長になりました