Faktanya, sistem Anda memiliki tiga bagian logis (modul):
- modul pengguna yang berisi data pengguna dan mengimplementasikan otentikasi dan otorisasi tindakan pengguna
- modul kuesioner yang mencakup pengelolaan soal dan jawaban
- modul histori kuesioner yang berisi histori oleh setiap pengguna
Desain database dari modul-modul tersebut dapat terlihat sebagai berikut
MODUL PENGGUNA:
peran - berisi peran pengguna dalam sistem
- id - pengenal unik peran
- nama - nama peran, misalnya admin, pekerja, dll.
pengguna - berisi pengguna dan informasi tentang peran yang diberikan kepada mereka
- id - pengenal unik pengguna
- nama pengguna
- sandi
- role_id - pengenal peran yang diberikan kepada pengguna
MODUL KUESIONER:
topik - berisi tema pertanyaan
- id - pengenal unik tema
- nama - nama tema
pertanyaan - berisi pertanyaan
- id - pengenal unik pertanyaan
- topic_id - pengenal topik pertanyaan
- teks - isi pertanyaan
- is_exam_question - pertanyaan ujian atau bukan
- jenis - jenis jawaban (boolean, kotak centang, dll.)
- kesulitan
jawaban - berisi semua jawaban pertanyaan
- id - pengenal unik jawaban
- question_id - pengenal pertanyaan yang berisi jawaban
- teks - isi pertanyaan
- is_correct - tandai yang artinya jawaban benar atau salah
kamar - berisi informasi tentang kamar
- id - pengenal unik rum
- nama - nama rum
- kapasitas - jumlah maksimum pekerja yang dapat bergabung ke ruangan
- tipe - tipe kamar:grup, solo, dll.
- learing_type - tipe kamar:ujian, latihan, dll.
ruang_pengguna - berisi informasi tentang pengguna yang bergabung ke ruangan
- user_id - pengenal pengguna yang bergabung ke ruang
- room_id - pengenal ruangan
- skor - skor saat ini dari pengguna di ruangan
MODUL SEJARAH:
user_question_history - berisi informasi tentang pertanyaan yang dijawab oleh pengguna
- user_id - pengenal pengguna
- room_id - pengenal ruangan tempat pengguna menjawab pertanyaan
- question_id - pengenal pertanyaan yang dijawab oleh pengguna
- skor - skor pengguna berdasarkan pertanyaan
riwayat_jawaban_pengguna - berisi informasi tentang jawaban yang dipilih oleh pengguna
- user_id - pengenal pengguna
- room_id - pengenal ruangan tempat pengguna menjawab pertanyaan
- question_id - pengenal pertanyaan yang dijawab oleh pengguna
- answer_id - pengenal jawaban yang dipilih pengguna
Penggunaan skema ini memberikan kemampuan untuk membuat laporan yang berbeda. Misalnya, Anda dapat menampilkan hasil semua pengguna berdasarkan ruangan
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>
Atau Anda dapat melihat informasi detail tentang jawaban pengguna
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>