PPL - Tugas 10 Desain Database

Revanantyo Dwigantara

5025211113

PPL A

Desain Basis Data merupakan serangkaian proses yang membantu dalam merancang, mengembangkan, menerapkan, dan memelihara sistem manajemen data perusahaan. Basis data yang dirancang dengan baik memungkinkan manajemen data yang efisien, meningkatkan konsistensi data, dan mengurangi biaya penyimpanan.

Perancang basis data bertanggung jawab untuk menentukan jenis data yang harus disimpan dan bagaimana data tersebut berhubungan satu sama lain. Informasi ini penting untuk membuat model basis data yang tepat. Sistem manajemen basis data kemudian mengatur data sesuai dengan model yang telah ditetapkan. Proses desain basis data melibatkan pengklasifikasian data dan identifikasi hubungan antar data. Representasi teoritis dari struktur data ini disebut ontologi, yang merupakan landasan untuk desain basis data.

Desain Basis Data Instagram


  1. Tabel app_user Tabel ini menyimpan informasi pengguna aplikasi.

    • ID: Kunci utama, unik untuk setiap pengguna.
    • first_name: Nama depan pengguna.
    • last_name: Nama belakang pengguna.
    • profile_name: Nama profil atau username pengguna.
    • signup_date: Tanggal pendaftaran pengguna di aplikasi.
  2. Tabel follower Tabel ini mencatat hubungan antara pengguna yang mengikuti dan yang diikuti.

    • following_user_id: Kunci asing mengacu ke ID pengguna yang melakukan pengikutan.
    • followed_user_id: Kunci asing mengacu ke ID pengguna yang diikuti.
  3. Tabel post Tabel ini menyimpan informasi tentang setiap postingan yang dibuat oleh pengguna.

    • ID: Kunci utama, unik untuk setiap postingan.
    • created_by_user_id: Kunci asing mengacu ke ID pengguna yang membuat postingan.
    • created_datetime: Tanggal dan waktu pembuatan postingan.
    • caption: Deskripsi atau teks yang menyertai postingan.
    • post_type: Kunci asing mengacu ke jenis postingan.
  4. Tabel post_type Tabel ini menyimpan jenis-jenis postingan yang ada.

    • ID: Kunci utama, unik untuk setiap jenis postingan.
    • post_type_name: Nama jenis postingan (misalnya, foto, video).
  5. Tabel post_media Tabel ini menyimpan informasi tentang media terkait dengan postingan.

    • ID: Kunci utama, unik untuk setiap media.
    • post_id: Kunci asing mengacu ke ID postingan yang terkait dengan media ini.
    • filter_id: Kunci asing mengacu ke ID filter yang digunakan pada media ini.
    • media_file: Nama file atau path media.
    • position: Posisi media dalam postingan (jika ada lebih dari satu).
    • longitude: Koordinat geografis panjang tempat pengambilan media.
    • latitude: Koordinat geografis lintang tempat pengambilan media.
  6. Tabel post_media_user_tag Tabel ini mencatat pengguna yang ditandai dalam media postingan.

    • post_media_id: Kunci asing mengacu ke ID media di mana pengguna ditandai.
    • user_id: Kunci asing mengacu ke ID pengguna yang ditandai.
    • x_coordinate: Koordinat X posisi tag dalam media.
    • y_coordinate: Koordinat Y posisi tag dalam media.
  7. Tabel filter Tabel ini menyimpan informasi tentang filter yang digunakan pada media postingan.

    • ID: Kunci utama, unik untuk setiap filter.
    • filter_name: Nama filter.
    • filter_details: Detail atau deskripsi tentang filter.
  8. Tabel post_effect Tabel ini mencatat efek yang diterapkan pada media postingan.

    • post_media_id: Kunci asing mengacu ke ID media yang memiliki efek.
    • effect_id: Kunci asing mengacu ke ID efek yang diterapkan.
    • scale: Skala efek yang diterapkan (jika ada).
  9. Tabel effect Tabel ini menyimpan informasi tentang efek-efek yang tersedia.

    • ID: Kunci utama, unik untuk setiap efek.
    • effect_name: Nama efek.
  10. Tabel reaction Tabel ini menyimpan informasi tentang reaksi pengguna terhadap postingan (misalnya, like).

    • user_id: Kunci asing mengacu ke ID pengguna yang memberikan reaksi.
    • post_id: Kunci asing mengacu ke ID postingan yang mendapat reaksi.
  11. Tabel comment Tabel ini menyimpan komentar yang dibuat oleh pengguna pada postingan.

    • ID: Kunci utama, unik untuk setiap komentar.
    • created_by_user_id: Kunci asing mengacu ke ID pengguna yang membuat komentar.
    • post_id: Kunci asing mengacu ke ID postingan yang dikomentari.
    • created_datetime: Tanggal dan waktu pembuatan komentar.
    • comment: Teks komentar.
    • comment_replied_to_id: Kunci asing mengacu ke ID komentar yang dibalas (jika ada).

