これをどのように構成するかを理解するのに苦労しています。これが私のアプリです:
それはゲームのウェブサイトです...ゲームは「単語検索」、「数独」、「クロスワードパズル」です。
各ゲームには多くのパズルがあります。つまり、100 ほどの単語検索、100 ほどの数独などがあります。
各ゲームには多くのモードもあります。したがって、各単語検索を実行する方法は 5 つほどあります (時間指定、時間指定なしなど)、数独を再生する 5 つの方法などがあります。
各ゲームモードとパズルの組み合わせには、多くのハイスコアがあります。したがって、ワードサーチ #3 のタイミングで再生すると、特定のハイスコア テーブルが表示されます。同じパズルを時間制限なしでプレイすると、別のハイスコア テーブルが表示され、#4 の時間を制限してプレイすると、3 つ目のハイスコア テーブルが表示されます。
最後に、各ハイスコアには 1 人のユーザーがいます。
私が最初に作った方法は、各ゲームには多くのパズルとモードがあり、各パズルには多くのハイスコアがあり、各ハイスコアには 1 人のユーザーがいるというものでした。お分かりのように、これはあまり意味がありません。ハイスコアがパズルに属しているのに、モードに属していないのはなぜでしょうか? ハイスコアを表示するときは、Game->Puzzle->Highscore を表示し、ハイスコアのモード=現在のモードという条件を追加します。関係が明確なので、条件が必要な理由はありません。
だからこれは私が持っていたものです:
Game->Puzzle->Highscore->User
->Mode
これを構造化するより良い方法は、パズルとモードとの HABTM 関係であることに気付きました。したがって、各ゲームには多くの mode_puzzle があり、各 mode_puzzle には 1 つのモード、1 つのパズル、および多くのハイスコアがあります。
したがって、次のように修正できます。
Game (has many)->ModePuzzle (has many)->HighScore (has one)->User
(has one) -> Mode
(has one) -> Puzzle
これに関する問題は、ゲームに新しいモードを追加したり、ゲームに新しいパズルを追加したりするときに、手動で作成する必要があるこの面倒な新しいテーブルに対処する必要があることです。新しいテーブル全体を作成することなく、この関係を保持します。各ゲームでは、どのモードでもどのパズルでもかまいませんが、なぜこのテーブルを手動で作成する必要があるのでしょうか?
人々はベイクを使用することを提案しましたが、私が見たところ、ベイクはモデルを自動生成しますが、テーブル自体を自動生成する必要があります。
解決策は結合などに関係していると感じていますが、MySQL結合やcakephpがそれらを処理する方法などについては経験がありません。また、各パズルには多くのモードがあり、各モードには多くのハイスコアがあると言われましたが、各パズルに多くのモードがあるか、各モードに多くのパズルがあるかに違いがないため、これを行いたくありません...そして私は構造全体なので、パズルごとにすべてのモードを繰り返す必要がある場合、またはその逆の場合、配列は巨大になります。誰でもこの問題の解決策を持っていますか?