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 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.