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

Leitfaden zum Entwerfen einer Datenbank für das Blog-Management in MySQL

Dieses Tutorial enthält vollständige Schritte zum Entwerfen eines Datenbankschemas zum Verwalten von Benutzern, Blog-Posts, Post-Metadaten, Post-Kommentaren, Post-Kategorien und Post-Tags. Es kann weiter verwendet werden, um eine Blogging-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 funktionsfähiges Produkt zu entwickeln, werden die erweiterten Optionen wie Versionierung und Überprüfung der Posts nicht behandelt. Es bietet Optionen zum Überprüfen der Kommentare der Beitragsautoren, um Spam zu vermeiden, sodass nur legitime Kommentare veröffentlicht und auf der Beitragsseite angezeigt 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, Poll and Survey Database in MySql, Learn Basic SQL Queries In MySQL.

Blog-Datenbank

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

CREATE SCHEMA `blog` 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 aller Beitragsautoren zu speichern. Dieselbe Tabelle kann verwendet werden, um die Beitragsautoren zu verknüpfen, sodass alle Autoren ihre eigenen Beiträge verwalten 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.
Registriert unter Diese Spalte kann verwendet werden, um die Lebensdauer des Benutzers mit dem Blog zu berechnen.
Letzte Anmeldung Es kann verwendet werden, um die letzte Anmeldung des Benutzers zu identifizieren.
Einführung Die kurze Einführung des Autors, die in jedem Beitrag angezeigt wird.
Profil Die auf der Autorenseite anzuzeigenden Autorendetails.

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

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

Post-Tabelle

In diesem Abschnitt entwerfen wir die Post-Tabelle um die Beitragsdaten zu speichern. Unten erwähnt ist die Beschreibung aller Spalten der Post-Tabelle.

ID Die eindeutige ID zur Identifizierung des Beitrags.
Autoren-ID Die Autoren-ID, um den Autor des Beitrags zu identifizieren.
Eltern-ID Die übergeordnete ID zur Identifizierung des übergeordneten Beitrags. Es kann verwendet werden, um das Inhaltsverzeichnis des übergeordneten Beitrags der Serie zu bilden.
Titel Der Beitragstitel, der auf der Beitragsseite und den Listen angezeigt werden soll.
Metatitel Der Metatitel, der für Browsertitel und SEO verwendet werden soll.
Schnecke Der Post-Slug zur Bildung der URL.
Zusammenfassung Die Zusammenfassung des Beitrags, um die wichtigsten Highlights zu erwähnen.
Veröffentlicht Es kann verwendet werden, um festzustellen, ob der Beitrag öffentlich zugänglich ist.
Erstellt am Er speichert Datum und Uhrzeit der Erstellung des Beitrags.
Aktualisiert um Datum und Uhrzeit der Aktualisierung des Beitrags werden gespeichert.
Veröffentlicht unter Datum und Uhrzeit der Veröffentlichung des Beitrags werden gespeichert.
Inhalt Die Spalte, die zum Speichern der Beitragsdaten verwendet wird.

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

CREATE TABLE `blog`.`post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`authorId` BIGINT NOT NULL,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_post_user` (`authorId` ASC),
CONSTRAINT `fk_post_user`
FOREIGN KEY (`authorId`)
REFERENCES `blog`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `blog`.`post`
ADD INDEX `idx_post_parent` (`parentId` ASC);
ALTER TABLE `blog`.`post`
ADD CONSTRAINT `fk_post_parent`
FOREIGN KEY (`parentId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Post-Meta

Die Post-Meta-Tabelle kann verwendet werden, um zusätzliche Informationen zu einem Post zu speichern, einschließlich der Post-Banner-URL usw. Nachfolgend finden Sie die Beschreibung aller Spalten der Post-Meta-Tabelle.

ID Die eindeutige ID zur Identifizierung des Post-Metas.
Beitrags-ID Die Beitrags-ID zur Identifizierung des übergeordneten Beitrags.
Schlüssel Der Schlüssel, der das Meta identifiziert.
Inhalt Die Spalte, die zum Speichern der Beitragsdaten verwendet wird.

Die Post-Meta-Tabelle mit den entsprechenden Einschränkungen ist unten dargestellt.

CREATE TABLE `blog`.`post_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`postId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_post` (`postId` ASC),
UNIQUE INDEX `uq_post_meta` (`postId` ASC, `key` ASC),
CONSTRAINT `fk_meta_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Post-Kommentar-Tabelle

In diesem Abschnitt entwerfen wir die Post Comment Table um die Beitragskommentare zu speichern. Unten erwähnt ist die Beschreibung aller Spalten der Post Comment Table.

ID Die eindeutige ID zur Identifizierung des Beitragskommentars.
Beitrags-ID Die Beitrags-ID zur Identifizierung des übergeordneten Beitrags.
Eltern-ID Die übergeordnete ID zur Identifizierung des übergeordneten Kommentars.
Titel Der Kommentartitel.
Veröffentlicht Es kann verwendet werden, um festzustellen, ob der Kommentar öffentlich zugänglich ist.
Erstellt am Datum und Uhrzeit der Abgabe des Kommentars werden gespeichert.
Veröffentlicht unter Datum und Uhrzeit der Veröffentlichung des Kommentars werden gespeichert.
Inhalt Die Spalte zum Speichern der Kommentardaten.

Die Post-Kommentar-Tabelle mit den entsprechenden Einschränkungen ist unten dargestellt.

CREATE TABLE `blog`.`post_comment` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`postId` BIGINT NOT NULL,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(100) NOT NULL,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_comment_post` (`postId` ASC),
CONSTRAINT `fk_comment_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `blog`.`post_comment`
ADD INDEX `idx_comment_parent` (`parentId` ASC);
ALTER TABLE `blog`.`post_comment`
ADD CONSTRAINT `fk_comment_parent`
FOREIGN KEY (`parentId`)
REFERENCES `blog`.`post_comment` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Kategorietabelle und Beitragskategorietabelle

In diesem Abschnitt entwerfen wir die Kategorietabelle und Post-Kategorie-Tabelle um die Beitragskategorien 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 `blog`.`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 `blog`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `blog`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `blog`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Nachfolgend finden Sie die Beschreibung aller Spalten der Post-Kategorie-Tabelle.

Beitrags-ID Die Beitrags-ID zur Identifizierung des Beitrags.
Kategorie-ID Die Kategorie-ID zur Identifizierung der Kategorie.

Die Post-Kategorie-Tabelle mit den entsprechenden Einschränkungen ist unten dargestellt.

 
CREATE TABLE `blog`.`post_category` (
`postId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`postId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_post` (`postId` ASC),
CONSTRAINT `fk_pc_post`
FOREIGN KEY (`postId`)
REFERENCES `blog`.`post` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `blog`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tag-Tabelle und Post-Tag-Tabelle

Ähnlich wie die Kategorie- und Post-Kategorie-Tabellen können wir die Tag-Tabelle gestalten und Post-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.
  • Beide Kategorien und Tags können verwendet werden, um die Beiträge zu verknüpfen.
  • Man sollte einem Beitrag nur wenige Kategorien zuweisen, während die Anzahl der Tags höher sein kann.

Zusammenfassung

So können wir eine Blog-Datenbank entwerfen, die als Grundlage für Blog-basierte 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 für Umfrage- und Umfrageanwendungen 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.