Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przewodnik po projektowaniu bazy danych do zarządzania blogami w MySQL

Ten samouczek zawiera kompletne kroki projektowania schematu bazy danych do zarządzania użytkownikami, postami w blogu, metadanymi postów, komentarzami postów, kategoriami postów i tagami postów. Może być dalej wykorzystywany do tworzenia witryny blogowej lub aplikacji mobilnej.

Diagram relacji encji lub wizualny projekt bazy danych pokazano poniżej.

Rys. 1

Notatki :Aby zachować prostotę schematu bazy danych i stworzyć minimalny opłacalny produkt, nie obejmuje bardziej zaawansowanych opcji, takich jak wersjonowanie i przeglądanie postów. Zapewnia opcje przeglądania komentarzy autorów postów, aby uniknąć spamowania, dzięki czemu tylko uzasadnione komentarze będą publikowane i wyświetlane na stronie posta.

Możesz także odwiedzić popularne samouczki, w tym Jak zainstalować MySQL 8 w Ubuntu, Jak zainstalować MySQL 8 w Windows, Baza danych RBAC w MySql, Baza danych ankiet i ankiet w MySql, Naucz się podstawowych zapytań SQL w MySQL.

Baza danych blogów

Pierwszym krokiem jest stworzenie bazy danych blogów. Można go utworzyć za pomocą zapytania, jak pokazano poniżej.

CREATE SCHEMA `blog` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Użyłem zestawu znaków utf8mb4 do obsługi szerokiej gamy znaków.

Tabela użytkowników

W tej sekcji zaprojektujemy Tabelę użytkowników do przechowywania informacji o użytkownikach wszystkich autorów postów. Tej samej tabeli można użyć do powiązania autorów postów, aby wszyscy autorzy mogli zarządzać własnymi postami. Poniżej znajduje się opis wszystkich kolumn tabeli użytkowników.

Identyfikator Unikalny identyfikator do identyfikacji użytkownika.
Imię Imię użytkownika.
Drugie imię Drugie imię użytkownika.
Nazwisko Nazwisko użytkownika.
Komórka Numer telefonu komórkowego użytkownika. Może być używany do celów logowania i rejestracji.
Poczta e-mail E-mail użytkownika. Może być używany do celów logowania i rejestracji.
Hash hasła Skrót hasła wygenerowany przez odpowiedni algorytm. Musimy unikać przechowywania zwykłych haseł.
Zarejestrowano w Ta kolumna może być użyta do obliczenia życia użytkownika z blogiem.
Ostatnie logowanie Może być używany do identyfikacji ostatniego logowania użytkownika.
Wprowadzenie Krótkie wprowadzenie Autora do wyświetlenia w każdym poście.
Profil Szczegóły autora, które mają być wyświetlane na stronie autora.

Tabela użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.

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) );

Opublikuj tabelę

W tej sekcji zaprojektujemy Tabelę postów do przechowywania danych pocztowych. Poniżej znajduje się opis wszystkich kolumn tabeli postów.

Identyfikator Unikalny identyfikator do identyfikacji posta.
Identyfikator autora Identyfikator autora identyfikujący autora posta.
Identyfikator rodzica Identyfikator nadrzędny identyfikujący nadrzędny post. Może być użyty do utworzenia spisu treści nadrzędnego posta serii.
Tytuł Tytuł posta, który ma być wyświetlany na stronie posta i listach.
Metatytuł Metatytuł używany do tytułu przeglądarki i SEO.
Ślimak Uruchomienie posta do utworzenia adresu URL.
Podsumowanie Podsumowanie postu, aby wspomnieć o najważniejszych wydarzeniach.
Opublikowane Może być użyty do określenia, czy post jest publicznie dostępny.
Utworzono w Przechowuje datę i godzinę utworzenia wpisu.
Aktualizacja o Przechowuje datę i godzinę aktualizacji posta.
Opublikowano w Przechowuje datę i godzinę opublikowania posta.
Treść Kolumna używana do przechowywania danych postów.

Tabela postów z odpowiednimi ograniczeniami jest pokazana poniżej.

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;

Opublikuj meta

Metatabela postu może być używana do przechowywania dodatkowych informacji o poście, w tym adresu URL banera posta itp. Poniżej znajduje się opis wszystkich kolumn metatabeli postu.

