sql >> データベース >  >> RDS >> Mysql

マルチプレイヤー/シングルクイズゲームのデータベース設計

    実際、システムには3つの論理部分(モジュール)があります。

    • ユーザーデータを含み、ユーザーアクションの認証と承認を実装するusersモジュール
    • 質問と回答の管理を含むアンケートモジュール
    • 各ユーザーの履歴を含むアンケート履歴モジュール

    これらのモジュールのデータベース設計は次のようになります

    ユーザーモジュール:

    役割 -システム内のユーザーロールが含まれています

    • id-役割の一意の識別子
    • name-ロール名(admin、workerなど)

    ユーザー -ユーザーと、ユーザーに割り当てられた役割に関する情報が含まれています

    • id-ユーザーの一意の識別子
    • ユーザー名
    • パスワード
    • role_id-ロールがユーザーに割り当てられた識別子

    アンケートモジュール:

    トピック -質問のテーマが含まれています

    • id-テーマの一意の識別子
    • name-テーマの名前

    質問 -質問が含まれています

    • id-質問の一意の識別子
    • topic_id-質問のトピック識別子
    • テキスト-質問の内容
    • is_exam_question-試験問題かどうか
    • タイプ-回答のタイプ(ブール値、チェックボックスなど)
    • 難しさ

    回答 -質問のすべての回答が含まれています

    • id-回答の一意の識別子
    • question_id-回答を含む質問の識別子
    • テキスト-質問の内容
    • is_correct-答えが真または偽であることを意味するフラグ

    部屋 -部屋に関する情報が含まれています

    • id-ラム酒の一意の識別子
    • 名前-ラム酒の名前
    • 収容人数-部屋に参加できる労働者の最大数
    • タイプ-部屋のタイプ:グループ、ソロなど
    • learing_type-部屋のタイプ:試験、練習など

    user_in_room -ルームに参加したユーザーに関する情報が含まれています

    • user_id-ルームに参加したユーザーの識別子
    • room_id-部屋の識別子
    • スコア-部屋にいるユーザーの現在のスコア

    履歴モジュール:

    user_question_history -ユーザーが回答した質問に関する情報が含まれています

    • user_id-ユーザーの識別子
    • room_id-ユーザーが質問に回答した部屋の識別子
    • question_id-ユーザーが回答した質問の識別子
    • スコア-質問によるユーザースコア

    user_answer_history -ユーザーが選択した回答に関する情報が含まれています

    • user_id-ユーザーの識別子
    • room_id-ユーザーが質問に回答した部屋の識別子
    • question_id-ユーザーが回答した質問の識別子
    • answer_id-ユーザーが選択した回答の識別子

    このスキーマを使用すると、さまざまなレポートを作成できます。たとえば、すべてのユーザーの結果を部屋ごとに表示できます

    SELECT r.id,
        r.name,
        u.username,
        ur.score
    FROM room as r
    LEFT JOIN user_in_room as ur ON ur.room_id = r.id
    LEFT JOIN user as u ON u.id = ur.user_id
    WHERE r.id = <id>
    

    または、ユーザーの回答に関する詳細情報を確認できます

    SELECT 
        q.text,
        a.text
    FROM user_in_room as ur ON ur.room_id = r.id
    LEFT JOIN user_question_history as uqh ON ugh.user_id = ur.user_id AND ugh.root_id = ur.room_id
    LEFT JOIN question as q ON q.id = ugh.question_id
    LEFT JOIN user_answer_history as uah ON uah.user_id = ugh.user_id AND uah.room_id = ugh.room_id AND uah.question_id = ugh.question_id
    LEFT JOIN answer as a ON a.id = uah.answer_id
    WHERE ur.room_id = <id> AND ur.user_id = <id>
    


    1. メソッドIlluminate\Support \ Collection::saveはLaravelに存在しません

    2. VB.NETを使用して、datagridviewからデータベーステーブルに複数のレコードを挿入します

    3. Mysql-Mysql2 ::Error:文字列値が正しくありません:

    4. CAST演算子を使用してVARCHAR列をFLOATとしてソートすることは、MySQLでは機能しません