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>