Hướng dẫn này cung cấp các bước hoàn chỉnh để thiết kế lược đồ cơ sở dữ liệu để quản lý người dùng, bài đăng trên blog, dữ liệu meta bài đăng, nhận xét bài đăng, danh mục bài đăng và thẻ bài đăng. Nó có thể được sử dụng nhiều hơn nữa để phát triển một trang web viết blog hoặc ứng dụng di động.
Sơ đồ mối quan hệ thực thể hoặc thiết kế cơ sở dữ liệu trực quan được hiển thị bên dưới.
Hình 1
Ghi chú :Để giữ cho giản đồ cơ sở dữ liệu đơn giản và để phát triển một sản phẩm khả thi tối thiểu, nó không bao gồm các tùy chọn nâng cao hơn như lập phiên bản và xem lại các bài đăng. Nó cung cấp các tùy chọn để xem xét các nhận xét của tác giả bài đăng để tránh gửi thư rác để chỉ những nhận xét hợp pháp mới được xuất bản và hiển thị trên Trang Bài đăng.
Bạn cũng có thể xem các hướng dẫn phổ biến bao gồm Cách cài đặt MySQL 8 trên Ubuntu, Cách cài đặt MySQL 8 trên Windows, Cơ sở dữ liệu RBAC trong MySql, Cơ sở dữ liệu thăm dò và khảo sát trong MySql, Tìm hiểu truy vấn SQL cơ bản trong MySQL.
Cơ sở dữ liệu blog
Bước đầu tiên là tạo Cơ sở dữ liệu blog. Nó có thể được tạo bằng cách sử dụng truy vấn như hình dưới đây.
CREATE SCHEMA `blog` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Tôi đã sử dụng bộ ký tự utf8mb4 để hỗ trợ nhiều loại ký tự.
Bảng Người dùng
Trong phần này, chúng tôi sẽ thiết kế Bảng người dùng để lưu trữ thông tin người dùng của tất cả các tác giả bài đăng. Cùng một bảng có thể được sử dụng để liên hệ các tác giả bài đăng để tất cả các tác giả có thể quản lý bài đăng của riêng họ. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Người dùng.
Id | Id duy nhất để xác định người dùng. |
Tên | Tên của người dùng. |
Tên đệm | Tên đệm của người dùng. |
Họ | Họ của người dùng. |
Di động | Số điện thoại di động của người dùng. Nó có thể được sử dụng cho mục đích đăng nhập và đăng ký. |
Email của người dùng. Nó có thể được sử dụng cho mục đích đăng nhập và đăng ký. | |
Băm mật khẩu | Mật khẩu băm được tạo bởi thuật toán thích hợp. Chúng tôi phải tránh lưu trữ mật khẩu đơn giản. |
Đã đăng ký tại | Cột này có thể được sử dụng để tính toán tuổi thọ của người dùng với blog. |
Lần Đăng nhập Cuối cùng | Nó có thể được sử dụng để xác định thông tin đăng nhập cuối cùng của người dùng. |
Giới thiệu | Phần giới thiệu ngắn gọn về Tác giả được hiển thị trên mỗi bài đăng. |
Hồ sơ | Thông tin chi tiết về tác giả sẽ được hiển thị trên Trang tác giả. |
Bảng Người dùng với các ràng buộc thích hợp được hiển thị bên dưới.
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) );
Bảng Đăng
Trong phần này, chúng tôi sẽ thiết kế Bảng đăng để lưu trữ dữ liệu bài đăng. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Đăng.
Id | Id duy nhất để xác định bài đăng. |
Id tác giả | Id tác giả để xác định tác giả bài đăng. |
Id gốc | Id chính để xác định bài đăng chính. Nó có thể được sử dụng để tạo bảng nội dung của bài đăng chính của loạt bài. |
Tiêu đề | Tiêu đề bài đăng sẽ được hiển thị trên Trang Bài đăng và các danh sách. |
Tiêu đề meta | Tiêu đề meta được sử dụng cho tiêu đề trình duyệt và SEO. |
Slug | Slug của bài đăng để tạo thành URL. |
Tóm tắt | Bản tóm tắt của bài đăng để đề cập đến những điểm nổi bật chính. |
Đã xuất bản | Nó có thể được sử dụng để xác định liệu bài đăng có được công bố công khai hay không. |
Được tạo lúc | Nó lưu trữ ngày và giờ mà bài viết được tạo. |
Cập nhật lúc | Nó lưu trữ ngày và giờ mà bài đăng được cập nhật. |
Được xuất bản tại | Nó lưu trữ ngày và giờ mà bài đăng được xuất bản. |
Nội dung | Cột được sử dụng để lưu trữ dữ liệu bài đăng. |
Bảng Bài đăng với các ràng buộc thích hợp được hiển thị bên dưới.
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;
Meta bài đăng
Bảng meta bài đăng có thể được sử dụng để lưu trữ thông tin bổ sung của một bài đăng bao gồm URL của biểu ngữ bài đăng, v.v. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng meta bài đăng.
Id | Id duy nhất để xác định meta bài đăng. |
Id bài đăng | Id bài đăng để xác định bài đăng chính. |
Phím | Chìa khóa xác định meta. |
Nội dung | Cột được sử dụng để lưu trữ dữ liệu bài đăng. |
Bảng Meta Bài đăng với các ràng buộc thích hợp được hiển thị bên dưới.
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;
Đăng nhận xét bảng
Trong phần này, chúng tôi sẽ thiết kế Bảng nhận xét của bài đăng để lưu trữ các bình luận bài viết. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Nhận xét Bài đăng.
Id | Id duy nhất để xác định nhận xét của bài đăng. |
Id bài đăng | Id bài đăng để xác định bài đăng chính. |
Id gốc | Id chính để xác định nhận xét chính. |
Tiêu đề | Tiêu đề nhận xét. |
Đã xuất bản | Nó có thể được sử dụng để xác định xem nhận xét có được công bố công khai hay không. |
Được tạo lúc | Nó lưu trữ ngày và giờ nhận xét được gửi. |
Được xuất bản tại | Nó lưu trữ ngày và giờ nhận xét được xuất bản. |
Nội dung | Cột được sử dụng để lưu trữ dữ liệu nhận xét. |
Bảng Nhận xét Bài đăng với các ràng buộc thích hợp được hiển thị bên dưới.
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;
Bảng danh mục và bảng danh mục bài đăng
Trong phần này, chúng tôi sẽ thiết kế Bảng danh mục và Bảng danh mục bài đăng để lưu trữ các danh mục bài đăng và ánh xạ của chúng. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Danh mục.
Id | Id duy nhất để xác định danh mục. |
Id gốc | Id chính để xác định danh mục chính. |
Tiêu đề | Tiêu đề danh mục. |
Tiêu đề meta | Tiêu đề meta được sử dụng cho tiêu đề trình duyệt và SEO. |
Slug | Slug danh mục để tạo URL. |
Nội dung | Cột được sử dụng để lưu trữ dữ liệu danh mục. |
Bảng Danh mục với các ràng buộc thích hợp như được hiển thị bên dưới.
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;
Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Danh mục Bài đăng.
Id bài đăng | Id bài đăng để xác định bài đăng. |
Id danh mục | Id danh mục để xác định danh mục. |
Bảng Danh mục Bài đăng với các ràng buộc thích hợp như được hiển thị bên dưới.
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);
Bảng thẻ và Bảng thẻ bài đăng
Tương tự như bảng danh mục và bài đăng, chúng tôi có thể thiết kế Bảng thẻ và Bảng thẻ bài đăng . Sự khác biệt chính giữa Danh mục và Thẻ được liệt kê bên dưới.
- Cột parentId không bắt buộc trong Bảng thẻ.
- Số lượng danh mục vẫn còn thấp vì chúng có thể được sử dụng để tạo Menu Chính cho mục đích điều hướng. Các thẻ có thể nhiều hơn so với các danh mục.
- Cả danh mục và thẻ đều có thể được sử dụng để liên kết các bài đăng.
- Người ta chỉ nên gán một vài danh mục cho một bài đăng trong khi số lượng thẻ có thể nhiều hơn.
Tóm tắt
Đây là cách chúng tôi có thể thiết kế Cơ sở dữ liệu blog để sử dụng như sự hình thành của các trang web và ứng dụng di động dựa trên Blog. Tương tự có thể được nâng cao hơn nữa để thêm các tùy chọn nâng cao hơn bao gồm video, thanh toán, đăng ký, v.v.
Bạn có thể gửi bình luận của mình để tham gia thảo luận. Bạn cũng có thể quan tâm đến việc thiết kế cơ sở dữ liệu của các ứng dụng Thăm dò &Khảo sát. Thiết kế RBAC có thể được sử dụng để triển khai Kiểm soát truy cập dựa trên vai trò.
Lược đồ cơ sở dữ liệu hoàn chỉnh cũng có sẵn trên GitHub.