実際、システムには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>