Dieses Lernprogramm enthält vollständige Schritte zum Entwerfen eines Datenbankschemas von Online-Tests und Quizsystemen zum Verwalten der Benutzer, Quizfragen, Fragen, Antworten und Takes. Es kann weiter verwendet werden, um Online-Tests oder Quiz-basierte Websites oder Anwendungen zu entwickeln.
Das Entity-Relationship-Diagramm oder visuelle Datenbankdesign ist unten dargestellt.
Abb. 1
Notizen :Es beschränkt sich darauf, dass nur angemeldete Benutzer am Quiz teilnehmen, um Spam zu vermeiden. Die Quizze gelten im Vergleich zu Tests als kurz.
Sie können auch die beliebten Tutorials besuchen, darunter How To Install MySQL 8 on Ubuntu, How To Install MySQL 8 on Windows, RBAC Database in MySql, Blog Database in MySql, Learn Basic SQL Queries In MySQL.
Quizdatenbank
Der allererste Schritt besteht darin, die Quiz-Datenbank zu erstellen. Es kann mit der unten gezeigten Abfrage erstellt werden.
CREATE SCHEMA `quiz` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ich habe den Zeichensatz utf8mb4 verwendet um eine Vielzahl von Zeichen zu unterstützen.
Benutzertabelle
In diesem Abschnitt entwerfen wir die Benutzertabelle Benutzerinformationen zu speichern. Dieselbe Tabelle kann verwendet werden, um die Quiz-Hosts zu verknüpfen, sodass die Benutzer ihre eigenen Quiz verwalten und die Takes verfolgen können. Nachfolgend finden Sie die Beschreibung aller Spalten der Benutzertabelle.
ID | Die eindeutige ID zur Identifizierung des Benutzers. |
Vorname | Der Vorname des Benutzers. |
Zweiter Vorname | Der zweite Vorname des Benutzers. |
Nachname | Der Nachname des Benutzers. |
Mobil | Die Mobiltelefonnummer des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden. |
Die E-Mail des Benutzers. Es kann für Anmelde- und Registrierungszwecke verwendet werden. | |
Passwort-Hash | Der vom entsprechenden Algorithmus generierte Passwort-Hash. Wir müssen vermeiden, einfache Passwörter zu speichern. |
Host | Das Flag, um anzugeben, ob der Benutzer ein Quiz hosten kann. |
Registriert unter | Diese Spalte kann verwendet werden, um die Lebensdauer des Benutzers mit der Anwendung zu berechnen. |
Letzte Anmeldung | Es kann verwendet werden, um die letzte Anmeldung des Benutzers zu identifizieren. |
Einführung | Die kurze Vorstellung des Gastgeberbenutzers, die auf der Test- oder Quizseite angezeigt wird. |
Profil | Die Eigentümerdetails, die auf der Test- oder Quizseite angezeigt werden sollen. |
Die Benutzertabelle mit den entsprechenden Einschränkungen sieht unten aus.
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) );
Quiztabelle
In diesem Abschnitt entwerfen wir die Quiztabelle um die Quizdaten zu speichern. Nachfolgend finden Sie die Beschreibung aller Spalten der Quiztabelle.
ID | Die eindeutige ID zur Identifizierung des Quiz. |
Host-ID | Die Host-ID zur Identifizierung des Quiz-Hosts. |
Titel | Der Quiztitel, der auf der Quizseite und den Listen angezeigt werden soll. |
Metatitel | Der Metatitel, der für Browsertitel und SEO verwendet werden soll. |
Schnecke | Der Slug zur Bildung der URL. |
Zusammenfassung | Die Zusammenfassung, um die wichtigsten Highlights zu erwähnen. |
Typ | Der Typ zur Unterscheidung zwischen Test und Quiz. |
Ergebnis | Die Gesamtpunktzahl des Quiz. |
Veröffentlicht | Es kann verwendet werden, um festzustellen, ob der Test/das Quiz öffentlich verfügbar ist. |
Erstellt am | Datum und Uhrzeit der Erstellung des Tests/Quiz werden gespeichert. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung des Tests/Quiz werden gespeichert. |
Veröffentlicht unter | Datum und Uhrzeit der Veröffentlichung des Tests/Quiz werden gespeichert. |
Beginnt bei | Es speichert das Datum und die Uhrzeit, zu denen der Test/das Quiz beginnt, und öffnet sich für Aufgaben. |
Endet bei | Es speichert das Datum und die Uhrzeit, zu denen der Test/das Quiz für die Teilnahme endet. |
Inhalt | Die Spalte zum Speichern der Test-/Quizdaten. |
Die Quiz-Tabelle mit den entsprechenden Einschränkungen sieht unten aus.
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);
Quiz-Meta
Die Quiz-Metatabelle kann verwendet werden, um zusätzliche Informationen zu Tests oder Quiz zu speichern, einschließlich der Quiz-Banner-URL usw. Nachfolgend finden Sie die Beschreibung aller Spalten der Quiz-Metatabelle.
ID | Die eindeutige ID zur Identifizierung des Quiz-Metas. |
Quiz-ID | Die Quiz-ID zur Identifizierung des übergeordneten Tests/Quiz. |
Schlüssel | Der Schlüssel, der das Meta identifiziert. |
Inhalt | Die Spalte zum Speichern der Quiz-Metadaten. |
Die Quiz-Meta-Tabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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;
Tabelle mit Quizfragen
Die Quizfragentabelle kann verwendet werden, um die Fragen zu Tests und Tests zu speichern. Nachfolgend finden Sie die Beschreibung aller Spalten der Quizfragentabelle.
ID | Die eindeutige ID zur Identifizierung der Quizfrage. |
Quiz-ID | Die Quiz-ID zur Identifizierung des übergeordneten Tests/Quiz. |
Typ | Die Art der Frage. Der Typ kann eine Einfachauswahl (Ja/Nein), Mehrfachauswahl oder Auswahl sein. Wir können auch Typ als Eingabe und Textbereich haben, falls das Quizergebnis manuell überprüft werden muss. |
Aktiv | Flag, um zu identifizieren, ob die Frage aktiv ist. Ein Quiz kann mehrere Fragen haben, aber nur ausgewählte Fragen bleiben gleichzeitig aktiv. |
Stufe | Die Stufe der Frage, um festzustellen, ob sie einfach, mittel oder schwierig ist. |
Ergebnis | Die Punktzahl einer einzelnen Frage. Wir sollten sicherstellen, dass nur ausgewählte Fragen gleichzeitig aktiv sind und die Gesamtpunktzahl der aktiven Fragen der Quizpunktzahl entspricht, bevor das Quiz veröffentlicht wird. |
Erstellt am | Datum und Uhrzeit der Erstellung der Frage werden gespeichert. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Frage werden gespeichert. |
Inhalt | Die Spalte zum Speichern der Frage. |
Die Tabelle mit den Quizfragen mit den entsprechenden Einschränkungen sieht unten aus.
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;
Quiz-Antworttabelle
Die Quiz-Antworttabelle kann verwendet werden, um die Antworten von Single-Choice-, Multiple-Choice- und Select-Type-Fragen zu speichern. Im Fall einer Single-Choice-Frage können die Antworten Ja und Nein lauten. Nachfolgend finden Sie die Beschreibung aller Spalten der Quiz-Antworttabelle.
ID | Die eindeutige ID zur Identifizierung der Quizantwort. |
Quiz-ID | Die Quiz-ID zur Identifizierung des übergeordneten Tests/Quiz. |
Frage-ID | Die Fragen-ID zur Identifizierung der übergeordneten Frage. |
Aktiv | Flag, um zu identifizieren, ob die Antwort aktiv ist. |
Richtig | Flag, um zu erkennen, ob die Antwort richtig ist. |
Erstellt am | Er speichert Datum und Uhrzeit der Erstellung der Antwort. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Antwort werden gespeichert. |
Inhalt | Die Spalte zum Speichern der Antwort. |
Die Quiz-Antworttabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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;
Tisch einnehmen
In diesem Abschnitt entwerfen wir die Take-Tabelle um die Registrierung und den Zeitpunkt der Benutzerversuche für die Quizze zu verfolgen. Nachfolgend finden Sie die Beschreibung aller Spalten der Take-Tabelle.
ID | Die eindeutige ID zur Identifizierung des Takes. |
Benutzer-ID | Die Benutzer-ID zur Identifizierung des Quizteilnehmers. |
Quiz-ID | Die Quiz-ID zur Identifizierung des Quiz. |
Status | Der Status der Aufnahme. Es kann eingeschrieben, gestartet, pausiert, beendet, deklariert werden. |
Ergebnis | Die vom Benutzer erzielte Gesamtpunktzahl. |
Erstellt am | Es speichert das Datum und die Uhrzeit der Erstellung des Takes. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung des Takes werden gespeichert. |
Begonnen um | Es speichert das Datum und die Uhrzeit, zu der die Aufnahme begonnen hat. |
Fertig um | Es speichert das Datum und die Uhrzeit, zu der die Aufnahme beendet ist. |
Inhalt | Die Spalte, in der die Take-Bemerkungen gespeichert werden. |
Die Take-Tabelle mit den entsprechenden Einschränkungen ist wie unten gezeigt.
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;
Antworttabelle nehmen
Die Take Answer Table kann verwendet werden, um die Antworten zu speichern, die der Benutzer während der Teilnahme am Quiz ausgewählt hat. Bei einer Multiple-Choice-Frage sind mehrere Antworten möglich. Nachfolgend finden Sie die Beschreibung aller Spalten der Take-Antwort-Tabelle.
ID | Die eindeutige ID zur Identifizierung der Take-Antwort. |
Id nehmen | Die Take-ID zur Identifizierung des Quizversuchs. |
Antwort-ID | Die Antwort-ID zur Identifizierung der Quizantwort. |
Aktiv | Flag, um zu identifizieren, ob die Antwort aktiv ist. |
Erstellt am | Er speichert Datum und Uhrzeit der Erstellung der Antwort. |
Aktualisiert um | Datum und Uhrzeit der Aktualisierung der Antwort werden gespeichert. |
Inhalt | Die Spalte, in der die Antwort im Fall von Eingabe- oder Textbereichsfragen gespeichert wird. |
Die Take-Antwort-Tabelle mit den entsprechenden Einschränkungen ist unten dargestellt.
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;
Zusammenfassung
In diesem Tutorial haben wir das Datenbankdesign eines Quizsystems besprochen, um die Benutzer, Quiz, Fragen, Antworten und Quizversuche in Form von Takes zu speichern.
Sie können Ihre Kommentare einreichen, um an der Diskussion teilzunehmen. Sie könnten auch daran interessiert sein, die Datenbank der Blog- und Umfrage-Anwendungen zu entwerfen.
Das vollständige Datenbankschema ist auch auf GitHub verfügbar.