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

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

Popular posts from this blog

Pertemuan 2: Prinsip Desain Software

ETS