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

Leitfaden zum Entwerfen einer Datenbank für Umfragen und Umfragen in MySQL

Dieses Tutorial enthält vollständige Schritte zum Entwerfen eines Datenbankschemas geschlossener oder offener Umfragen und Umfragen per Fragebogen, um die Benutzer, Umfragen, Fragen, Antworten und Stimmen zu verwalten. Es kann weiter verwendet werden, um eine Umfrage- und Umfrage-Website oder eine mobile Anwendung zu entwickeln.

Das Entity-Relationship-Diagramm oder visuelle Datenbankdesign ist unten dargestellt.

Abb. 1

Notizen :Um das Datenbankschema einfach zu halten und ein minimal realisierbares Produkt zu entwickeln, werden die fortgeschritteneren Optionen wie Versionierung und Überprüfung der Umfragen und Umfragen nicht behandelt. Es beschränkt sich darauf, dass nur angemeldete Benutzer an einer Umfrage oder Umfrage teilnehmen, um Spam zu vermeiden, sodass nur legitime Stimmen abgegeben werden.

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.

Umfragedatenbank

Der allererste Schritt besteht darin, die Umfragedatenbank zu erstellen. Es kann mit der unten gezeigten Abfrage erstellt werden.

CREATE SCHEMA `poll` 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 um Benutzerinformationen des Eigentümers der Umfrage/Umfrage zu speichern. Dieselbe Tabelle kann verwendet werden, um die Eigentümer von Umfragen/Umfragen in Beziehung zu setzen, sodass die Benutzer ihre eigene Umfrage oder Umfrage verwalten und die Abstimmungsaktivitäten 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 eine Umfrage oder Umfrage 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 Benutzers, die auf der Umfrage- oder Umfrageseite angezeigt wird.
Profil Die Eigentümerdetails, die auf der Umfrage- oder Umfrageseite angezeigt werden sollen.

Die Benutzertabelle mit den entsprechenden Einschränkungen sieht unten aus.

CREATE TABLE `poll`.`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) );

Umfragetabelle

In diesem Abschnitt entwerfen wir die Umfragetabelle um die Umfrage- und Befragungsdaten zu speichern. Unten erwähnt ist die Beschreibung aller Spalten der Umfragetabelle.

ID Die eindeutige ID zur Identifizierung der Umfrage/Umfrage.
Host-ID Die Host-ID zur Identifizierung des Umfrage-/Umfragehosts.
Titel Der Titel der Umfrage/Umfrage, der auf der Umfrage-/Umfrageseite 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, um zwischen der Umfrage und der Umfrage zu unterscheiden.
Veröffentlicht Es kann verwendet werden, um festzustellen, ob die Umfrage/Umfrage öffentlich verfügbar ist.
Erstellt am Er speichert Datum und Uhrzeit der Erstellung der Umfrage/Umfrage.
Aktualisiert um Datum und Uhrzeit der Aktualisierung der Umfrage/Umfrage werden gespeichert.
Veröffentlicht unter Datum und Uhrzeit der Veröffentlichung der Umfrage/Umfrage werden gespeichert.
Beginnt bei Es speichert das Datum und die Uhrzeit, zu der die Umfrage/Umfrage beginnt, und öffnet für die Abstimmung.
Endet bei Es speichert das Datum und die Uhrzeit, zu denen die Umfrage/Umfrage für die Abstimmung geschlossen wird.
Inhalt Die Spalte, in der die Umfrage-/Umfragedaten gespeichert werden.

Die Poll-Tabelle mit den entsprechenden Einschränkungen sieht unten aus.

CREATE TABLE `poll`.`poll` (
`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,
`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_poll_host` (`hostId` ASC),
CONSTRAINT `fk_poll_host`
FOREIGN KEY (`hostId`)
REFERENCES `poll`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Umfrage-Meta

Die Umfrage-Metatabelle kann verwendet werden, um zusätzliche Informationen zu einer Umfrage oder Umfrage zu speichern, einschließlich der Umfrage-Banner-URL usw. Nachfolgend finden Sie die Beschreibung aller Spalten der Umfrage-Metatabelle.

ID Die eindeutige ID zur Identifizierung des Umfrage-Metas.
Umfrage-ID Die Umfrage-ID zur Identifizierung der übergeordneten Umfrage/Umfrage.
Schlüssel Der Schlüssel, der das Meta identifiziert.
Inhalt Die Spalte, in der die Metadaten der Umfrage gespeichert werden.

Die Umfrage-Meta-Tabelle mit den entsprechenden Einschränkungen ist wie unten gezeigt.

