Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Panduan Merancang Database Untuk Kuis Di MySQL

Tutorial ini memberikan langkah-langkah lengkap untuk merancang skema database tes online dan sistem kuis untuk mengelola pengguna, kuis, pertanyaan, jawaban, dan pengambilan. Ini dapat digunakan lebih lanjut untuk mengembangkan situs web atau aplikasi berbasis pengujian atau kuis.

Diagram Hubungan Entitas atau desain basis data visual ditunjukkan di bawah ini.

Gambar 1

Catatan :Ini membatasi hanya pengguna yang masuk untuk mengikuti kuis untuk menghindari spam. Kuis dianggap sesingkat dibandingkan dengan tes.

Anda juga dapat mengunjungi tutorial populer termasuk Cara Menginstal MySQL 8 di Ubuntu, Cara Menginstal MySQL 8 di Windows, Database RBAC di MySql, Database Blog di MySql, Mempelajari Kueri SQL Dasar Di MySQL.

Basis Data Kuis

Langkah pertama adalah membuat Database Kuis. Itu dapat dibuat menggunakan kueri seperti yang ditunjukkan di bawah ini.

CREATE SCHEMA `quiz` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Saya telah menggunakan set karakter utf8mb4 untuk mendukung berbagai karakter.

Tabel Pengguna

Di bagian ini, kita akan mendesain Tabel Pengguna untuk menyimpan informasi pengguna. Tabel yang sama dapat digunakan untuk menghubungkan host kuis sehingga pengguna dapat mengelola kuis mereka sendiri dan melacak pengambilannya. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pengguna.

Id Id unik untuk mengidentifikasi pengguna.
Nama Depan Nama depan pengguna.
Nama Tengah Nama tengah pengguna.
Nama Belakang Nama belakang pengguna.
Seluler Nomor ponsel pengguna. Ini dapat digunakan untuk tujuan login dan registrasi.
Email Email pengguna. Ini dapat digunakan untuk tujuan login dan registrasi.
Hash Kata Sandi Hash kata sandi yang dihasilkan oleh algoritme yang sesuai. Kita harus menghindari penyimpanan sandi biasa.
Tuan Rumah Bendera untuk mengidentifikasi apakah pengguna dapat menyelenggarakan kuis.
Terdaftar Di Kolom ini dapat digunakan untuk menghitung umur pengguna dengan aplikasi tersebut.
Login Terakhir Ini dapat digunakan untuk mengidentifikasi login terakhir pengguna.
Pengantar Pengenalan singkat tentang Pengguna Host yang akan ditampilkan di Halaman Tes atau Kuis.
Profil Detail pemilik yang akan ditampilkan di Halaman Tes atau Kuis.

Tabel Pengguna dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `quiz`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`host` TINYINT(1) NOT NULL DEFAULT 0,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );

Tabel Kuis

Di bagian ini, kita akan mendesain Tabel Kuis untuk menyimpan data kuis. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Kuis.

Id Id unik untuk mengidentifikasi kuis.
Id Host ID host untuk mengidentifikasi host kuis.
Judul Judul kuis yang akan ditampilkan di Halaman Kuis dan daftarnya.
Judul Meta Judul meta yang akan digunakan untuk judul browser dan SEO.
Siput Siput untuk membentuk URL.
Ringkasan Ringkasan untuk menyebutkan sorotan utama.
Ketik Jenis yang membedakan antara tes dan kuis.
Skor Total skor kuis.
Diterbitkan Ini dapat digunakan untuk mengidentifikasi apakah tes/kuis tersedia untuk umum.
Dibuat Pada Ini menyimpan tanggal dan waktu saat tes/kuis dibuat.
Diperbarui Pada Ini menyimpan tanggal dan waktu saat tes/kuis diperbarui.
Diterbitkan Pada Ini menyimpan tanggal dan waktu saat tes/kuis diterbitkan.
Mulai Dari Ini menyimpan tanggal dan waktu saat tes/kuis dimulai dan dibuka untuk diambil.
Berakhir Pada Ini menyimpan tanggal dan waktu di mana tes/kuis ditutup untuk pengambilan.
Konten Kolom yang digunakan untuk menyimpan data tes/kuis.

Tabel Kuis dengan batasan yang sesuai adalah seperti di bawah ini.

