Pertemuan 14 - Desain Database
Nama: Clarissa Luna Maheswari
NRP: 5025211003
Tugas: Membuat Database untuk aplikasi social media foto sharing - Instagram
Penjelasan Diagram proses database
1. Spesifikasi Kebutuhan (Requirements Specification)
- Mengidentifikasi kebutuhan utama aplikasi: pengguna harus bisa membuat akun, mengunggah foto, memberikan komentar, menyukai foto, mengikuti pengguna lain, dan menerima notifikasi.
- Menentukan volume data yang diharapkan dan kriteria kinerja seperti kecepatan akses data dan skalabilitas.
2. Perencanaan Aplikasi (Application Planning)
- Merencanakan arsitektur aplikasi termasuk frontend, backend, dan database.
- Menyusun jadwal pengembangan dan alokasi sumber daya, seperti tim pengembang, server, dan teknologi yang akan digunakan (misalnya, PostgreSQL untuk database).
3. Desain Fondasi Database (Foundation Database Design)
- Menentukan entitas utama: Pengguna, Foto, Komentar, Suka, Mengikuti, Notifikasi, Hashtag, FotoHashtag, Cerita, PesanLangsung, Geotagging, Save, Koleksi, KoleksiFoto, Aktivitas, Bookmark, Album, AlbumFoto, Blokir, dan Keluhan.
- Mendefinisikan atribut utama untuk setiap entitas (misalnya, nama_pengguna, email, kata_sandi untuk tabel Pengguna).
4. Desain Konseptual Database (Conceptual Database Design)
- Membuat model ERD (Entity-Relationship Diagram) yang menunjukkan semua entitas dan hubungan antar entitas.
- Contoh:
- Pengguna mengunggah Foto.
- Pengguna memberikan Komentar pada Foto.
- Pengguna menyukai Foto.
- Pengguna mengikuti Pengguna lain.
5. Desain Logis Database (Logical Database Design)
- Mengembangkan model logis dengan tabel-tabel yang telah diidentifikasi dan memastikan bahwa tabel sudah dinormalisasi.
- Menentukan kunci primer dan kunci asing untuk menjaga integritas data.
- Contoh:
- id_pengguna sebagai kunci primer di tabel Pengguna.
- id_pengguna sebagai kunci asing di tabel Foto, menghubungkan pengguna dengan foto yang diunggah.
6. Desain Fisik Database (Physical Database Design)
- Menentukan cara penyimpanan data fisik di database.
- Membuat indeks untuk meningkatkan kinerja pencarian dan akses data.
- Menentukan partisi tabel jika diperlukan untuk menangani volume data yang besar.
- Contoh:
- Membuat indeks pada kolom nama_pengguna di tabel Pengguna untuk mempercepat pencarian pengguna.
7. Integrasi Skema (Schema Integration)
- Mengintegrasikan desain skema database dengan komponen aplikasi lainnya.
- Menguji interoperabilitas dan konsistensi data antara database dan aplikasi.
8. Implementasi Database (Database Implementation)
- Membuat tabel dan relasinya berdasarkan desain logis dan fisik yang telah dibuat. Pembuatan tabel disajikan di poin SQL Code (scroll ke bawah, terima kasih ^^)
9. Desain Aplikasi (Application Design)
- Mendesain detail aplikasi termasuk antarmuka pengguna (UI) dan logika bisnis.
- Menentukan bagaimana aplikasi akan berinteraksi dengan database (misalnya, API untuk CRUD operasi pada data pengguna dan foto).
10. Integrasi Aplikasi (Application Integration)
- Mengintegrasikan komponen frontend dan backend dengan database.
- Menguji interaksi antara aplikasi dan database untuk memastikan semua fungsionalitas berjalan dengan baik.
11. Implementasi Aplikasi (Application Implementation)
- Mengimplementasikan aplikasi secara keseluruhan dengan menggabungkan komponen frontend, backend, dan database.
- Contoh: Pengguna mendaftar melalui UI, data dikirim ke backend, backend menyimpan data di tabel Pengguna.
12. Pengujian (Testing)
- Melakukan pengujian menyeluruh untuk memastikan tidak ada bug dan semua fungsionalitas berjalan sesuai harapan.
- Pengujian meliputi uji unit, uji integrasi, uji sistem, dan uji penerimaan pengguna.
13. Pemeliharaan (Maintenance)
- Setelah aplikasi diluncurkan, dilakukan pemeliharaan berkelanjutan untuk memastikan sistem tetap berfungsi dengan baik.
- Pemeliharaan mencakup perbaikan bug, pembaruan sistem, dan penyesuaian berdasarkan umpan balik pengguna.
ERD
untuk lebih jelasnya dapat membuka tautan: https://www.blocksandarrows.com/editor/KivGU3yf3DSJog48
Sql Code
Penjelasan tabel
Skrip SQL untuk Membuat Tabel-Tabel
-- Tabel Pengguna
CREATE TABLE Pengguna (
id_pengguna SERIAL PRIMARY KEY,
nama_pengguna VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
kata_sandi VARCHAR(255) NOT NULL,
nama_lengkap VARCHAR(100),
bio TEXT,
url_website VARCHAR(255),
tanggal_lahir DATE,
jenis_kelamin VARCHAR(10),
foto_profil VARCHAR(255),
nomor_telepon VARCHAR(15),
tanggal_dibuat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
terakhir_login TIMESTAMP
);
-- Tabel Foto
CREATE TABLE Foto (
id_foto SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
url_foto VARCHAR(255) NOT NULL,
keterangan TEXT,
jumlah_suka INT DEFAULT 0,
jumlah_komentar INT DEFAULT 0,
waktu_upload TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel Komentar
CREATE TABLE Komentar (
id_komentar SERIAL PRIMARY KEY,
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
isi_komentar TEXT NOT NULL,
waktu_komentar TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel Suka
CREATE TABLE Suka (
id_suka SERIAL PRIMARY KEY,
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
waktu_suka TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(id_foto, id_pengguna)
);
-- Tabel Mengikuti
CREATE TABLE Mengikuti (
id_pengikut INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
id_diikuti INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
waktu_diikuti TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id_pengikut, id_diikuti)
);
-- Tabel Notifikasi
CREATE TABLE Notifikasi (
id_notifikasi SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
tipe_notifikasi VARCHAR(50),
pesan TEXT,
sudah_dibaca BOOLEAN DEFAULT FALSE,
waktu_notifikasi TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel Hashtag
CREATE TABLE Hashtag (
id_hashtag SERIAL PRIMARY KEY,
nama_hashtag VARCHAR(50) UNIQUE NOT NULL
);
-- Tabel FotoHashtag
CREATE TABLE FotoHashtag (
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
id_hashtag INT REFERENCES Hashtag(id_hashtag) ON DELETE CASCADE,
PRIMARY KEY (id_foto, id_hashtag)
);
-- Tabel Cerita
CREATE TABLE Cerita (
id_cerita SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
url_cerita VARCHAR(255) NOT NULL,
waktu_upload TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
waktu_kedaluwarsa TIMESTAMP NOT NULL
);
-- Tabel Pesan
CREATE TABLE Pesan (
id_pesan SERIAL PRIMARY KEY,
id_pengirim INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
id_penerima INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
isi_pesan TEXT NOT NULL,
waktu_kirim TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel Geotagging
CREATE TABLE Geotagging (
id_geotagging SERIAL PRIMARY KEY,
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
latitude FLOAT NOT NULL,
longitude FLOAT NOT NULL,
nama_lokasi VARCHAR(255)
);
-- Tabel Save
CREATE TABLE Save (
id_save SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
waktu_save TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(id_pengguna, id_foto)
);
-- Tabel Koleksi
CREATE TABLE Koleksi (
id_koleksi SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
nama_koleksi VARCHAR(100),
deskripsi TEXT,
waktu_dibuat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel KoleksiFoto
CREATE TABLE KoleksiFoto (
id_koleksi INT REFERENCES Koleksi(id_koleksi) ON DELETE CASCADE,
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
PRIMARY KEY (id_koleksi, id_foto)
);
-- Tabel Aktivitas
CREATE TABLE Aktivitas (
id_aktivitas SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
tipe_aktivitas VARCHAR(50),
detail_aktivitas TEXT,
waktu_aktivitas TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel Bookmark
CREATE TABLE Bookmark (
id_bookmark SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
waktu_bookmark TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(id_pengguna, id_foto)
);
-- Tabel Story
CREATE TABLE Story (
id_story SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
url_story VARCHAR(255) NOT NULL,
waktu_upload TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
waktu_kedaluwarsa TIMESTAMP NOT NULL
);
-- Tabel PesanLangsung
CREATE TABLE PesanLangsung (
id_pesan SERIAL PRIMARY KEY,
id_pengirim INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
id_penerima INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
isi_pesan TEXT NOT NULL,
waktu_kirim TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel Geotag
CREATE TABLE Geotag (
id_geotag SERIAL PRIMARY KEY,
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
latitude FLOAT NOT NULL,
longitude FLOAT NOT NULL,
nama_lokasi VARCHAR(255)
);
-- Tabel Album
CREATE TABLE Album (
id_album SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
nama_album VARCHAR(100) NOT NULL,
deskripsi TEXT,
waktu_dibuat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel AlbumFoto
CREATE TABLE AlbumFoto (
id_album INT REFERENCES Album(id_album) ON DELETE CASCADE,
id_foto INT REFERENCES Foto(id_foto) ON DELETE CASCADE,
PRIMARY KEY (id_album, id_foto)
);
-- Tabel Blokir
CREATE TABLE Blokir (
id_blokir SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
id_diblokir INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
waktu_blokir TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(id_pengguna, id_diblokir)
);
-- Tabel Keluhan
CREATE TABLE Keluhan (
id_keluhan SERIAL PRIMARY KEY,
id_pengguna INT REFERENCES Pengguna(id_pengguna) ON DELETE CASCADE,
tipe_keluhan VARCHAR(50),
isi_keluhan TEXT,
waktu_keluhan TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Comments
Post a Comment