CREATE TABLE `poll`.`poll_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_poll` (`pollId` ASC),
UNIQUE INDEX `uq_poll_meta` (`pollId` ASC, `key` ASC),
CONSTRAINT `fk_meta_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Umfragetabelle

Die Umfragefragentabelle kann verwendet werden, um die Fragen zu Umfragen und Erhebungen zu speichern. Das ideale Szenario ist eine Frage für Umfragen und mehrere Fragen für Umfragen. Nachfolgend finden Sie die Beschreibung aller Spalten der Umfragefragentabelle.

ID Die eindeutige ID zur Identifizierung der Umfragefrage.
Umfrage-ID Die Umfrage-ID zur Identifizierung der übergeordneten Umfrage/Umfrage.
Typ Die Art der Frage. Der Typ kann eine Einfachauswahl (Ja/Nein), Mehrfachauswahl, Auswahl oder Eingabe sein.
Aktiv Flag, um zu identifizieren, ob die Frage aktiv ist.
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 Umfragefragentabelle mit den entsprechenden Einschränkungen sieht unten aus.

CREATE TABLE `poll`.`poll_question` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`type` VARCHAR(50) 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_question_poll` (`pollId` ASC),
CONSTRAINT `fk_question_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Umfrageantworttabelle

Die Umfrage-Antworttabelle kann verwendet werden, um die Antworten auf Single-Choice-, Multiple-Choice- und Select-Type-Fragen zu speichern. Im Falle einer Single-Choice-Frage können die Antworten Ja und Nein lauten. Nachfolgend finden Sie die Beschreibung aller Spalten der Umfrage-Antworttabelle.

ID Die eindeutige ID zur Identifizierung der Umfrageantwort.
Umfrage-ID Die Umfrage-ID zur Identifizierung der übergeordneten Umfrage/Umfrage.
Frage-ID Die Fragen-ID zur Identifizierung der übergeordneten Frage.
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 zum Speichern der Antwort.

Die Umfrage-Antwort-Tabelle mit den entsprechenden Einschränkungen ist unten dargestellt.

CREATE TABLE `poll`.`poll_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`questionId` 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_poll` (`pollId` ASC),
CONSTRAINT `fk_answer_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `poll`.`poll_answer`
ADD INDEX `idx_answer_question` (`questionId` ASC);
ALTER TABLE `poll`.`poll_answer`
ADD CONSTRAINT `fk_answer_question`
FOREIGN KEY (`questionId`)
REFERENCES `poll`.`poll_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Umfragetabelle

Die Poll Vote Table kann verwendet werden, um die Benutzerauswahlen und -eingaben zu speichern. Unten erwähnt ist die Beschreibung aller Spalten der Poll Vote Table.

ID Die eindeutige ID zur Identifizierung der Umfragestimme.
Umfrage-ID Die Umfrage-ID zur Identifizierung der Umfrage/Umfrage.
Frage-ID Die Fragen-ID zur Identifizierung der Frage.
Antwort-ID Die Antwort-ID zur Identifizierung der Antwort.
Benutzer-ID Die Benutzer-ID zur Identifizierung des Benutzers.
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 Benutzereingabe.

Die Poll Vote Table mit den entsprechenden Einschränkungen ist wie unten gezeigt.

CREATE TABLE `poll`.`poll_vote` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`answerId` BIGINT DEFAULT NULL,
`userId` BIGINT NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_vote_poll` (`pollId` ASC),
CONSTRAINT `fk_vote_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_question` (`questionId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_question`
FOREIGN KEY (`questionId`)
REFERENCES `poll`.`poll_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_answer` (`answerId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_answer`
FOREIGN KEY (`answerId`)
REFERENCES `poll`.`poll_answer` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_user` (`userId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_user`
FOREIGN KEY (`userId`)
REFERENCES `poll`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Kategorietabelle und Umfragekategorietabelle

In diesem Abschnitt entwerfen wir die Kategorietabelle und Umfragekategorietabelle um die Umfragekategorien und ihre Zuordnungen zu speichern. Unten erwähnt ist die Beschreibung aller Spalten der Kategorietabelle.

ID Die eindeutige ID zur Identifizierung der Kategorie.
Eltern-ID Die übergeordnete ID zur Identifizierung der übergeordneten Kategorie.
Titel Der Kategorietitel.
Metatitel Der Metatitel, der für Browsertitel und SEO verwendet werden soll.
Schnecke Der Kategorie-Slug zur Bildung der URL.
Inhalt Die Spalte zum Speichern der Kategoriedaten.

Die Kategorietabelle mit den entsprechenden Einschränkungen sieht unten aus.

CREATE TABLE `poll`.`category` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL DEFAULT NULL,
`slug` VARCHAR(100) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`));

ALTER TABLE `poll`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `poll`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `poll`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Nachfolgend finden Sie die Beschreibung aller Spalten der Umfragekategorietabelle.

Umfrage-ID Die Umfrage-ID zur Identifizierung der Umfrage oder Umfrage.
Kategorie-ID Die Kategorie-ID zur Identifizierung der Kategorie.

Die Tabelle der Umfragekategorien mit den entsprechenden Einschränkungen ist unten dargestellt.

CREATE TABLE `poll`.`poll_category` (
`pollId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`pollId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_poll` (`pollId` ASC),
CONSTRAINT `fk_pc_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `poll`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tag-Tabelle und Umfrage-Tag-Tabelle

Ähnlich wie die Kategorie- und Umfrage-Kategorietabellen können wir die Tag-Tabelle gestalten und Umfrage-Tag-Tabelle . Die Hauptunterschiede zwischen der Kategorie und dem Tag sind unten aufgeführt.

  • Die parentId-Spalte ist in der Tag-Tabelle nicht erforderlich.
  • Die Anzahl der Kategorien bleibt niedrig, da diese verwendet werden können, um das Hauptmenü für Navigationszwecke zu bilden. Die Tags können mehr sein als Kategorien.
  • Sowohl Kategorien als auch Tags können verwendet werden, um die Umfragen in Beziehung zu setzen.
  • Man sollte einer Umfrage nur wenige Kategorien zuweisen, während die Anzahl der Tags höher sein kann.

Zusammenfassung

Auf diese Weise können wir eine Umfragedatenbank entwerfen, die als Grundlage für auf Umfragen und Umfragen basierende Websites und mobile Anwendungen verwendet werden kann. Dasselbe kann weiter verbessert werden, um erweiterte Optionen wie Videos, Zahlungen, Abonnements usw. hinzuzufügen.

Sie können Ihre Kommentare einreichen, um an der Diskussion teilzunehmen. Sie könnten auch daran interessiert sein, die Datenbank von Blog-Anwendungen zu entwerfen. Das RBAC-Design kann für die Implementierung der rollenbasierten Zugriffskontrolle verwendet werden.

Das vollständige Datenbankschema ist auch auf GitHub verfügbar.