Tento výukový program obsahuje kompletní kroky k návrhu schématu databáze pro správu uživatelů, blogových příspěvků, metadat příspěvků, komentářů, kategorií příspěvků a značek příspěvků. Může být dále použit k vývoji blogovacího webu nebo mobilní aplikace.
Diagram vztahů entit nebo návrh vizuální databáze je uveden níže.
Obr. 1
Poznámky :Aby bylo schéma databáze jednoduché a aby se vyvinul minimální životaschopný produkt, nepokrývá pokročilejší možnosti, jako je verzování a kontrola příspěvků. Poskytuje možnosti kontroly komentářů autorů příspěvků, aby se zabránilo spamování, takže na stránce příspěvku budou publikovány a zobrazeny pouze legitimní komentáře.
Můžete také navštívit oblíbené výukové programy včetně Jak nainstalovat MySQL 8 na Ubuntu, Jak nainstalovat MySQL 8 na Windows, Databáze RBAC v MySql, Databáze průzkumů a průzkumů v MySql, Naučte se základní SQL dotazy v MySQL.
Databáze blogu
Úplně prvním krokem je vytvoření databáze blogů. Lze jej vytvořit pomocí dotazu, jak je uvedeno níže.
CREATE SCHEMA `blog` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Použil jsem znakovou sadu utf8mb4 pro podporu široké škály znaků.
Tabulka uživatelů
V této části navrhneme Tabulku uživatelů k ukládání uživatelských informací všech autorů příspěvků. Stejnou tabulku lze použít ke spojení autorů příspěvků, takže všichni autoři mohou spravovat své vlastní příspěvky. Níže je uveden popis všech sloupců tabulky uživatelů.
ID | Jedinečné ID k identifikaci uživatele. |
Křestní jméno | Křestní jméno uživatele. |
Prostřední jméno | Prostřední jméno uživatele. |
Příjmení | Příjmení uživatele. |
Mobil | Číslo mobilního telefonu uživatele. Lze jej použít pro účely přihlášení a registrace. |
E-mailová adresa uživatele. Lze jej použít pro účely přihlášení a registrace. | |
Hašování hesla | Hash hash hesla vygenerovaný příslušným algoritmem. Musíme se vyhnout ukládání jednoduchých hesel. |
Registrováno na | Tento sloupec lze použít k výpočtu života uživatele s blogem. |
Poslední přihlášení | Lze jej použít k identifikaci posledního přihlášení uživatele. |
Úvod | Krátké představení autora, které se zobrazí u každého příspěvku. |
Profil | Podrobnosti o autorovi, které se mají zobrazit na stránce autora. |
Tabulka uživatelů s příslušnými omezeními je uvedena níže.
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) );
Zveřejnit tabulku
V této části navrhneme Tabulku příspěvků pro uložení dat příspěvku. Níže je uveden popis všech sloupců tabulky příspěvků.
ID | Jedinečné ID k identifikaci příspěvku. |
ID autora | ID autora k identifikaci autora příspěvku. |
ID rodiče | ID rodiče k identifikaci nadřazeného příspěvku. Lze jej použít k vytvoření obsahu nadřazeného příspěvku seriálu. |
Název | Název příspěvku, který se zobrazí na stránce příspěvku a seznamech. |
Název metadat | Název metadat, který se má použít pro název prohlížeče a SEO. |
Slimák | Slug příspěvku tvořící adresu URL. |
Shrnutí | Shrnutí příspěvku, ve kterém jsou zmíněny hlavní body. |
Publikováno | Lze použít k identifikaci, zda je příspěvek veřejně dostupný. |
Vytvořeno v | Ukládá datum a čas, kdy byl příspěvek vytvořen. |
Aktualizováno dne | Ukládá datum a čas, kdy je příspěvek aktualizován. |
Zveřejněno v | Ukládá datum a čas, kdy je příspěvek publikován. |
Obsah | Sloupec používaný k ukládání dat příspěvku. |
Tabulka příspěvků s příslušnými omezeními je uvedena níže.
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;
Příspěvek meta
Tabulku meta příspěvků lze použít k uložení dalších informací o příspěvku včetně adresy URL banneru příspěvku atd. Níže je uveden popis všech sloupců tabulky meta příspěvků.
ID | Jedinečné ID k identifikaci meta příspěvku. |
ID příspěvku | ID příspěvku k identifikaci nadřazeného příspěvku. |
Klíč | Klíč identifikující meta. |
Obsah | Sloupec používaný k ukládání dat příspěvku. |
Tabulka Post Meta Table s příslušnými omezeními je uvedena níže.
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;
Tabulka komentářů příspěvku
V této sekci navrhneme Tabulku komentářů k příspěvkům pro uložení komentářů k příspěvku. Níže je uveden popis všech sloupců tabulky komentářů příspěvků.
ID | Jedinečné ID pro identifikaci komentáře příspěvku. |
ID příspěvku | ID příspěvku k identifikaci nadřazeného příspěvku. |
ID rodiče | ID rodiče k identifikaci nadřazeného komentáře. |
Název | Název komentáře. |
Publikováno | Lze jej použít ke zjištění, zda je komentář veřejně dostupný. |
Vytvořeno v | Ukládá datum a čas odeslání komentáře. |
Zveřejněno v | Ukládá datum a čas, kdy je komentář publikován. |
Obsah | Sloupec používaný k uložení dat komentáře. |
Tabulka komentářů příspěvků s příslušnými omezeními je uvedena níže.
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;
Tabulka kategorií a tabulka kategorií příspěvků
V této části navrhneme Tabulku kategorií a Tabulka kategorií příspěvků k ukládání kategorií příspěvků a jejich mapování. Níže je uveden popis všech sloupců tabulky kategorií.
ID | Jedinečné ID k identifikaci kategorie. |
ID rodiče | ID rodiče k identifikaci nadřazené kategorie. |
Název | Název kategorie. |
Název metadat | Název metadat, který se má použít pro název prohlížeče a SEO. |
Slimák | Slug kategorie tvořící adresu URL. |
Obsah | Sloupec používaný k uložení dat kategorie. |
Tabulka kategorií s příslušnými omezeními je uvedena níže.
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;
Níže je uveden popis všech sloupců tabulky kategorií příspěvků.
ID příspěvku | ID příspěvku k identifikaci příspěvku. |
ID kategorie | ID kategorie k identifikaci kategorie. |
Tabulka kategorií příspěvků s příslušnými omezeními je uvedena níže.
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);
Tabulka značek a tabulka značek příspěvků
Podobně jako u tabulek kategorií a příspěvků můžeme navrhnout Tabulku značek a Přidat tabulku značek . Hlavní rozdíly mezi kategorií a štítkem jsou uvedeny níže.
- Sloupec parentId není v tabulce značek povinný.
- Počet kategorií zůstává nízký, protože je lze použít k vytvoření hlavní nabídky pro navigační účely. Značek může být více než kategorie.
- K propojení příspěvků lze použít kategorie i značky.
- Člověk by měl příspěvku přiřadit pouze několik kategorií, zatímco počet značek může být více.
Shrnutí
Takto můžeme navrhnout databázi blogů, která bude použita jako tvorba webových stránek a mobilních aplikací založených na blogu. Totéž lze dále vylepšit přidáním pokročilejších možností včetně videí, plateb, odběrů atd.
Do diskuse můžete zasílat své komentáře. Může vás také zajímat návrh databáze aplikací Poll &Survey. Návrh RBAC lze použít pro implementaci Role-Based Access Control.
Kompletní schéma databáze je k dispozici také na GitHubu.