CREATE TABLE `quiz`.`quiz` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`hostId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`startsAt` DATETIME NULL DEFAULT NULL,
`endsAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_quiz_host` (`hostId` ASC),
CONSTRAINT `fk_quiz_host`
FOREIGN KEY (`hostId`)
REFERENCES `quiz`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Meta Kuis

Tabel Meta Kuis dapat digunakan untuk menyimpan informasi tambahan tentang tes atau kuis termasuk URL spanduk kuis dll. Di bawah ini adalah deskripsi dari semua kolom Tabel Meta Kuis.

Id Id unik untuk mengidentifikasi meta kuis.
Id Kuis Id kuis untuk mengidentifikasi tes/kuis induk.
Kunci Kunci yang mengidentifikasi meta.
Konten Kolom yang digunakan untuk menyimpan metadata kuis.

Tabel Meta Kuis dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `quiz`.`quiz_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_quiz` (`quizId` ASC),
UNIQUE INDEX `uq_quiz_meta` (`quizId` ASC, `key` ASC),
CONSTRAINT `fk_meta_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Tabel Pertanyaan Kuis

Tabel Pertanyaan Kuis dapat digunakan untuk menyimpan soal-soal yang berkaitan dengan tes dan kuis. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pertanyaan Kuis.

Id Id unik untuk mengidentifikasi pertanyaan kuis.
Id Kuis Id kuis untuk mengidentifikasi tes/kuis induk.
Ketik Jenis pertanyaan. Jenisnya bisa berupa pilihan tunggal (Ya/Tidak), pilihan ganda atau pilih. Kami juga dapat memiliki tipe sebagai input dan textarea jika hasil kuis memerlukan pemeriksaan manual.
Aktif Tandai untuk mengidentifikasi apakah pertanyaannya aktif. Kuis dapat memiliki beberapa pertanyaan, tetapi hanya pertanyaan selektif yang tetap aktif dalam satu waktu.
Level Tingkat pertanyaan untuk mengidentifikasi apakah itu mudah, sedang, atau sulit.
Skor Skor pertanyaan individu. Kami harus memastikan bahwa hanya pertanyaan selektif yang aktif pada satu waktu dan skor total pertanyaan aktif sama dengan skor kuis sebelum memublikasikan kuis.
Dibuat Pada Ini menyimpan tanggal dan waktu saat pertanyaan dibuat.
Diperbarui Pada Menyimpan tanggal dan waktu pembaruan pertanyaan.
Konten Kolom yang digunakan untuk menyimpan pertanyaan.

Tabel Pertanyaan Kuis dengan batasan yang sesuai adalah seperti di bawah ini.

CREATE TABLE `quiz`.`quiz_question` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`type` VARCHAR(50) NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`level` SMALLINT(6) NOT NULL DEFAULT 0,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_question_quiz` (`quizId` ASC),
CONSTRAINT `fk_question_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Tabel Jawaban Kuis

Tabel Jawaban Kuis dapat digunakan untuk menyimpan jawaban dari pertanyaan pilihan tunggal, pilihan ganda dan pilihan jenis. Untuk pertanyaan pilihan tunggal, jawabannya bisa Ya dan Tidak. Di bawah ini adalah deskripsi dari semua kolom dari Tabel Jawaban Kuis.

Id Id unik untuk mengidentifikasi jawaban kuis.
Id Kuis Id kuis untuk mengidentifikasi tes/kuis induk.
Id Pertanyaan Id pertanyaan untuk mengidentifikasi pertanyaan induk.
Aktif Tandai untuk mengidentifikasi apakah jawaban aktif.
Benar Tandai untuk mengidentifikasi apakah jawabannya benar.
Dibuat Pada Ini menyimpan tanggal dan waktu saat jawaban dibuat.
Diperbarui Pada Ini menyimpan tanggal dan waktu saat jawaban diperbarui.
Konten Kolom yang digunakan untuk menyimpan jawaban.

Tabel Jawaban Kuis dengan batasan yang sesuai adalah seperti di bawah ini.