Berikut adalah implementasi kode SQL untuk membuat tabel-tabel yang ada pada desain basis data Instagram:

-- Tabel app_user
CREATE TABLE app_user (
    ID SERIAL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    profile_name VARCHAR(50) UNIQUE NOT NULL,
    signup_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabel follower
CREATE TABLE follower (
    following_user_id INT,
    followed_user_id INT,
    FOREIGN KEY (following_user_id) REFERENCES app_user(ID),
    FOREIGN KEY (followed_user_id) REFERENCES app_user(ID),
    PRIMARY KEY (following_user_id, followed_user_id)
);

-- Tabel post_type
CREATE TABLE post_type (
    ID SERIAL PRIMARY KEY,
    post_type_name VARCHAR(50) NOT NULL
);

-- Tabel post
CREATE TABLE post (
    ID SERIAL PRIMARY KEY,
    created_by_user_id INT,
    created_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    caption TEXT,
    post_type INT,
    FOREIGN KEY (created_by_user_id) REFERENCES app_user(ID),
    FOREIGN KEY (post_type) REFERENCES post_type(ID)
);

-- Tabel filter
CREATE TABLE filter (
    ID SERIAL PRIMARY KEY,
    filter_name VARCHAR(50) NOT NULL,
    filter_details TEXT
);

-- Tabel post_media
CREATE TABLE post_media (
    ID SERIAL PRIMARY KEY,
    post_id INT,
    filter_id INT,
    media_file VARCHAR(255) NOT NULL,
    position INT,
    longitude DECIMAL(9, 6),
    latitude DECIMAL(9, 6),
    FOREIGN KEY (post_id) REFERENCES post(ID),
    FOREIGN KEY (filter_id) REFERENCES filter(ID)
);

-- Tabel post_media_user_tag
CREATE TABLE post_media_user_tag (
    post_media_id INT,
    user_id INT,
    x_coordinate DECIMAL(5, 2),
    y_coordinate DECIMAL(5, 2),
    FOREIGN KEY (post_media_id) REFERENCES post_media(ID),
    FOREIGN KEY (user_id) REFERENCES app_user(ID),
    PRIMARY KEY (post_media_id, user_id)
);

-- Tabel effect
CREATE TABLE effect (
    ID SERIAL PRIMARY KEY,
    effect_name VARCHAR(50) NOT NULL
);

-- Tabel post_effect
CREATE TABLE post_effect (
    post_media_id INT,
    effect_id INT,
    scale DECIMAL(3, 2),
    FOREIGN KEY (post_media_id) REFERENCES post_media(ID),
    FOREIGN KEY (effect_id) REFERENCES effect(ID),
    PRIMARY KEY (post_media_id, effect_id)
);

-- Tabel reaction
CREATE TABLE reaction (
    user_id INT,
    post_id INT,
    FOREIGN KEY (user_id) REFERENCES app_user(ID),
    FOREIGN KEY (post_id) REFERENCES post(ID),
    PRIMARY KEY (user_id, post_id)
);

-- Tabel comment
CREATE TABLE comment (
    ID SERIAL PRIMARY KEY,
    created_by_user_id INT,
    post_id INT,
    created_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    comment TEXT NOT NULL,
    comment_replied_to_id INT,
    FOREIGN KEY (created_by_user_id) REFERENCES app_user(ID),
    FOREIGN KEY (post_id) REFERENCES post(ID),
    FOREIGN KEY (comment_replied_to_id) REFERENCES comment(ID)
);
-- Tabel app_user
CREATE TABLE app_user (
    ID SERIAL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    profile_name VARCHAR(50) UNIQUE NOT NULL,
    signup_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabel follower
CREATE TABLE follower (
    following_user_id INT,
    followed_user_id INT,
    FOREIGN KEY (following_user_id) REFERENCES app_user(ID),
    FOREIGN KEY (followed_user_id) REFERENCES app_user(ID),
    PRIMARY KEY (following_user_id, followed_user_id)
);

-- Tabel post_type
CREATE TABLE post_type (
    ID SERIAL PRIMARY KEY,
    post_type_name VARCHAR(50) NOT NULL
);

-- Tabel post
CREATE TABLE post (
    ID SERIAL PRIMARY KEY,
    created_by_user_id INT,
    created_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    caption TEXT,
    post_type INT,
    FOREIGN KEY (created_by_user_id) REFERENCES app_user(ID),
    FOREIGN KEY (post_type) REFERENCES post_type(ID)
);

-- Tabel filter
CREATE TABLE filter (
    ID SERIAL PRIMARY KEY,
    filter_name VARCHAR(50) NOT NULL,
    filter_details TEXT
);

-- Tabel post_media
CREATE TABLE post_media (
    ID SERIAL PRIMARY KEY,
    post_id INT,
    filter_id INT,
    media_file VARCHAR(255) NOT NULL,
    position INT,
    longitude DECIMAL(9, 6),
    latitude DECIMAL(9, 6),
    FOREIGN KEY (post_id) REFERENCES post(ID),
    FOREIGN KEY (filter_id) REFERENCES filter(ID)
);

-- Tabel post_media_user_tag
CREATE TABLE post_media_user_tag (
    post_media_id INT,
    user_id INT,
    x_coordinate DECIMAL(5, 2),
    y_coordinate DECIMAL(5, 2),
    FOREIGN KEY (post_media_id) REFERENCES post_media(ID),
    FOREIGN KEY (user_id) REFERENCES app_user(ID),
    PRIMARY KEY (post_media_id, user_id)
);

-- Tabel effect
CREATE TABLE effect (
    ID SERIAL PRIMARY KEY,
    effect_name VARCHAR(50) NOT NULL
);

-- Tabel post_effect
CREATE TABLE post_effect (
    post_media_id INT,
    effect_id INT,
    scale DECIMAL(3, 2),
    FOREIGN KEY (post_media_id) REFERENCES post_media(ID),
    FOREIGN KEY (effect_id) REFERENCES effect(ID),
    PRIMARY KEY (post_media_id, effect_id)
);

-- Tabel reaction
CREATE TABLE reaction (
    user_id INT,
    post_id INT,
    FOREIGN KEY (user_id) REFERENCES app_user(ID),
    FOREIGN KEY (post_id) REFERENCES post(ID),
    PRIMARY KEY (user_id, post_id)
);

-- Tabel comment
CREATE TABLE comment (
    ID SERIAL PRIMARY KEY,
    created_by_user_id INT,
    post_id INT,
    created_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    comment TEXT NOT NULL,
    comment_replied_to_id INT,
    FOREIGN KEY (created_by_user_id) REFERENCES app_user(ID),
    FOREIGN KEY (post_id) REFERENCES post(ID),
    FOREIGN KEY (comment_replied_to_id) REFERENCES comment(ID)

Komentar

Postingan populer dari blog ini

PPL - Evaluasi Tengah Semester

PPL - Tugas 5 Low Level Design