EAS - Model Bisnis Perusahaan

Tugas Pertemuan 14 - Desain Database

Nama  : Ken Anargya Alkausar

NRP    : 5025211168

Kelas   : A

Desain Basis Data adalah serangkaian proses yang membantu dalam perancangan, pengembangan, implementasi, dan pemeliharaan sistem manajemen data perusahaan. Basis data yang didesain dengan baik akan mudah dikelola, meningkatkan konsistensi data, dan menghemat biaya dalam penggunaan ruang penyimpanan. Desainer database bertugas menentukan data apa saja yang perlu disimpan dan bagaimana hubungan antar elemen data tersebut. Dengan informasi ini, mereka dapat membuat model database yang sesuai. Sistem manajemen basis data kemudian mengatur data tersebut sesuai dengan model yang dibuat. Proses desain database melibatkan pengklasifikasian data dan mengidentifikasi hubungan antar data. Representasi teoritis dari data ini disebut ontologi, yang merupakan teori dasar dari desain database.

Desain Basis Data Instagram

1. Tabel app_user
Tabel ini menyimpan informasi mengenai pengguna aplikasi. Kolom:

  • ID: Primary key, unik untuk setiap pengguna.
  • first_name: Nama depan pengguna.
  • last_name: Nama belakang pengguna.
  • profile_name: Nama profil atau username pengguna.
  • signup_date: Tanggal pengguna mendaftar di aplikasi.

2. Tabel follower
Tabel ini mencatat hubungan antara pengguna yang mengikuti dan yang diikuti. Kolom:

  • following_user_id: Foreign key yang mengacu ke app_user.ID, menunjukkan siapa yang mengikuti.
  • followed_user_id: Foreign key yang mengacu ke app_user.ID, menunjukkan siapa yang diikuti.

3. Tabel post
Tabel ini menyimpan informasi mengenai setiap kiriman yang dibuat oleh pengguna. Kolom:

  • ID: Primary key, unik untuk setiap kiriman.
  • created_by_user_id: Foreign key yang mengacu ke app_user.ID, menunjukkan siapa yang membuat kiriman.
  • created_datetime: Tanggal dan waktu ketika kiriman dibuat.
  • caption: Deskripsi atau teks yang menyertai kiriman.
  • post_type: Foreign key yang mengacu ke post_type.ID, menunjukkan jenis kiriman (misalnya foto, video).

4. Tabel post_type
Tabel ini menyimpan jenis-jenis kiriman yang ada. Kolom:

  • ID: Primary key, unik untuk setiap jenis kiriman.
  • post_type_name: Nama jenis kiriman (misalnya, foto, video).

5. Tabel post_media
Tabel ini menyimpan informasi mengenai media yang terkait dengan kiriman. Kolom:

  • ID: Primary key, unik untuk setiap media.
  • post_id: Foreign key yang mengacu ke post.ID, menunjukkan kiriman yang terkait dengan media ini.
  • filter_id: Foreign key yang mengacu ke filter.ID, menunjukkan filter yang digunakan pada media ini.
  • media_file: Nama file atau path media.
  • position: Posisi media dalam kiriman (jika ada lebih dari satu media).
  • 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 kiriman. Kolom:

  • post_media_id: Foreign key yang mengacu ke post_media.ID, menunjukkan media di mana pengguna ditandai.
  • user_id: Foreign key yang mengacu ke app_user.ID, menunjukkan 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 mengenai filter yang digunakan pada media kiriman. Kolom:

  • ID: Primary key, unik untuk setiap filter.
  • filter_name: Nama filter.
  • filter_details: Detail atau deskripsi mengenai filter.
8. Tabel post_effect
Tabel ini mencatat efek yang diterapkan pada media kiriman. Kolom:
  • post_media_id: Foreign key yang mengacu ke post_media.ID, menunjukkan media yang memiliki efek.
  • effect_id: Foreign key yang mengacu ke effect.ID, menunjukkan efek yang digunakan.
  • scale: Skala efek yang diterapkan (jika ada).

9. Tabel effect
Tabel ini menyimpan informasi mengenai efek-efek yang tersedia. Kolom:

  • ID: Primary key, unik untuk setiap efek.
  • effect_name: Nama efek.

10. Tabel reaction
Tabel ini menyimpan informasi mengenai reaksi pengguna terhadap kiriman (misalnya like). Kolom:

  • user_id: Foreign key yang mengacu ke app_user.ID, menunjukkan siapa yang memberikan reaksi.
  • post_id: Foreign key yang mengacu ke post.ID, menunjukkan kiriman yang mendapatkan reaksi.

11. Tabel comment
Tabel ini menyimpan komentar yang dibuat oleh pengguna pada kiriman. Kolom:

  • ID: Primary key, unik untuk setiap komentar.
  • created_by_user_id: Foreign key yang mengacu ke app_user.ID, menunjukkan siapa yang membuat komentar.
  • post_id: Foreign key yang mengacu ke post.ID, menunjukkan kiriman yang dikomentari.
  • created_datetime: Tanggal dan waktu ketika komentar dibuat.
  • comment: Teks komentar.
  • comment_replied_to_id: Foreign key yang mengacu ke comment.ID, menunjukkan komentar yang dibalas (jika ada).
Relasi Antar Tabel:
  • Tabel app_user terhubung dengan follower, post, reaction, dan comment melalui foreign key, menunjukkan hubungan pengguna dengan berbagai aktivitas di aplikasi.
  • Tabel post terhubung dengan post_type, post_media, reaction, dan comment melalui foreign key, menunjukkan hubungan kiriman dengan jenis kiriman, media yang terkait, reaksi, dan komentar.
  • Tabel post_media terhubung dengan filter, post_media_user_tag, dan post_effect melalui foreign key, menunjukkan hubungan media dengan filter yang digunakan, pengguna yang ditandai, dan efek yang diterapkan.
Desain basis data ini mencakup berbagai aspek dari sebuah aplikasi Instagram, memungkinkan penyimpanan dan pengelolaan informasi pengguna, kiriman, media, interaksi, dan berbagai fitur lain yang biasanya ada di aplikasi sejenis.

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)
);

Referensi


Comments