Tugas Pertemuan 14 PPL - Desain Database
Nama | Akmal Sulthon Fathulloh |
---|---|
NRP | 5025211047 |
Kelas | PPL - A |
Desain Basis Data adalah kumpulan proses yang memfasilitasi perancangan, pengembangan, implementasi, dan pemeliharaan sistem manajemen data perusahaan. Basis data yang dirancang dengan benar mudah dipelihara, meningkatkan konsistensi data, dan hemat biaya dalam hal ruang penyimpanan disk. Desainer database memutuskan bagaimana elemen data berkorelasi dan data apa yang harus disimpan. Pada pertemuan ke-14 ini, kita diminta untuk membuat database untuk aplikasi social media foto sharing - Instagram
Desain Basis Data
Basis data Instagram harus dirancang untuk menyimpan data pengguna, konten, interaksi pengguna, dan informasi lainnya. Berikut adalah beberapa tabel yang mungkin diperlukan dalam desain basis data Instagram:
Tabel users
Tabel users berisi informasi pengguna seperti nama pengguna, email, kata sandi, nama lengkap, biografi, dan gambar profil. Tabel ini juga mencatat waktu pembuatan akun dan pembaruan terakhir.
Kolom | Tipe Data | Deskripsi |
---|---|---|
user_id | INT | Primary key, auto-increment |
username | VARCHAR | Nama pengguna, unik |
VARCHAR | Email pengguna, unik | |
password | VARCHAR | Kata sandi pengguna, terenkripsi |
full_name | VARCHAR | Nama lengkap pengguna |
bio | VARCHAR | Biografi pengguna |
profile_image | VARCHAR | URL gambar profil |
created_at | TIMESTAMP | Waktu pembuatan akun |
updated_at | TIMESTAMP | Waktu pembaruan terakhir |
Tabel posts
Tabel posts berisi informasi postingan pengguna seperti gambar, deskripsi, lokasi, dan waktu unggah. Tabel ini juga mencatat waktu pembaruan terakhir.
Kolom | Tipe Data | Deskripsi |
---|---|---|
post_id | INT | Primary key, auto-increment |
user_id | INT | Foreign key ke tabel users |
image_url | VARCHAR | URL gambar postingan |
caption | TEXT | Deskripsi postingan |
location | VARCHAR | Lokasi postingan |
created_at | TIMESTAMP | Waktu unggah postingan |
updated_at | TIMESTAMP | Waktu pembaruan terakhir |
Tabel comments
Tabel comments berisi komentar pengguna pada postingan, termasuk ID postingan, ID pengguna, isi komentar, dan waktu pembuatan komentar. Tabel ini juga mencatat waktu pembaruan terakhir.
Kolom | Tipe Data | Deskripsi |
---|---|---|
comment_id | INT | Primary key, auto-increment |
post_id | INT | Foreign key ke tabel posts |
user_id | INT | Foreign key ke tabel users |
comment | TEXT | Isi komentar |
created_at | TIMESTAMP | Waktu pembuatan komentar |
updated_at | TIMESTAMP | Waktu pembaruan terakhir |
Tabel likes
Tabel likes berisi informasi like yang diberikan oleh pengguna pada postingan. Tabel ini mencatat ID postingan, ID pengguna, dan waktu like diberikan.
Kolom | Tipe Data | Deskripsi |
---|---|---|
like_id | INT | Primary key, auto-increment |
post_id | INT | Foreign key ke tabel posts |
user_id | INT | Foreign key ke tabel users |
created_at | TIMESTAMP | Waktu like diberikan |
Tabel follows
Tabel follows berisi informasi pengguna yang diikuti oleh pengguna lain. Tabel ini mencatat ID pengikut, ID yang diikuti, dan waktu mulai mengikuti.
Kolom | Tipe Data | Deskripsi |
---|---|---|
follow_id | INT | Primary key, auto-increment |
follower_id | INT | Foreign key ke tabel users (pengikut) |
following_id | INT | Foreign key ke tabel users (yang diikuti) |
created_at | TIMESTAMP | Waktu pengguna mulai mengikuti pengguna lain |
Tabel messages
Tabel messages berisi pesan yang dikirim oleh pengguna melalui fitur Direct Messaging. Tabel ini mencatat ID pesan, ID pengirim, ID penerima, isi pesan, dan waktu pengiriman pesan.
Kolom | Tipe Data | Deskripsi |
---|---|---|
message_id | INT | Primary key, auto-increment |
sender_id | INT | Foreign key ke tabel users (pengirim) |
receiver_id | INT | Foreign key ke tabel users (penerima) |
content | TEXT | Isi pesan |
created_at | TIMESTAMP | Waktu pengiriman pesan |
Tabel notifications
Tabel notifications berisi notifikasi yang diterima oleh pengguna, seperti like, komentar, atau follow. Tabel ini mencatat ID notifikasi, ID pengguna, tipe notifikasi, ID terkait, waktu notifikasi dibuat, dan waktu notifikasi dibaca.
Kolom | Tipe Data | Deskripsi |
---|---|---|
notification_id | INT | Primary key, auto-increment |
user_id | INT | Foreign key ke tabel users |
type | VARCHAR | Tipe notifikasi (like, komentar, follow, dll.) |
related_id | INT | ID sumber notifikasi (post_id, user_id, dll.) |
created_at | TIMESTAMP | Waktu notifikasi dibuat |
read_at | TIMESTAMP | Waktu notifikasi dibaca |
Desain basis data di atas adalah kerangka utama basis data dari Instagram yang bisa dikembangkan lebih lanjut sesuai kebutuhan aplikasi. Misalnya, kita bisa menambahkan tabel untuk fitur tambahan seperti cerita (stories), tagar (hashtags), atau penyimpanan media tambahan (video, IGTV).
Berikut adalah implementasi basis data Instagram menggunakan MySQL:
-- Create the users table | |
CREATE TABLE users ( | |
user_id INT AUTO_INCREMENT PRIMARY KEY, | |
username VARCHAR(50) NOT NULL UNIQUE, | |
email VARCHAR(100) NOT NULL UNIQUE, | |
password VARCHAR(255) NOT NULL, | |
full_name VARCHAR(100), | |
bio TEXT, | |
profile_image VARCHAR(255), | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | |
); | |
-- Create the posts table | |
CREATE TABLE posts ( | |
post_id INT AUTO_INCREMENT PRIMARY KEY, | |
user_id INT NOT NULL, | |
image_url VARCHAR(255) NOT NULL, | |
caption TEXT, | |
location VARCHAR(255), | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
FOREIGN KEY (user_id) REFERENCES users(user_id) | |
); | |
-- Create the comments table | |
CREATE TABLE comments ( | |
comment_id INT AUTO_INCREMENT PRIMARY KEY, | |
post_id INT NOT NULL, | |
user_id INT NOT NULL, | |
content TEXT NOT NULL, | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
FOREIGN KEY (post_id) REFERENCES posts(post_id), | |
FOREIGN KEY (user_id) REFERENCES users(user_id) | |
); | |
-- Create the likes table | |
CREATE TABLE likes ( | |
like_id INT AUTO_INCREMENT PRIMARY KEY, | |
post_id INT NOT NULL, | |
user_id INT NOT NULL, | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
FOREIGN KEY (post_id) REFERENCES posts(post_id), | |
FOREIGN KEY (user_id) REFERENCES users(user_id) | |
); | |
-- Create the follows table | |
CREATE TABLE follows ( | |
follow_id INT AUTO_INCREMENT PRIMARY KEY, | |
follower_id INT NOT NULL, | |
following_id INT NOT NULL, | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
FOREIGN KEY (follower_id) REFERENCES users(user_id), | |
FOREIGN KEY (following_id) REFERENCES users(user_id) | |
); | |
-- Create the messages table | |
CREATE TABLE messages ( | |
message_id INT AUTO_INCREMENT PRIMARY KEY, | |
sender_id INT NOT NULL, | |
receiver_id INT NOT NULL, | |
content TEXT NOT NULL, | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
FOREIGN KEY (sender_id) REFERENCES users(user_id), | |
FOREIGN KEY (receiver_id) REFERENCES users(user_id) | |
); | |
-- Create the notifications table | |
CREATE TABLE notifications ( | |
notification_id INT AUTO_INCREMENT PRIMARY KEY, | |
user_id INT NOT NULL, | |
type VARCHAR(50) NOT NULL, | |
related_id INT, | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
read_at TIMESTAMP, | |
FOREIGN KEY (user_id) REFERENCES users(user_id) | |
); |
Komentar
Posting Komentar