Sudah menjadi rahasia umum bahwa cara terbaik untuk mempelajari sesuatu adalah dengan mempraktikkannya dalam skenario kehidupan nyata. Jelas, hal yang sama berlaku untuk pemodelan database. Oleh karena itu, dalam artikel ini saya memutuskan untuk mengajari Anda cara membuat struktur database sederhana, dengan mengambil contoh buku teks dari sistem reservasi kamar hotel. Saya akan menunjukkan cara memulai dan memberi Anda beberapa ide untuk memperluas model.
Pemodelan Basis Data:Temukan, Temukan, Temukan
Pada artikel ini kami akan merancang model data untuk sistem reservasi kamar hotel. Kami mencari model data di mana kami dapat merepresentasikan informasi tentang kamar, tamu, dan reservasi yang dipesan di Hotel VERTABELO****** imajiner kami. Semua informasi ini akan disimpan dalam tabel.
Pemodelan database adalah proses penemuan siklik. Kami pertama-tama mengidentifikasi tabel utama dan atributnya. Dalam model kami, tabel utama adalah:room
, guest
dan reservation
. Kemudian kami melanjutkan menyempurnakan tabel kami dengan menemukan atribut atau kolomnya. Misalnya, room
tabel memiliki atribut seperti:kamar number
, name
dan smoke
bendera antara lain.
Reservation
tabel memiliki atribut date_in
, date_out
, status
(dibatalkan, dikonfirmasi) dan made_by
(online, in_person, phone, mail), sedangkan atribut tabel guest
adalah:first_name
, last_name
dan member_since
. Mungkin Anda merasa seperti reservation
meja membutuhkan lebih banyak atribut (seperti tipe kamar, jumlah tempat tidur), kami akan membahas poin ini nanti, sampai saat itu, pertimbangkan reservation
tabel tidak lengkap. Model data berikut yang dibuat di Vertabelo menunjukkan tabel utama.
Tipe Data:Apakah Domain dari Nilai yang Diizinkan untuk Kolom?
Perhatikan bahwa setiap kolom memiliki tipe data (varchar, integer, date, boolean) untuk menunjukkan jenis nilai yang dapat ditetapkan ke kolom. Misalnya, kolom smoke
di atas meja room
adalah boolean tipe data, artinya hanya benar atau salah adalah nilai yang diizinkan.
Kunci Utama:Nomor Jaminan Sosial dari Setiap Catatan
Setiap tabel harus memiliki kolom (atau lebih dari satu) yang bertindak sebagai pengenal untuk setiap record dalam tabel. Kolom ini disebut primary key (PK), dan praktik terbaik pada desain database menyarankan bahwa setiap tabel harus memiliki PK.
Jika kita melihat model data Vertabelo sebelumnya, kita akan melihat bahwa setiap tabel memiliki kolom yang disebut id
dengan indikator PK di sebelah kanan. Kolom id ini membentuk PK (sebagai konvensi kita beri nama id
kolom PK).
Konsep penting, mungkin jelas bagi banyak pembaca, adalah bahwa kolom PK tidak boleh memiliki nilai duplikat. Dengan kata lain, setiap kolom PK memiliki batasan unik, dan setiap upaya untuk membuat catatan baru dengan nilai duplikat akan ditolak dengan kesalahan oleh pengelola database.
Lanjutkan Menemukan; Temukan Objek Database Baru
Reservasi adalah salah satu elemen yang lebih kompleks untuk direpresentasikan dalam model data ini. Satu reservasi dapat memiliki banyak kamar yang terkait dengannya (misalnya "Saya ingin membuat reservasi untuk satu kamar double dan kamar terpisah dengan 3 tempat tidur untuk anak-anak saya"). Persyaratan bisnis ini menambahkan 4 hal ke model kami:
Tabel baru: Kita perlu membuat tabel baru bernama room_reserved
, tempat kami menyimpan semua kamar milik satu reservasi.
Tambahkan dua referensi: Referensi adalah elemen yang sangat penting dalam model data. Referensi menjelaskan bagaimana satu tabel terkait dengan tabel lain. Dalam model kami, setiap kamar yang dipesan milik satu reservasi, jadi kami akan menggunakan referensi untuk memodelkan fakta itu. Referensi ini secara grafis direpresentasikan sebagai garis yang menghubungkan kedua tabel.
Selain itu, karena setiap reservasi milik satu tamu, kita perlu membuat referensi baru yang menghubungkan guest
dan reservation
tabel.
Memindahkan kolom: Karena kami dapat memiliki beberapa kamar milik satu reservasi, kami harus mengizinkan pembatalan per kamar individu, setelah itu kami memindahkan attribute
status dari reservation
ke reserved_room
tabel.
Model data yang diperbarui ditunjukkan dalam diagram berikut yang dirancang di Vertabelo:
Apa yang Terjadi pada Tabel yang Dihubungkan oleh Referensi?
Saat kita membuat referensi antara dua tabel, satu kolom baru ditambahkan ke salah satu tabel. Kolom yang baru saja ditambahkan ini disebut Kunci Asing, dan bertindak sebagai penunjuk ke tabel lain yang memungkinkan koneksi antar tabel. Sebagai contoh, perhatikan diagram berikut:
Gbr. 1 Tabel reservation
dan guest
sebelum dan sesudah menambahkan referensi
Lanjutkan Menemukan; Pergi untuk Lebih Banyak
Satu hal yang menunggu untuk dimodelkan adalah kenyataan bahwa kamar dapat digunakan oleh beberapa tamu untuk jangka waktu tertentu. Untuk mewakili fakta bisnis ini, kami menambahkan 2 tabel:hosted_at
dan occupied_room
.
Perhatikan bahwa setiap orang yang menginap di hotel akan memiliki catatan di hosted_at
. Catatan ini akan memiliki referensi ke kamar yang dia tempati dan tamu. Inilah sebabnya hosted_at
memiliki referensi ganda terhadap guest
dan occupied_room
.
Tabel occupied_room
akan memiliki satu catatan per setiap kamar yang disewa, pada catatan ini kita dapat menemukan bidang:check_in
dan check_out
dari jenis cap waktu yang menunjukkan kapan sewa dimulai dan selesai. Tipe data timestamp menyimpan titik waktu dengan presisi arbitrer. Setiap occupied_room
record juga akan memiliki referensi ke nomor kamar yang disewa dan secara tidak langsung melalui hosted_at
kepada tamu yang menginap di kamar ini.
Kami juga menambahkan tabel room_type
ke model data; idenya adalah untuk mengelompokkan kamar berdasarkan kategori kamar atau tipe kamar. Misalnya “standard one double bed”, “luxury 2 double bed” dapat berupa deskripsi jenis. Kami juga memiliki atribut max_capacity di sini.
Latihan: Desain basis data adalah disiplin yang mudah didekati, namun, dibutuhkan waktu untuk menjadi ahli materi pelajaran. Jika Anda melakukan langkah pertama pada desain basis data, coba selesaikan model data saat ini untuk memungkinkan:
- Jika dua atau lebih tamu berbagi kamar, izinkan check-in dan check-out yang berbeda untuk setiap tamu.
- Dalam beberapa kasus, hotel dapat mengubah konfigurasi kamar (misalnya dari standar satu tempat tidur ganda menjadi mewah 2 tempat tidur ganda). Tambahkan ke model data elemen untuk mewakili perubahan konfigurasi tersebut, dengan mempertahankan riwayat setiap ruangan.