Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Panduan Merancang Database Untuk Manajemen Blog Di MySQL

Tutorial ini memberikan langkah-langkah lengkap untuk merancang skema database untuk mengelola pengguna, posting blog, meta data posting, komentar posting, kategori posting, dan tag posting. Ini dapat digunakan lebih lanjut untuk mengembangkan situs web blog atau aplikasi seluler.

Diagram Hubungan Entitas atau desain basis data visual ditunjukkan di bawah ini.

Gambar 1

Catatan :Untuk menjaga agar skema basis data tetap sederhana dan untuk mengembangkan produk minimal yang layak, ini tidak mencakup opsi yang lebih canggih seperti membuat versi dan meninjau kiriman. Ini memberikan opsi untuk meninjau komentar oleh penulis posting untuk menghindari spam sehingga hanya komentar yang sah yang akan dipublikasikan dan ditampilkan di Halaman Postingan.

Anda juga dapat mengunjungi tutorial populer termasuk Cara Menginstal MySQL 8 di Ubuntu, Cara Menginstal MySQL 8 di Windows, Basis Data RBAC di MySql, Basis Data Poll dan Survei di MySql, Pelajari Kueri SQL Dasar Di MySQL.

Basis Data Blog

Langkah pertama adalah membuat Database Blog. Itu dapat dibuat menggunakan kueri seperti yang ditunjukkan di bawah ini.

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

Saya telah menggunakan set karakter utf8mb4 untuk mendukung berbagai karakter.

Tabel Pengguna

Di bagian ini, kita akan mendesain Tabel Pengguna untuk menyimpan informasi pengguna dari semua penulis posting. Tabel yang sama dapat digunakan untuk menghubungkan penulis posting sehingga semua penulis dapat mengelola posting mereka sendiri. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pengguna.

Id Id unik untuk mengidentifikasi pengguna.
Nama Depan Nama depan pengguna.
Nama Tengah Nama tengah pengguna.
Nama Belakang Nama belakang pengguna.
Seluler Nomor ponsel pengguna. Ini dapat digunakan untuk tujuan login dan registrasi.
Email Email pengguna. Ini dapat digunakan untuk tujuan login dan registrasi.
Hash Kata Sandi Hash kata sandi yang dihasilkan oleh algoritme yang sesuai. Kita harus menghindari penyimpanan sandi biasa.
Terdaftar Di Kolom ini dapat digunakan untuk menghitung umur pengguna dengan blog.
Login Terakhir Ini dapat digunakan untuk mengidentifikasi login terakhir pengguna.
Pengantar Pengenalan singkat tentang Penulis yang akan ditampilkan di setiap postingan.
Profil Detail penulis yang akan ditampilkan di Halaman Penulis.

Tabel Pengguna dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

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

Tabel Posting

Di bagian ini, kita akan mendesain Tabel Posting untuk menyimpan data posting. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Posting.

Id Id unik untuk mengidentifikasi postingan.
Id Penulis Id penulis untuk mengidentifikasi penulis postingan.
Id Induk Id induk untuk mengidentifikasi kiriman induk. Ini dapat digunakan untuk membentuk daftar isi posting induk dari seri.
Judul Judul postingan yang akan ditampilkan di Halaman Postingan dan daftarnya.
Judul Meta Judul meta yang akan digunakan untuk judul browser dan SEO.
Siput Siput pos untuk membentuk URL.
Ringkasan Ringkasan postingan untuk menyebutkan sorotan utama.
Diterbitkan Ini dapat digunakan untuk mengidentifikasi apakah pos tersedia untuk umum.
Dibuat Pada Ini menyimpan tanggal dan waktu saat postingan dibuat.
Diperbarui Pada Ini menyimpan tanggal dan waktu pembaruan postingan.
Diterbitkan Pada Menyimpan tanggal dan waktu publikasi postingan.
Konten Kolom yang digunakan untuk menyimpan data postingan.

Tabel Post dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

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 Posting

Tabel Meta Postingan dapat digunakan untuk menyimpan informasi tambahan dari sebuah postingan termasuk URL banner postingan dll. Di bawah ini adalah deskripsi dari semua kolom dari Tabel Meta Postingan.

