Този урок предоставя пълни стъпки за проектиране на схема на база данни за управление на потребителите, публикации в блогове, мета данни за публикуване, коментари за публикации, категории публикации и етикети за публикации. Може да се използва допълнително за разработване на уебсайт за блогове или мобилно приложение.
Диаграмата на взаимоотношенията на обектите или визуалният дизайн на базата данни е показан по-долу.
Фигура 1
Бележки :За да запази схемата на базата данни проста и да разработи минимално жизнеспособен продукт, тя не покрива по-разширените опции като версия на версии и преглед на публикациите. Той предоставя опции за преглед на коментарите от авторите на публикацията, за да се избегне спам, така че само легитимни коментари ще бъдат публикувани и показвани на страницата за публикации.
Можете също да посетите популярните уроци, включително Как да инсталирате MySQL 8 на Ubuntu, Как да инсталирате MySQL 8 на Windows, RBAC база данни в MySql, База данни за анкети и анкети в MySql, Научете основни SQL заявки в MySQL.
Блог база данни
Първата стъпка е да създадете блог база данни. Може да се създаде с помощта на заявката, както е показано по-долу.
CREATE SCHEMA `blog` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Използвал съм набора от знаци utf8mb4 за поддръжка на широк спектър от знаци.
Таблица с потребители
В този раздел ще проектираме Таблица на потребителите за съхраняване на потребителска информация за всички автори на публикации. Същата таблица може да се използва за свързване на авторите на публикациите, така че всички автори да могат да управляват собствените си публикации. По-долу е посочено описанието на всички колони на потребителската таблица.
Id | Уникалният идентификатор за идентифициране на потребителя. |
Име | Първото име на потребителя. |
Биринно име | Биринното име на потребителя. |
Фамилия | Фамилията на потребителя. |
Мобилни | Мобилният номер на потребителя. Може да се използва за влизане и регистрация. |
Имейл | Имейлът на потребителя. Може да се използва за влизане и регистрация. |
Хеш на парола | Хешът на паролата, генериран от подходящия алгоритъм. Трябва да избягваме съхраняването на обикновени пароли. |
Регистриран в | Тази колона може да се използва за изчисляване на живота на потребителя с блога. |
Последно влизане | Може да се използва за идентифициране на последното влизане на потребителя. |
Въведение | Краткото представяне на автора, което да се показва на всяка публикация. |
Профил | Данните за автора, които да се показват на страницата на автора. |
Потребителската таблица със съответните ограничения е както е показано по-долу.
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) );
Таблица с публикации
В този раздел ще проектираме Таблица за публикации за съхраняване на данните за публикацията. По-долу е споменато описанието на всички колони на таблицата за публикации.
Id | Уникалният идентификатор за идентифициране на публикацията. |
Идентификатор на автора | Идентификаторът на автора за идентифициране на автора на публикацията. |
Идентификатор на родител | Идентификаторът на родителя за идентифициране на родителската публикация. Може да се използва за формиране на съдържанието на основната публикация на поредицата. |
Заглавие | Заглавието на публикацията, което да се показва на страницата за публикации и списъците. |
Метазаглавие | Мета заглавието, което ще се използва за заглавие на браузъра и SEO. |
Плюс | Програмата на публикацията за формиране на URL адреса. |
Резюме | Резюме на публикацията, за да се споменат основните акценти. |
Публикувано | Може да се използва за идентифициране дали публикацията е публично достъпна. |
Създаден в | Той съхранява датата и часа, в които е създадена публикацията. |
Актуализирано в | Той съхранява датата и часа, в които публикацията е актуализирана. |
Публикувано в | Той съхранява датата и часа, в които публикацията е публикувана. |
Съдържание | Колоната, използвана за съхраняване на данните за публикацията. |
Таблицата за публикуване със съответните ограничения е както е показано по-долу.
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;
Мета публикация
Метатаблицата на публикациите може да се използва за съхраняване на допълнителна информация за публикация, включително URL адреса на банера на публикацията и т.н. По-долу е посочено описанието на всички колони в метатаблицата на публикацията.
Id | Уникалният идентификатор за идентифициране на мета публикацията. |
Идентификатор на публикацията | Идентификаторът на публикацията за идентифициране на родителската публикация. |
Ключ | Ключът, идентифициращ мета. |
Съдържание | Колоната, използвана за съхраняване на данните за публикацията. |
Мета таблицата за публикуване със съответните ограничения е както е показано по-долу.
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;
Таблица за публикуване на коментари
В този раздел ще проектираме Таблица за публикуване на коментари за да съхранявате коментарите на публикацията. По-долу е споменато описанието на всички колони в таблицата за публикуване на коментари.
Id | Уникалният идентификатор за идентифициране на коментара на публикацията. |
Идентификатор на публикацията | Идентификаторът на публикацията за идентифициране на родителската публикация. |
Идентификатор на родител | Идентификаторът на родителя за идентифициране на родителския коментар. |
Заглавие | Заглавието на коментара. |
Публикувано | Може да се използва за идентифициране дали коментарът е публично достъпен. |
Създаден в | Той съхранява датата и часа, в които е изпратен коментарът. |
Публикувано в | Той съхранява датата и часа, в които коментарът е публикуван. |
Съдържание | Колоната, използвана за съхраняване на данните за коментарите. |
Таблицата за публикуване на коментари със съответните ограничения е както е показано по-долу.
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;
Таблица с категории и таблица с категории на публикации
В този раздел ще проектираме Таблица с категории и Таблица с категории на публикации за съхраняване на категориите публикации и техните съпоставяния. По-долу е споменато описанието на всички колони на таблицата с категории.
Id | Уникалният идентификатор за идентифициране на категорията. |
Идентификатор на родител | Идентификаторът на родител за идентифициране на родителската категория. |
Заглавие | Заглавието на категорията. |
Метазаглавие | Мета заглавието, което ще се използва за заглавие на браузъра и SEO. |
Плюс | Категорията, която формира URL адреса. |
Съдържание | Колоната, използвана за съхраняване на данните за категорията. |
Таблицата на категориите със съответните ограничения е както е показано по-долу.
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;
По-долу е споменато описанието на всички колони на таблицата с категории постове.
Идентификатор на публикацията | Идентификаторът на публикацията за идентифициране на публикацията. |
Идентификатор на категория | Идентификаторът на категорията за идентифициране на категорията. |
Таблицата с категории на публикации със съответните ограничения е както е показано по-долу.
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);
Таблица с маркери и таблица с маркери за публикуване
Подобно на таблиците за категории и публикации, можем да проектираме Таблица с етикети и Таблица с маркери за публикуване . Основните разлики между категорията и етикета са изброени по-долу.
- Колоната parentId не се изисква в таблицата с маркери.
- Броят на категориите остава нисък, тъй като те могат да се използват за формиране на главното меню за навигационни цели. Таговете могат да бъдат повече в сравнение с категориите.
- И двете категории и тагове могат да се използват за свързване на публикациите.
- Трябва да присвоите само няколко категории на публикация, докато броят на маркерите може да бъде повече.
Резюме
Ето как можем да проектираме база данни на блогове, която да се използва като формиране на уебсайтове и мобилни приложения, базирани на блогове. Същото може да бъде допълнително подобрено, за да се добавят по-разширени опции, включително видеоклипове, плащания, абонаменти и т.н.
Можете да изпратите вашите коментари, за да се присъедините към дискусията. Може да се интересувате и от проектирането на база данни с приложения за анкети и анкети. Дизайнът на RBAC може да се използва за изпълнение на контрол на достъп, базиран на роли.
Пълната схема на базата данни е достъпна и на GitHub.