Identyfikator Unikalny identyfikator do identyfikacji meta postu.
Identyfikator posta Identyfikator wpisu identyfikujący wpis nadrzędny.
Klucz Klucz identyfikujący meta.
Treść Kolumna używana do przechowywania danych postów.

Metatabela postu z odpowiednimi ograniczeniami jest pokazana poniżej.

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;

Prześlij tabelę komentarzy

W tej sekcji zaprojektujemy Tabelę publikowania komentarzy do przechowywania komentarzy do posta. Poniżej znajduje się opis wszystkich kolumn tabeli komentarzy do posta.

Identyfikator Unikalny identyfikator identyfikujący komentarz do posta.
Identyfikator posta Identyfikator wpisu identyfikujący wpis nadrzędny.
Identyfikator rodzica Identyfikator rodzica do identyfikacji komentarza rodzica.
Tytuł Tytuł komentarza.
Opublikowane Może być użyty do określenia, czy komentarz jest publicznie dostępny.
Utworzono w Przechowuje datę i godzinę przesłania komentarza.
Opublikowano w Przechowuje datę i godzinę opublikowania komentarza.
Treść Kolumna używana do przechowywania danych komentarzy.

Tabela publikowania komentarzy z odpowiednimi ograniczeniami jest pokazana poniżej.

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;

Tabela kategorii i tabela kategorii postów

W tej sekcji zaprojektujemy Tabelę kategorii i Tabela kategorii postów do przechowywania kategorii postów i ich mapowań. Poniżej znajduje się opis wszystkich kolumn tabeli kategorii.

Identyfikator Unikalny identyfikator do identyfikacji kategorii.
Identyfikator rodzica Identyfikator nadrzędny do identyfikacji kategorii nadrzędnej.
Tytuł Tytuł kategorii.
Metatytuł Metatytuł używany do tytułu przeglądarki i SEO.
Ślimak Narzędzie kategorii do utworzenia adresu URL.
Treść Kolumna używana do przechowywania danych kategorii.

Tabela kategorii z odpowiednimi ograniczeniami jest pokazana poniżej.

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;

Poniżej znajduje się opis wszystkich kolumn tabeli kategorii postów.

Identyfikator posta Identyfikator posta identyfikujący post.
Identyfikator kategorii Identyfikator kategorii do identyfikacji kategorii.

Tabela kategorii postów z odpowiednimi ograniczeniami jest pokazana poniżej.

 
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);

Tabela tagów i tabela tagów postów

Podobnie jak w przypadku tabel kategorii i postów, możemy zaprojektować Tabelę tagów i Tabela tagów postów . Poniżej wymieniono główne różnice między kategorią a tagiem.

  • Kolumna parentId nie jest wymagana w tabeli tagów.
  • Liczba kategorii pozostaje niska, ponieważ można ich użyć do utworzenia menu głównego do celów nawigacyjnych. Tagi mogą być większe w porównaniu z kategoriami.
  • Zarówno kategorie, jak i tagi mogą być użyte do powiązania postów.
  • Do posta należy przypisać tylko kilka kategorii, podczas gdy liczba tagów może być większa.

Podsumowanie

W ten sposób możemy zaprojektować bazę danych blogów, która będzie wykorzystywana do tworzenia witryn internetowych i aplikacji mobilnych opartych na blogach. To samo można dodatkowo ulepszyć, aby dodać bardziej zaawansowane opcje, w tym filmy, płatności, subskrypcje itp.

Możesz przesłać swoje uwagi, aby dołączyć do dyskusji. Możesz być również zainteresowany zaprojektowaniem bazy danych aplikacji Poll &Survey. Projekt RBAC można wykorzystać do implementacji kontroli dostępu opartej na rolach.

Pełny schemat bazy danych jest również dostępny na GitHub.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. count(*) i count(nazwa_kolumny), jaka jest różnica?

  2. BŁĄD 2003 (HY000):Nie można połączyć się z serwerem MySQL na „127.0.0.1” (111)

  3. Błąd krytyczny:wywołanie niezdefiniowanej funkcji mysqli_result()

  4. Czy jest jakiś powód, aby martwić się o kolejność kolumn w tabeli?

  5. SQL - Jak transponować?