Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thiết kế cơ sở dữ liệu cho trò chơi Multiplayer / Single Quiz

Trên thực tế, hệ thống của bạn có ba phần logic (mô-đun):

  • mô-đun người dùng chứa dữ liệu người dùng và triển khai xác thực cũng như ủy quyền các hành động của người dùng
  • mô-đun bảng câu hỏi bao gồm quản lý các câu hỏi và câu trả lời
  • mô-đun lịch sử bảng câu hỏi chứa lịch sử của từng người dùng

Thiết kế cơ sở dữ liệu của các mô-đun đó có thể trông như sau

MÔ ĐUN NGƯỜI DÙNG:

vai trò - chứa các vai trò của người dùng trong hệ thống

  • id - số nhận dạng duy nhất của vai trò
  • tên - tên vai trò, ví dụ:quản trị viên, nhân viên, v.v.

người dùng - chứa người dùng và thông tin về vai trò đã được chỉ định cho họ

  • id - số nhận dạng duy nhất của người dùng
  • tên người dùng
  • mật khẩu
  • role_id - số nhận dạng vai trò đã được chỉ định cho người dùng

MÔ ĐUN CÂU HỎI:

chủ đề - chứa các chủ đề câu hỏi

  • id - mã định danh duy nhất của chủ đề
  • tên - tên của chủ đề

câu hỏi - chứa các câu hỏi

  • id - số nhận dạng duy nhất của câu hỏi
  • topic_id - mã định danh chủ đề của câu hỏi
  • văn bản - nội dung của câu hỏi
  • is_exam_question - câu hỏi kiểm tra hay không
  • type - loại câu trả lời (boolean, hộp kiểm hoặc v.v.)
  • khó khăn

câu trả lời - chứa tất cả các câu trả lời của các câu hỏi

  • id - mã định danh duy nhất của câu trả lời
  • question_id - mã định danh của câu hỏi chứa câu trả lời
  • văn bản - nội dung của câu hỏi
  • is_correct - gắn cờ có nghĩa là câu trả lời là đúng hoặc sai

phòng - chứa thông tin về phòng

  • id - định danh duy nhất của rượu rum
  • tên - tên của rượu rum
  • công suất - số lượng công nhân tối đa có thể tham gia vào phòng
  • loại - loại phòng:nhóm, một mình hoặc v.v.
  • learing_type - loại phòng:kiểm tra, thực hành hoặc v.v.

user_in_room - chứa thông tin về những người dùng đã tham gia vào phòng

  • user_id - số nhận dạng của người dùng đã tham gia vào phòng
  • room_id - mã định danh của phòng
  • điểm - điểm hiện tại của người dùng trong phòng

MÔ ĐUN LỊCH SỬ:

user_question_history - chứa thông tin về các câu hỏi đã được người dùng trả lời

  • user_id - số nhận dạng của người dùng
  • room_id - mã định danh của phòng nơi người dùng đã trả lời câu hỏi
  • question_id - số nhận dạng của câu hỏi đã được người dùng trả lời
  • điểm - điểm của người dùng theo câu hỏi

user_answer_history - chứa thông tin về các câu trả lời do người dùng chọn

  • user_id - mã định danh của người dùng
  • room_id - mã định danh của phòng nơi người dùng đã trả lời câu hỏi
  • question_id - số nhận dạng của câu hỏi đã được người dùng trả lời
  • answer_id - số nhận dạng của câu trả lời đã được người dùng chọn

Việc sử dụng lược đồ này mang lại khả năng tạo các báo cáo khác nhau. Ví dụ:bạn có thể hiển thị kết quả của tất cả người dùng theo phòng

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>

Hoặc bạn có thể xem thông tin chi tiết về câu trả lời của người dùng

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để ngăn chặn đầu ra và kiểm tra xem một lệnh có thành công hay không?

  2. Mối quan hệ nhiều-nhiều trong MySQL

  3. groupby và count hoạt động như thế nào trong sql

  4. Sử dụng phương pháp trình tạo truy vấn Laravel whereIn () với truy vấn phụ

  5. cột json so với nhiều cột