4.2.2 Perancangan Basis Data Logikal
4.2.2.2 Membuat Relasi untuk Model Data Logikal Lokal
Tujuan langkah ini adalah membuat relasi untuk model data logikal lokal untuk merepresentasikan entitas, relasi dan atribut yang telah diidentifikasi sebelumnya. Dalam langkah ini ditentukan primary key dan
foreign key dari setiap relasi, dimana seiring dan pengidentifikasian foreign
key maka suatu relasi akan jelas primary key yang menjadi referensinya.
Relasi diturunkan dengan langkah-langkah sebagai berikut: 1. Strong entity types
Langkah pertama yang harus dilakukan dalam menurunkan relasi untuk model data logikal lokal adalah menentukan tipe entitas. Salah satunya adalah strong entity types dimana entitas yang kemunculannya tidak dipengaruhi oleh entitas lain, seperti pada Tabel 4.6.
Tabel 4.6 Strong Entity Types
User (username, password, nama_lengkap, gender, alamat, email, telp, status) Primary Key username
Message_header (pesan_id, subject, isi, tanggal, status) Primary Key pesan_id
Message_sent (pesan_id, subject, isi, tanggal, status) Primary key pesan_id
Penumpang (penumpang_id, nama_penumpang, gender, jenis_penumpang) Primary Key penumpang_id
Primary Key peserta_id
Tiket_reservasi (reservasi_tiket_id, username, tanggal_reservasi, keberangkatan_id, kembali_id, penumpang_id, nama_penumpang, gender, jenis_penumpang, total_tarif_tiket, tipe_pembayaran, status_pembayaran, tanggal_pembayaran, tipe_pengambilan )
Primary Key reservasi_tiket_id
Tour_reservasi (reservasi_tour_id, username, tanggal_reservasi, tour_id, nama_tour, tarif_tour, peserta_id, nama_peserta, gender, total_tarif_tour, tipe_pembayaran, status_pembayaran, tanggal_pembayaran, tipe_pengambilan)
Primary Key reservasi_tour_id
Voucher_hotel_reservasi (reservasi_hotel_id, username, tanggal_reservasi, hotel_id, nama_hotel, tanggal_masuk, tanggal_keluar, total_tarif_kamar, tipe_pembayaran, status_pembayaran, tanggal_pembayaran, tipe_pengambilan)
Primary Key reservasi_hotel_id
Penerbangan (penerbangan_id, maskapai_id, jam_berangkat, jam_tiba, rute_id, class, tarif_tiket, masa_berlaku)
Primary Key penerbangan_id
Maskapai (maskapai_id, nama_maskapai) Primary Key maskapai_id
Rute (rute_id, kota_asal, kota_tujuan, kota_transit, status_penerbangan) Primary Key rute_id
Tour (tour_id, nama_tour, tarif_tour, jenis_tour, keterangan) Primary Key tour_id
Hotel (hotel_id, nama_hotel, alamat, lokasi, negara, star, jenis_hotel, image) Primary Key hotel_id
Tarif_hotel (tarif_kamar_id, hotel_id, tipe_kamar_id, tipe_bed_id, breakfast, tarif_kamar)
Primary Key tarif_kamar_id
Tipe_kamar (tipe_kamar_id, nama_tipe_kamar) Primary Key tipe_kamar_id
Tipe_bed (tipe_bed_id, nama_tipe_bed) Primary Key tipe_bed_id
Cancel_reservasi_tiket (cancel_reservasi_tiket_id, username, tanggal_cancel, reservasi_tiket_id, charge)
Primary Key cancel_reservasi_tiket_id
Cancel_reservasi_hotel (cancel_reservasi_hotel_id, username, tanggal_cancel, reservasi_hotel_id, charge)
Primary Key cancel_reservasi_hotel_id
Cancel_reservasi_tour (cancel_reservasi_tour_id, username, tanggal_cancel, reservasi_tour_id, charge)
Primary Key cancel_reservasi_tour_id
2. Weak entity types
Setelah menentukan strong entity types, weak entity types juga perlu ditentukan. Tabel 4.7 menunjukkan entitas mana saja yang kemunculannya bergantung pada entitas lain.
Tabel 4.7 Weak Entity Types
jadwal_berangkat (keberangkatan_id, penerbangan_id, tanggal_berangkat, tarif_tiket, rute_id, kota_asal, kota_tujuan, kota_transit)
Primary Key keberangkatan_id
jadwal_kembali (kembali_id, penerbangan_id, tanggal_kembali, tarif_tiket, rute_id, kota_asal, kota_tujuan, kota_transit)
Primary Key keberangkatan_id
Voucher_hotel_reservasi_detail (reservasi_hotel_id, tarif_kamar_id, tarif_kamar, breakfast, jumlah_kamar)
Primary Key reservasi_hotel_id Primary Key tarif_kamar_id
Message_sender (pesan_id, username) Primary Key pesan_id, username Message_receiver (pesan_id, username) Primary Key pesan_id, username
3. One-to-many (1:*) binary relationship types
Setelah menentukan tipe-tipe entitas, relasi antar entitas tersebut perlu menentukan primary key dan foreign key. Hasilnya adalah sebagai berikut:
a) Kirim username dari User ke tiket_reservasi untuk memodelkan 1:* relasi dimiliki
b) Kirim penumpang_id dari Penumpang ke tiket_reservasi untuk memodelkan 1:* relasi memiliki
c) Kirim tour_id dari Tour ke tour_reservasi untuk memodelkan 1:* relasi memiliki
d) Kirim username dari User ke tour_reservasi untuk memodelkan 1:* relasi dimiliki
e) Kirim peserta_id dari Peserta ke tour_reservasi untuk memodelkan 1:* relasi memiliki
f) Kirim hotel_id dari hotel ke voucher_hotel_reservasi untuk memodelkan 1:* relasi memiliki
g) Kirim username dari User ke voucher_hotel_reservasi untuk memodelkan 1:* relasi dimiliki
h) Kirim maskapai_id dari maskapai, dan rute_id dari rute ke penerbangan untuk memodelkan 1:* relasi memiliki
i) Kirim hotel_id dari hotel, tipe_kamar_id dari tipe_kamar, dan tipe_bed_id dari tipe_bed ke tarif_hotel untuk memodelkan 1:* relasi memiliki
j) Kirim username dari user ke cancel_reservasi_tiket untuk memodelkan 1:* relasi dimiliki
k) Kirim username dari user ke cancel_reservasi_tour untuk memodelkan 1:* relasi dimiliki
l) Kirim username dari user ke cancel_reservasi_hotel untuk memodelkan 1:* relasi dimiliki
m) Kirim username dari user ke message_sender untuk memodelkan 1:* relasi memiliki
n) Kirim username dari user ke message_receiver untuk memodelkan 1:* relasi memiliki
o) Kirim penerbangan_id dari penerbangan dan rute_id dari rute ke jadwal_berangkat untuk memodelkan 1:* relasi memiliki.
p) Kirim penerbangan_id dari penerbangan dan rute_id dari rute ke jadwal_berangkat untuk memodelkan 1:* relasi memiliki.
4. One-to-one (1:1) binary relationship types
a) Kirim pesan_id dari message_sent, pesan_id dari message_header ke message_sender untuk memodelkan 1:1 relasi dimiliki.
b) Kirim pesan_id dari message_sent, pesan_id dari message_header ke message_receiver untuk memodelkan 1:1 relasi dimiliki
c) Kirim reservasi_tiket_id dari tiket_reservasi ke cancel_reservasi_tiket untuk memodelkan 1:1 relasi memiliki.
d) Kirim reservasi_tour_id dari tour_reservasi ke cancel_reservasi_tour untuk memodelkan 1:1 relasi memiliki.
e) Kirim reservasi_hotel_id dari voucher_hotel_reservasi ke cancel_reservasi_hotel untuk memodelkan 1:1 relasi memiliki.
5. Many-to-many (*:*) binary relationship types
Relasi antar entitas ini perlu dibentuk dengan cara mengirimkan primary
key dari entitas-entitas yang berpartisipasi pada relasi tersebut ke dalam
a) Kirim keberangkatan_id dari jadwal_berangkat dan kembali_id dari jadwal_kembali ke tiket_reservasi untuk membentuk
composite primary key
b) Kirim reservasi_hotel_id dari voucher_hotel_reservasi dan
tariff_kamar_id dari tarif_hotel ke voucher_hotel_reservasi_detail untuk membentuk composite
primary key
6. Multi-valued attributes
Langkah ini dilakukan dengan cara membuat relasi yang merepresentasikan multi-valued attribute dan mengirimkan duplikat
Setelah langkah-langkah di atas selesai dijalankan, maka dibuatlah dokumentasi relasi dan atribut foreign key, yang akan ditunjukkan pada Tabel 4.8.
Tabel 4.8 Dokumentasi Relasi dan Atribut Foreign Key User (username, password, nama_lengkap, gender, alamat, email, telp, status) Primary Key username
Message_header (pesan_id, subject, isi, tanggal, status) Primary Key pesan_id
Message_sent (pesan_id, subject, isi, tanggal, status) Primary key pesan_id
Message_sender (pesan_id, username) Primary Key pesan_id, username
Foreign Key pesan_id references Message_header (pesan_id), Message_sent (pesan_id)
Foreign Key username references User (username) Message_receiver (pesan_id, username)
Primary Key pesan_id, username
Foreign Key pesan_id references Message_header (pesan_id), Message_sent (pesan_id)
Foreign Key username references User (username)
Penumpang (penumpang_id, nama_penumpang, gender, jenis_penumpang) Primary Key penumpang_id
Peserta (peserta_id, nama_peserta, gender) Primary Key peserta_id
Tiket_reservasi (reservasi_tiket_id, username, tanggal_reservasi, keberangkatan_id, kembali_id, penumpang_id, nama_penumpang, gender, jenis_penumpang, total_tarif_tiket, tipe_pembayaran, status_pembayaran, tanggal_pembayaran, tipe_pengambilan )
Primary Key reservasi_tiket_id
Foreign Key username references User (username)
Foreign Key keberangkatan_id references Jadwal_berangkat (keberangkatan_id) Foreign Key kembali_id references Jadwal_kembali (kembali_id)
Foreign Key penumpang_id references Penumpang (penumpang_id)
Tour_reservasi (reservasi_tour_id, username, tanggal_reservasi, tour_id, nama_tour, tarif_tour, peserta_id, nama_peserta, gender, total_tarif_tour, tipe_pembayaran, status_pembayaran, tanggal_pembayaran, tipe_pengambilan)
Primary Key reservasi_tour_id
Foreign Key tour_id references Tour (tour_id) Foreign Key username references User (username) Foreign Key peserta_id references Peserta (peserta_id)
Voucher_hotel_reservasi (reservasi_hotel_id, username, tanggal_reservasi, hotel_id, nama_hotel, tanggal_masuk, tanggal_keluar, total_tarif_kamar, tipe_pembayaran, status_pembayaran, tanggal_pembayaran, tipe_pengambilan)
Primary Key reservasi_hotel_id
Foreign Key username references User (username) Foreign Key hotel_id references Hotel (hotel_id)
Voucher_hotel_reservasi_detail (reservasi_hotel_id, tarif_kamar_id, tarif_kamar, breakfast, jumlah_kamar)
Primary Key reservasi_hotel_id, tarif_kamar_id
Foreign Key reservasi_hotel_id references Voucher_hotel_reservasi (reservasi_hotel_id)
Foreign Key tarif_kamar_id references Tarif_hotel (tarif_kamar_id)
Penerbangan (penerbangan_id, maskapai_id, jam_berangkat, jam_tiba, rute_id, class, tarif_tiket, masa_berlaku)
Primary Key penerbangan_id
Foreign Key maskapai_id references Maskapai (maskapai_id) Foreign Key rute_id references Rute (rute_id)
Maskapai (maskapai_id, nama_maskapai) Primary Key maskapai_id
Rute (rute_id, kota_asal, kota_tujuan, kota_transit, status_penerbangan) Primary Key rute_id
Tour (tour_id, nama_tour, tarif_tour, jenis_tour, keterangan) Primary Key tour_id
Hotel (hotel_id, nama_hotel, alamat, lokasi, negara, star, jenis_hotel, image) Primary Key hotel_id
Tarif_hotel (tarif_kamar_id, hotel_id, tipe_kamar_id, tipe_bed_id, breakfast, tarif_kamar)
Primary Key tarif_kamar_id
Foreign Key tipe_kamar_id references Tipe_kamar (tipe_kamar_id) Foreign Key tipe_bed_id references Tipe_bed (tipe_bed_id)
Tipe_kamar (tipe_kamar_id, nama_tipe_kamar) Primary Key tipe_kamar_id
Tipe_bed (tipe_bed_id, nama_tipe_bed) Primary Key tipe_bed_id
Cancel_reservasi_tiket (cancel_reservasi_tiket_id, username, tanggal_cancel, reservasi_tiket_id, charge)
Primary Key cancel_reservasi_tiket_id
Foreign Key username references User (username)
Foreign Key reservasi_tiket_id references Tiket_reservasi (reservasi_tiket_id)
Cancel_reservasi_hotel (cancel_reservasi_hotel_id, username, tanggal_cancel, reservasi_hotel_id, charge)
Primary Key cancel_reservasi_hotel_id
Foreign Key username references User (username)
Foreign Key reservasi_hotel_id references Voucher_hotel_reservasi (reservasi_hotel_id)
Cancel_reservasi_tour (cancel_reservasi_tour_id, username, tanggal_cancel, reservasi_tour_id, charge)
Primary Key cancel_reservasi_tour_id
Foreign Key username references User (username)
Foreign Key reservasi_tour_id references Tour_reservasi (reservasi_tour_id) Jadwal_berangkat (keberangkatan_id, penerbangan_id, tanggal_berangkat,
tarif_tiket, rute_id, kota_asal, kota_tujuan, kota_transit) Primary Key keberangkatan_id
Foreign Key penerbangan_id references Penerbangan (penerbangan_id) Foreign Key rute_id references Rute (rute_id)
Jadwal_kembali (kembali_id, penerbangan_id, tanggal_kembali, tarif_tiket, rute_id, kota_asal, kota_tujuan, kota_transit)
Primary Key kembali_id
Foreign Key penerbangan_id references Penerbangan (penerbangan_id) Foreign Key rute_id references Rute (rute_id)
4.2.2.3 Normalisasi
Tujuan dilakukannya normalisasi adalah untuk membuat kemungkinan terjadinya data rangkap menjadi sekecil mungkin, menghindari adanya data yang tidak konsisten terutama bila dilakukan penghapusan atau penambahan data sebagai akibat dari adanya data rangkap, dan menjamin identitas tabel secara tunggal sebagai determinan semua atribut.
Proses normalisasi yang dilakukan pada setiap entitas yang ada adalah sebagai berikut :
1. Username
UNF :
Tidak terdapat perulangan. Relation User sudah normal pada tahap UNF
User (username, password, nama_lengkap, gender, alamat, email, telp, status)
Primary Key username
2NF :
Tidak terdapat partial dependency, User sudah normal pada tahap 2NF
3NF :
Tidak terdapat transitive dependency, User sudah normal pada tahap 3NF
Hasil UNF-3NF :
User (username, password, nama_lengkap, gender, alamat, email, telp, status)
Primary Key username