Membangun ERD Manajemen Hotel dengan PlantUML dan VPasCode

A YouTube thumbnail-style graphic featuring the bold text "BUILD PROFESSIONAL DATABASE DIAGRAMS" in large uppercase letters, with a pointing finger icon on the right and a rendered Entity Relationship Diagram displayed in the background.

Ketika merancang arsitektur basis data yang kuat untuk domain kompleks seperti perhotelan, memvisualisasikan hubungan secara jelas sangat krusial. Baik Anda memetakan profil pelanggan, melacak persediaan kamar, atau mengelola penagihan, Diagram Hubungan Entitas (ERD) yang terstruktur dengan baik akan menghemat ratusan jam selama pengembangan. Dalam kelas master ini, saya akan membimbing Anda melalui proses pembuatan ERD Manajemen Hotel yang komprehensif dari awal menggunakan PlantUML di dalam editor PlantUML gratis, VPasCode.

1. Menginisialisasi Lingkungan PlantUML

Saya mulai dengan menyiapkan struktur dasar dari skrip. Ketika bekerja dengan skema yang kompleks yang berisi banyak atribut, keterbacaan tata letak sangat penting. Saya mengonfigurasi PlantUML untuk menyembunyikan kekacauan yang tidak perlu dan mengoptimalkan arah tata letak diagram:


@startuml 
title ERD Manajemen Hotel

sembunyikan lingkaran
arah kiri ke kanan
    

Mengapa pendekatan ini? Menyembunyikan lingkaran atribut bawaan membuat kotak entitas tetap bersih dan modern. Mengatur arah menjadi arah kiri ke kanan membantu mencegah ERD yang lebar menjadi tidak terkelola secara vertikal, menyebar secara logis hubungan antar tabel banyak.

2. Menentukan Entitas Inti dan Atribut

Berikutnya, saya perlu menentukan entitas inti yang mewakili domain bisnis kita. Saya mengatur setiap entitas dengan kunci utama, batasan unik, dan atribut bertipe. Mari kita lihat bagaimana saya menyiapkan entitas inti Pelanggan dan TipeKamar entitas:


entitas "Pelanggan" sebagai pelanggan {
  * customer_id : UUID <<PK>>
  --
  first_name : VARCHAR(50)
  last_name : VARCHAR(50)
  email : VARCHAR(100) <<UK>>
  phone : VARCHAR(20)
  address : TEXT
  loyalty_points : INTEGER
  total_stays : INTEGER
  date_registered : TIMESTAMP
  date_of_birth : DATE
  nationality : VARCHAR(50)
}

entitas "TipeKamar" sebagai tipekamar {
  * room_type_id : UUID <<PK>>
  --
  type_name : VARCHAR(50) <<UK>>
  description : TEXT
  standard_capacity : INTEGER
  base_price : DECIMAL(10,2)
  extra_bed_charge : DECIMAL(10,2)
  has_kitchenette : BOOLEAN
  has_balcony : BOOLEAN
}
    

Dengan menentukan penanda eksplisit seperti <<PK>> dan <<UK>>, siapa pun yang meninjau kode akan langsung memahami aturan indeks dan keunikan sebelum skrip migrasi basis data bahkan ditulis.

3. Memetakan Entitas Operasional (Kamar, Reservasi, dan Staf)

Dengan data referensi kita sudah tersedia, saya beralih ke inti transaksional sistem manajemen hotel: kamar, reservasi, dan alur kerja staf. Setiap entitas terhubung kembali ke tabel dasar kita menggunakan kunci asing:


entitas "Kamar" sebagai kamar {
  * room_id : UUID <<PK>>
  --
  room_number : VARCHAR(10) <<UK>>
  floor_number : INTEGER
  room_type_id : UUID <<FK>>
  capacity : INTEGER
  base_price : DECIMAL(10,2)
  is_available : BOOLEAN
  has_view : BOOLEAN
  square_feet : INTEGER
  last_renovated : DATE
}

entitas "Reservasi" sebagai reservasi {
  * reservation_id : UUID <<PK>>
  --
  customer_id : UUID <<FK>>
  room_id : UUID <<FK>>
  check_in_date : DATE
  check_out_date : DATE
  number_of_guests : INTEGER
  total_amount : DECIMAL(10,2)
  status : VARCHAR(20)
  special_requests : TEXT
  created_at : TIMESTAMP
  updated_at : TIMESTAMP
  confirmation_code : VARCHAR(20) <<UK>>
}
    

4. Menetapkan Hubungan Keuangan dan Layanan

Untuk menyelesaikan arsitektur ini, saya memetakan catatan penagihan (Pembayaran dan Faktur) bersama layanan pendukung seperti Layanan Kamar yang dijalankan oleh staf hotel. Untuk menghubungkan semua elemen ini, saya secara eksplisit menentukan kardinalitas menggunakan notasi PlantUML standar:


' Hubungan
customer ||--o{ reservation : "membuat"
room ||--o{ reservation : "ditugaskan ke"
reservation ||--|| payment : "memiliki"
reservation ||--|| invoice : "menghasilkan"
reservation ||--o{ roomservice : "meminta"
staff ||--o{ roomservice : "memenuhi"
roomtype ||--o{ room : "mengkategorikan"

@enduml
    

Pilihan Desain: Menggunakan notasi crow’s foot yang tepat (seperti ||--o{ untuk hubungan satu-ke-banyak yang wajib-ke-opsional) memastikan aturan logika bisnis—seperti reservasi yang membutuhkan pelanggan, tetapi pelanggan bisa memiliki beberapa atau nol pemesanan aktif—dipetakan secara akurat.

 

Skrip PlantUML Lengkap

Berikut adalah kode sumber lengkap dan terkumpul untuk ERD manajemen hotel kami. Anda dapat menyalin dan menempelkan kode ini langsung ke editor PlantUML favorit Anda editor PlantUML gratis untuk mengedit atau merender grafik vektor:

@startuml 

title ERD Manajemen Hotel

sembunyikan lingkaran
arah kiri ke kanan

' Definisikan entitas dengan atribut
entity "Pelanggan" as customer {
  * customer_id : UUID <>
  --
  first_name : VARCHAR(50)
  last_name : VARCHAR(50)
  email : VARCHAR(100) <>
  phone : VARCHAR(20)
  address : TEXT
  loyalty_points : INTEGER
  total_stays : INTEGER
  date_registered : TIMESTAMP
  date_of_birth : DATE
  nationality : VARCHAR(50)
}

entity "Kamar" as room {
  * room_id : UUID <>
  --
  room_number : VARCHAR(10) <>
  floor_number : INTEGER
  room_type_id : UUID <>
  capacity : INTEGER
  base_price : DECIMAL(10,2)
  is_available : BOOLEAN
  has_view : BOOLEAN
  square_feet : INTEGER
  last_renovated : DATE
}

entity "Tipe Kamar" as roomtype {
  * room_type_id : UUID <>
  --
  type_name : VARCHAR(50) <>
  description : TEXT
  standard_capacity : INTEGER
  base_price : DECIMAL(10,2)
  extra_bed_charge : DECIMAL(10,2)
  has_kitchenette : BOOLEAN
  has_balcony : BOOLEAN
}

entity "Reservasi" as reservation {
  * reservation_id : UUID <>
  --
  customer_id : UUID <>
  room_id : UUID <>
  check_in_date : DATE
  check_out_date : DATE
  number_of_guests : INTEGER
  total_amount : DECIMAL(10,2)
  status : VARCHAR(20)
  special_requests : TEXT
  created_at : TIMESTAMP
  updated_at : TIMESTAMP
  confirmation_code : VARCHAR(20) <>
}

entity "Pembayaran" as payment {
  * payment_id : UUID <>
  --
  reservation_id : UUID <>
  amount : DECIMAL(10,2)
  payment_date : TIMESTAMP
  payment_method : VARCHAR(30)
  transaction_id : VARCHAR(50) <>
  status : VARCHAR(20)
  receipt_url : TEXT
  refund_amount : DECIMAL(10,2)
}

entity "Faktur" as invoice {
  * invoice_id : UUID <>
  --
  reservation_id : UUID <>
  invoice_number : VARCHAR(20) <>
  issued_date : DATE
  due_date : DATE
  subtotal : DECIMAL(10,2)
  tax : DECIMAL(10,2)
  service_charge : DECIMAL(10,2)
  total_amount : DECIMAL(10,2)
  status : VARCHAR(20)
}

entity "Staf" as staff {
  * staff_id : UUID <>
  --
  first_name : VARCHAR(50)
  last_name : VARCHAR(50)
  email : VARCHAR(100) <>
  phone : VARCHAR(20)
  role : VARCHAR(30)
  hire_date : DATE
  salary : DECIMAL(10,2)
  shift_schedule : VARCHAR(50)
  is_active : BOOLEAN
}

entity "Layanan Kamar" as roomservice {
  * service_id : UUID <>
  --
  reservation_id : UUID <>
  staff_id : UUID <>
  service_type : VARCHAR(50)
  description : TEXT
  request_time : TIMESTAMP
  completion_time : TIMESTAMP
  status : VARCHAR(20)
  price : DECIMAL(10,2)
}

' Hubungan
customer ||--o{ reservation : "membuat"
room ||--o{ reservation : "ditugaskan ke"
reservation ||--|| payment : "memiliki"
reservation ||--|| invoice : "menghasilkan"
reservation ||--o{ roomservice : "meminta"
staff ||--o{ roomservice : "memenuhi"
roomtype ||--o{ room : "mengkategorikan"

@enduml

Editing a ERD in Visual Paradigm VPasCode


Hidupkan Desain Basis Data Anda dengan VPasCode

Membangun model basis data yang kompleks tidak harus berarti berjuang dengan antarmuka pengguna drag-and-drop yang canggung. Dengan memanfaatkan pendekatan diagram sebagai kode, arsitektur Anda tetap terkelola versi, bersih, dan mudah dipelihara.

Siap mencoba membangun arsitektur sistem Anda sendiri? Beralih ke VPasCode untuk merasakan rendering real-time, deteksi format otomatis, dan ekspor mulus untuk dokumentasi teknis Anda hari ini!

Scroll to Top