プレーヤーの進行状況を MySQL データベースに保存するオンライン ゲームを開発しており、パフォーマンスを最適化しようとしています。このデータは、特定の進捗実績に対応する ID の形式になります。これらの「成果」は、NPC との会話、クエストの開始、クエストの完了などで構成されるため、ID は特定の順序でデータベースに追加されません。私は現在、これらのシナリオのうち、実績データを保存する方法を決定するのに苦労しています:
1)「プレーヤー」テーブルのコンマ区切りのテキスト フィールド (32,2,53,1,3,5 など) として。実績がトリガーされるたびに、対応する ID がテキスト フィールドの末尾に追加されます。PHP 側は、strpos を使用してチェックを実行します。
2) Player_Progress テーブル内にレコードとして保存されます。これは、プレーヤーごとに膨大な数 (~100) のレコードを潜在的に意味する可能性があり、これがパフォーマンスにどのように影響するかはわかりません.
区切られたフィールドが嫌われていることは理解していますが、データが数回しかチェックされておらず、追加されている (削除されていない) だけであるため、この状況で正規化が少し過剰になるのではないかと考えていました。