Tutorial ini memberikan langkah-langkah lengkap untuk merancang skema database Sistem Jaringan Sosial untuk mengelola pengguna, teman, pengikut, grup, dan pesan.
Diagram Hubungan Entitas atau desain basis data visual ditunjukkan di bawah ini.
Basis Data Sistem Jaringan Sosial
Anda juga dapat mengunjungi tutorial populer termasuk Cara Menginstal MySQL 8 di Ubuntu 20.04 LTS, Cara Menginstal MySQL 8 di Windows, Cara Menginstal MySQL Workbench Di Ubuntu, Cara Menginstal MySQL 8 Dengan Workbench Di Windows 10, Database RBAC di MySql, Database Blog di MySql, Database Kuis di MySQL, Database Poll &Survey di MySQL, Database Keranjang Belanja Online di MySQL, Database Inventory di MySQL, dan Pelajari Query SQL Dasar Di MySQL.
Database Sistem Jaringan Sosial
Langkah pertama adalah membuat Database Sistem Jaringan Sosial. Itu dapat dibuat menggunakan kueri seperti yang ditunjukkan di bawah ini.
CREATE SCHEMA `sns` 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. 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 kata sandi biasa atau terenkripsi. |
Terdaftar Di | Kolom ini dapat digunakan untuk menghitung umur pengguna dengan aplikasi tersebut. |
Login Terakhir | Ini dapat digunakan untuk mengidentifikasi login terakhir pengguna. |
Pengantar | Pengenalan singkat tentang Pengguna. |
Profil | Detail pengguna. |
Tabel Pengguna dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`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,
`username` 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_username` (`username` ASC),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );
Tabel Teman Pengguna
Di bagian ini, kita akan mendesain Tabel User Friend untuk menyimpan teman-teman pengguna. Status teman dapat digunakan untuk melacak status persahabatan dan jenis dapat digunakan untuk menentukan jenis persahabatan. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Teman Pengguna.
Id | Id unik untuk mengidentifikasi persahabatan. |
Id Sumber | ID pengguna untuk mengidentifikasi pengguna yang memulai pertemanan. |
Id Target | Id pengguna teman. |
Ketik | Tipe untuk mengklasifikasikan teman. Bisa Sekolah, Perguruan Tinggi, atau Kenalan. |
Status | Statusnya bisa Baru, Ditolak, atau Aktif. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat permintaan pertemanan dimulai. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat permintaan pertemanan diperbarui. |
Catatan | Ini menyimpan catatan khusus untuk persahabatan. |
Tabel User Friend dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`user_friend` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`notes` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_friend_source` (`sourceId` ASC),
CONSTRAINT `fk_friend_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`user_friend`
ADD INDEX `idx_friend_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_friend`
ADD CONSTRAINT `fk_friend_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `sns`.`user_friend` ADD UNIQUE `uq_friend`(`sourceId`, `targetId`);
Tabel Pengikut Pengguna
Di bagian ini, kami akan mendesain Tabel Pengikut Pengguna untuk menyimpan pengikut pengguna. Jenis pengikut dapat digunakan untuk menentukan jenis pengikut antara Suka, Tidak Suka, atau Ikuti. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pengikut Pengguna.
Id | Id unik untuk mengidentifikasi pengikut. |
Id Sumber | ID pengguna untuk mengidentifikasi pengguna pengikut. |
Id Target | ID pengguna untuk mengidentifikasi pengguna berikut. |
Ketik | Jenis untuk mengklasifikasikan pengikut. Itu bisa berupa Suka, Tidak Suka, atau Ikuti. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat pengikut dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu di mana pengikut diperbarui. |
Tabel Pengikut Pengguna dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`user_follower` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_ufollower_source` (`sourceId` ASC),
CONSTRAINT `fk_ufollower_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`user_follower`
ADD INDEX `idx_ufollower_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_follower`
ADD CONSTRAINT `fk_ufollower_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `sns`.`user_follower` ADD UNIQUE `uq_ufollower`(`sourceId`, `targetId`, `type`);
Tabel Pesan Pengguna
Di bagian ini, kita akan mendesain Tabel Pesan Pengguna untuk menyimpan pesan obrolan pengguna. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pesan Pengguna.
Id | Id unik untuk mengidentifikasi pesan. |
Id Sumber | ID pengguna untuk mengidentifikasi pengirim. |
Id Target | ID pengguna untuk mengidentifikasi penerima. |
Pesan | Badan pesan. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat pesan dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat pesan diperbarui. |
Tabel Pesan Pengguna dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`user_message` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_umessage_source` (`sourceId` ASC),
CONSTRAINT `fk_umessage_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`user_message`
ADD INDEX `idx_umessage_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_message`
ADD CONSTRAINT `fk_umessage_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabel Posting Pengguna
Di bagian ini, kita akan mendesain Tabel Posting Pengguna untuk menyimpan posting pengguna. Pengirim mungkin diminta untuk mengizinkan pengguna lain dengan izin yang sesuai untuk memposting di dinding pengguna. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Posting Pengguna.
Id | Id unik untuk mengidentifikasi postingan. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang sesuai. |
Id Pengirim | Id pengirim untuk mengidentifikasi pengirim yang sesuai. |
Pesan | Badan pesan. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat postingan dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat postingan diperbarui. |
Tabel Posting Pengguna dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`user_post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`senderId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_upost_user` (`userId` ASC),
CONSTRAINT `fk_upost_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`user_post`
ADD INDEX `idx_upost_sender` (`senderId` ASC);
ALTER TABLE `sns`.`user_post`
ADD CONSTRAINT `fk_upost_sender`
FOREIGN KEY (`senderId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabel Grup
Di bagian ini, kita akan mendesain Tabel Grup untuk menyimpan data grup. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Grup.
Id | Id unik untuk mengidentifikasi grup. |
Dibuat Oleh | ID pengguna untuk mengidentifikasi pengguna yang mendaftarkan grup. |
Diperbarui Oleh | ID pengguna untuk mengidentifikasi pengguna yang memperbarui grup. |
Judul | Judul grup. |
Judul Meta | Judul meta yang akan digunakan untuk judul browser dan tujuan SEO. |
Siput | Siput untuk membentuk URL unik. |
Ringkasan | Ringkasan untuk menyebutkan sorotan utama. |
Status | Status grup bisa Baru, Disetujui, Aktif, atau Diblokir. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat grup dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat grup diperbarui. |
Profil | Kolom yang digunakan untuk menyimpan detail profil grup. |
Konten | Kolom yang digunakan untuk menyimpan detail tambahan grup. |
Ini menggunakan status kolom untuk melacak status grup. Status dapat berupa Baru, Disetujui, Aktif, atau Diblokir. Tabel Grup dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `sns`.`group` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_group_creator` (`createdBy` ASC),
CONSTRAINT `fk_group_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`group`
ADD INDEX `idx_group_modifier` (`updatedBy` ASC);
ALTER TABLE `sns`.`group`
ADD CONSTRAINT `fk_group_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Meta Grup
Tabel Meta Grup dapat digunakan untuk menyimpan informasi tambahan tentang grup termasuk URL spanduk grup, dll. Yang disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Meta Grup.
Id | Id unik untuk mengidentifikasi meta grup. |
Id Grup | Id grup untuk mengidentifikasi grup induk. |
Kunci | Kunci yang mengidentifikasi meta. |
Konten | Kolom yang digunakan untuk menyimpan metadata grup. |
Tabel Meta Grup dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `sns`.`group_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_group` (`groupId` ASC),
UNIQUE INDEX `uq_meta_group` (`groupId` ASC, `key` ASC),
CONSTRAINT `fk_meta_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Tabel Anggota Grup
Di bagian ini, kami akan mendesain Tabel Anggota Grup untuk menyimpan anggota kelompok. Status anggota dapat digunakan untuk melacak status keanggotaan dan peran anggota dapat digunakan untuk mengidentifikasi hak istimewa anggota. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Anggota Grup.
Id | Id unik untuk mengidentifikasi keanggotaan. |
Id Grup | Id grup untuk mengidentifikasi grup yang sesuai. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang sesuai. |
Id Peran | Peran untuk memeriksa hak pengguna. |
Status | Statusnya bisa Baru, Ditolak, Aktif, atau Diblokir. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat permintaan anggota dimulai. |
Diperbarui Pada | Menyimpan tanggal dan waktu pembaruan anggota. |
Catatan | Ini menyimpan catatan khusus untuk keanggotaan. |
Tabel Anggota Grup dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`group_member` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`notes` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_member_group` (`groupId` ASC),
CONSTRAINT `fk_member_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`group_member`
ADD INDEX `idx_member_user` (`userId` ASC);
ALTER TABLE `sns`.`group_member`
ADD CONSTRAINT `fk_member_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `sns`.`group_member` ADD UNIQUE `uq_friend`(`groupId`, `userId`);
Tabel Pengikut Grup
Di bagian ini, kami akan mendesain Tabel Pengikut Grup untuk menyimpan pengikut grup. Jenis pengikut dapat berupa Suka, Tidak Suka, atau Ikuti. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pengikut Grup.
Id | Id unik untuk mengidentifikasi pengikut. |
Id Grup | Id grup untuk mengidentifikasi grup yang sesuai. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang sesuai. |
Ketik | Jenis pengikut dapat berupa Suka, Tidak Suka, atau Ikuti. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat pengikut dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu di mana pengikut diperbarui. |
Tabel Pengikut Grup dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`group_follower` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gfollower_group` (`groupId` ASC),
CONSTRAINT `fk_gfollower_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`group_follower`
ADD INDEX `idx_gfollower_user` (`userId` ASC);
ALTER TABLE `sns`.`group_follower`
ADD CONSTRAINT `fk_gfollower_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `sns`.`group_follower` ADD UNIQUE `uq_friend`(`groupId`, `userId`, `type`);
Tabel Pesan Grup
Di bagian ini, kita akan mendesain Tabel Pesan Grup untuk menyimpan pesan obrolan grup. Disebutkan di bawah ini adalah deskripsi dari semua kolom dari Tabel Pesan Grup.
Id | Id unik untuk mengidentifikasi pesan. |
Id Grup | Id grup untuk mengidentifikasi grup yang sesuai. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang sesuai. |
Pesan | Badan pesan. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat pesan dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat pesan diperbarui. |
Tabel Pesan Grup dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`group_message` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gmessage_group` (`groupId` ASC),
CONSTRAINT `fk_gmessage_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`group_message`
ADD INDEX `idx_gmessage_user` (`userId` ASC);
ALTER TABLE `sns`.`group_message`
ADD CONSTRAINT `fk_gmessage_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabel Posting Grup
Di bagian ini, kita akan mendesain Tabel Posting Grup untuk menyimpan postingan grup. Anggota yang memiliki peran yang sesuai dapat memposting ke grup. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Posting Grup.
Id | Id unik untuk mengidentifikasi postingan. |
Id Grup | Id grup untuk mengidentifikasi grup yang sesuai. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang sesuai. |
Pesan | Badan pesan. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat postingan dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat postingan diperbarui. |
Tabel Posting Grup dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `sns`.`group_post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gpost_group` (`groupId` ASC),
CONSTRAINT `fk_gpost_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `sns`.`group_post`
ADD INDEX `idx_gpost_user` (`userId` ASC);
ALTER TABLE `sns`.`group_post`
ADD CONSTRAINT `fk_gpost_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Ringkasan
Dalam tutorial ini, kita telah membahas desain database Sistem Jaringan Sosial untuk mengelola pengguna, teman, pengikut, pesan, dan grup.
Anda dapat mengirimkan komentar Anda untuk bergabung dalam diskusi. Anda mungkin juga tertarik untuk mendesain database aplikasi Blog, Keranjang Belanja, dan Poll &Survey. Skema database lengkap juga tersedia di GitHub.