Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Leitfaden zum Entwerfen einer Datenbank für Quiz in MySQL

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