chatGPTでテーブル設計を試みる。
ちょっと意地悪な質問をしてみます。
回答としては十分。
しかし、質問した時点で想定した A vs B の対戦記録と B vs A の対戦記録を別のものとして記録できてしまう構造になっています。
UNIQUE(ユニーク)属性では重複する記録を制限します。(A,B)の組と(B,A)の組み合わせは別なので記録できます。
player1とplayer2を複合キーとした回答を期待していましたが、複合キーを用いずにmatch_idを主キーとしています。
また、対戦結果は文字列で記入を想定していましたが、player1_win, player2_win, draw の3パターンのenum(列挙型)のフィールドを提案してきました。
他にも、A vs Aで自分と自分が対戦しない様に制約を追加してきました。
対戦済みの組み合わせの再戦結果が記録できない様に、対戦したplayerのidが小さい方をplayer1_idとする制約を提案してきました。
この様にenum型のフィールドの代わりに対戦結果のパターンを match_resultsテーブルに書いておいて外部参照する提案をしてきました。
result_nameにも丁寧にUNIQUE属性が設定してあります。
最後にmatch_resultsテーブルにINSERT INTOコマンドで対戦結果のパターンを3レコード追加しています。
こうしておくことで対戦結果のパターンに不戦勝や棄権などが増えてもテーブルを再設計せずにmatch_resultsテーブルにレコードを追加するだけで対応できるようになります。
chatGPT4が提案してきたゲームの対戦結果を記録するテーブルを作成するcreate table コマンドをmysqlでそのまま実行してphpMyAdminのデザイナ画面で表示すると以下の様になります。
matchesテーブルはmatch_idが主キーです。player1_idとplayer2_idに鍵アイコンが付いているのはUNIQUE属性を設定したことにより別のキーがテーブルに設定されていることを示しています。
match_resultsのresult_nameの鍵アイコンも同様にUNIQUE設定によるものです。