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 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.