Id Id unik untuk mengidentifikasi meta postingan.
Id Postingan Id postingan untuk mengidentifikasi postingan induk.
Kunci Kunci yang mengidentifikasi meta.
Konten Kolom yang digunakan untuk menyimpan data postingan.

Tabel Meta Post dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

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;

Posting Tabel Komentar

Di bagian ini, kita akan mendesain Tabel Posting Komentar untuk menyimpan komentar posting. Disebutkan di bawah ini adalah deskripsi dari semua kolom Post Comment Table.

Id Id unik untuk mengidentifikasi komentar kiriman.
Id Postingan Id postingan untuk mengidentifikasi postingan induk.
Id Induk Id induk untuk mengidentifikasi komentar induk.
Judul Judul komentar.
Diterbitkan Ini dapat digunakan untuk mengidentifikasi apakah komentar tersedia untuk umum.
Dibuat Pada Ini menyimpan tanggal dan waktu saat komentar dikirimkan.
Diterbitkan Pada Ini menyimpan tanggal dan waktu saat komentar diterbitkan.
Konten Kolom yang digunakan untuk menyimpan data komentar.

Tabel Post Comment dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

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;

Tabel Kategori dan Tabel Kategori Posting

Di bagian ini, kita akan mendesain Tabel Kategori dan Tabel Kategori Pos untuk menyimpan kategori posting dan pemetaannya. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Kategori.

Id Id unik untuk mengidentifikasi kategori.
Id Induk Id induk untuk mengidentifikasi kategori induk.
Judul Judul kategori.
Judul Meta Judul meta yang akan digunakan untuk judul browser dan SEO.
Siput Slug kategori untuk membentuk URL.
Konten Kolom yang digunakan untuk menyimpan data kategori.

Tabel Kategori dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

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;

Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Kategori Postingan.

Id Postingan Id postingan untuk mengidentifikasi postingan.
Id Kategori Id kategori untuk mengidentifikasi kategori.

Tabel Kategori Postingan dengan batasan yang sesuai adalah seperti di bawah ini.

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

Tabel Tag dan Tabel Tag Pos

Mirip dengan tabel kategori dan kategori posting, kita dapat mendesain Tabel Tag dan Tabel Tag Pos . Perbedaan utama antara Kategori dan Tag tercantum di bawah ini.

  • Kolom parentId tidak diperlukan di Tabel Tag.
  • Jumlah kategori tetap rendah karena ini dapat digunakan untuk membentuk Menu Utama untuk tujuan navigasi. Tag bisa lebih banyak dibandingkan dengan kategori.
  • Kategori dan tag dapat digunakan untuk menghubungkan postingan.
  • Seseorang harus menetapkan hanya beberapa kategori untuk sebuah postingan sedangkan jumlah tag bisa lebih banyak.

Ringkasan

Demikian kami dapat merancang Database Blog untuk digunakan sebagai pembentukan website berbasis Blog dan aplikasi mobile. Hal yang sama dapat lebih ditingkatkan untuk menambahkan lebih banyak opsi lanjutan termasuk video, pembayaran, langganan, dll.

Anda dapat mengirimkan komentar Anda untuk bergabung dalam diskusi. Anda mungkin juga tertarik untuk mendesain database aplikasi Poll &Survey. Desain RBAC dapat digunakan untuk implementasi Kontrol Akses Berbasis Peran.

Skema database lengkap juga tersedia di 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. Membuat Aplikasi Web Dari Awal Menggunakan Python Flask dan MySQL:Bagian 3

  2. Menggunakan Oracle JDeveloper dengan Layanan Database MySQL di Oracle Cloud Platform, Bagian 2

  3. Load Balancing Sadar Basis Data:Cara Bermigrasi dari HAProxy ke ProxySQL

  4. Pemantauan MySQL yang Efektif Dengan Dasbor SCUMM:Bagian 3

  5. Cara Menambahkan Pemisah ke String Gabungan di MySQL – CONCAT_WS()