CREATE TABLE `quiz`.`quiz_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`quizId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`correct` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_answer_quiz` (`quizId` ASC),
CONSTRAINT `fk_answer_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `quiz`.`quiz_answer`
ADD INDEX `idx_answer_question` (`questionId` ASC);
ALTER TABLE `quiz`.`quiz_answer`
ADD CONSTRAINT `fk_answer_question`
FOREIGN KEY (`questionId`)
REFERENCES `quiz`.`quiz_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Ambil Meja

Di bagian ini, kita akan mendesain Ambil Tabel untuk melacak pendaftaran dan waktu upaya pengguna untuk kuis. Disebutkan di bawah ini adalah deskripsi dari semua kolom Take Table.

Id Id unik untuk mengidentifikasi pengambilan.
Id Pengguna ID pengguna untuk mengidentifikasi peserta kuis.
Id Kuis Id kuis untuk mengidentifikasi kuis.
Status Status pengambilan. Itu bisa didaftarkan, dimulai, dijeda, selesai, dideklarasikan.
Skor Total skor yang diperoleh pengguna.
Dibuat Pada Ini menyimpan tanggal dan waktu saat pengambilan dibuat.
Diperbarui Pada Ini menyimpan tanggal dan waktu saat pengambilan diperbarui.
Dimulai Pada Ini menyimpan tanggal dan waktu pengambilan dimulai.
Selesai Pada Ini menyimpan tanggal dan waktu saat pengambilan selesai.
Konten Kolom yang digunakan untuk menyimpan komentar take.

Tabel Take dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `quiz`.`take` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`quizId` BIGINT NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`startedAt` DATETIME NULL DEFAULT NULL,
`finishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_take_user` (`userId` ASC),
CONSTRAINT `fk_take_user`
FOREIGN KEY (`userId`)
REFERENCES `quiz`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `quiz`.`take`
ADD INDEX `idx_take_quiz` (`quizId` ASC);
ALTER TABLE `quiz`.`take`
ADD CONSTRAINT `fk_take_quiz`
FOREIGN KEY (`quizId`)
REFERENCES `quiz`.`quiz` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Ambil Tabel Jawaban

Tabel Ambil Jawaban dapat digunakan untuk menyimpan jawaban yang dipilih oleh pengguna saat mengikuti kuis. Dalam kasus pertanyaan pilihan ganda, bisa ada beberapa jawaban. Disebutkan di bawah ini adalah deskripsi dari semua kolom dari Tabel Take Answer.

Id Id unik untuk mengidentifikasi jawaban yang diambil.
Ambil ID Id pengambilan untuk mengidentifikasi percobaan kuis.
Id Jawaban Id jawaban untuk mengidentifikasi jawaban kuis.
Aktif Tandai untuk mengidentifikasi apakah jawaban aktif.
Dibuat Pada Ini menyimpan tanggal dan waktu saat jawaban dibuat.
Diperbarui Pada Ini menyimpan tanggal dan waktu saat jawaban diperbarui.
Konten Kolom yang digunakan untuk menyimpan jawaban jika ada pertanyaan tipe input atau textarea.

Tabel Take Answer dengan batasan yang sesuai adalah seperti di bawah ini.

CREATE TABLE `quiz`.`take_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`takeId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`answerId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_answer_take` (`takeId` ASC),
CONSTRAINT `fk_answer_take`
FOREIGN KEY (`takeId`)
REFERENCES `quiz`.`take` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `quiz`.`take_answer`
ADD INDEX `idx_tanswer_question` (`questionId` ASC);
ALTER TABLE `quiz`.`take_answer`
ADD CONSTRAINT `fk_tanswer_question`
FOREIGN KEY (`questionId`)
REFERENCES `quiz`.`quiz_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `quiz`.`take_answer`
ADD INDEX `idx_tanswer_answer` (`answerId` ASC);
ALTER TABLE `quiz`.`take_answer`
ADD CONSTRAINT `fk_tanswer_answer`
FOREIGN KEY (`answerId`)
REFERENCES `quiz`.`quiz_answer` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Ringkasan

Dalam tutorial ini, kita telah membahas desain database sistem Kuis untuk menyimpan pengguna, kuis, pertanyaan, jawaban, dan percobaan kuis dalam bentuk pengambilan.

Anda dapat mengirimkan komentar Anda untuk bergabung dalam diskusi. Anda mungkin juga tertarik untuk mendesain database aplikasi Blog dan Poll &Survey.

Skema database lengkap juga tersedia di GitHub.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TO_SECONDS() Contoh – MySQL

  2. Hasil MySQL sebagai daftar yang dipisahkan koma

  3. Aktivitas MySQL yang berlebihan

  4. Cara Memuat Konfigurasi JDBC Dari Contoh File Properties

  5. WEEK() Contoh – MySQL