Erstellen eines Hotelmanagement-ERDs mit PlantUML und 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.

Beim Entwerfen robuster Datenbankarchitekturen für komplexe Domänen wie die Hotellerie ist es entscheidend, Beziehungen klar darzustellen. Egal ob Sie Kundendaten abbilden, Zimmerbestände verfolgen oder Rechnungen verwalten – ein gut strukturierter Entity-Relationship-Diagramm (ERD) spart während der Entwicklung unzählige Stunden. In diesem Meisterkurs führe ich Sie Schritt für Schritt durch die Erstellung eines umfassenden Hotelmanagement-ERDs von Grund auf mit PlantUML innerhalb des kostenlosen PlantUML-Editors, VPasCode.

1. Initialisieren der PlantUML-Umgebung

Ich beginne damit, die grundlegende Struktur des Skripts aufzubauen. Bei der Arbeit mit komplexen Schemata, die zahlreiche Attribute enthalten, ist die Lesbarkeit der Anordnung von entscheidender Bedeutung. Ich konfiguriere PlantUML, um unnötigen Ballast zu verbergen und die Diagrammanordnung zu optimieren:


@startuml 
title Hotelmanagement-ERD

verstecke Kreis
von links nach rechts Richtung
    

Warum diese Vorgehensweise?Das Verbergen der Standard-Attributkreise hält die Entitätsfelder sauber und modern. Die Festlegung der Richtung auf von links nach rechts Richtunghilft, breite ERDs davor zu schützen, vertikal unübersichtlich zu werden, und verteilt die Beziehungen zwischen mehreren Tabellen logisch.

2. Definieren der zentralen Entitäten und Attribute

Als Nächstes muss ich die zentralen Entitäten definieren, die unseren Geschäftsbereich darstellen. Ich strukturiere jede Entität mit ihren Primärschlüsseln, eindeutigen Einschränkungen und typisierten Attributen. Schauen wir uns an, wie ich die zentralen Kunde und ZimmerartEntitäten aufbauen:


entität "Kunde" als kunde {
  * kunden_id : UUID <<PK>>
  --
  vorname : VARCHAR(50)
  nachname : VARCHAR(50)
  email : VARCHAR(100) <<UK>>
  telefon : VARCHAR(20)
  adresse : TEXT
  treuepunkte : INTEGER
  gesamt_aufenthalte : INTEGER
  datum_registrierung : TIMESTAMP
  geburtsdatum : DATE
  nationalität : VARCHAR(50)
}

entität "Zimmerart" als zimmerart {
  * zimmerart_id : UUID <<PK>>
  --
  art_name : VARCHAR(50) <<UK>>
  beschreibung : TEXT
  standard_kapazität : INTEGER
  grundpreis : DECIMAL(10,2)
  zusatzbett_geld : DECIMAL(10,2)
  hat_küchenzeile : BOOLEAN
  hat_balkon : BOOLEAN
}
    

Durch die Definition expliziter Markierungen wie <<PK>> und <<UK>>, versteht jeder, der den Code überprüft, sofort die Indizierungs- und Eindeutigkeitsregeln, noch bevor die Datenbank-Migrations-Skripte überhaupt geschrieben werden.

3. Abbildung operativer Entitäten (Zimmer, Buchungen und Personal)

Nachdem unsere Referenzdaten vorliegen, gehe ich zum transaktionalen Kern des Hotelmanagement-Systems über: Zimmer, Buchungen und Personalabläufe. Jede Entität verweist mithilfe von Fremdschlüsseln auf unsere Grundtabellen:


entität "Zimmer" als zimmer {
  * zimmer_id : UUID <<PK>>
  --
  zimmernummer : VARCHAR(10) <<UK>>
  stockwerk : INTEGER
  zimmerart_id : UUID <<FK>>
  kapazität : INTEGER
  grundpreis : DECIMAL(10,2)
  ist_verfügbar : BOOLEAN
  hat_ausblick : BOOLEAN
  quadratfuß : INTEGER
  letzte_erneuerung : DATE
}

entität "Buchung" als buchung {
  * buchungs_id : UUID <<PK>>
  --
  kunden_id : UUID <<FK>>
  zimmer_id : UUID <<FK>>
  anreisedatum : DATE
  abreisedatum : DATE
  anzahl_gäste : INTEGER
  gesamtbetrag : DECIMAL(10,2)
  status : VARCHAR(20)
  besondere_wünsche : TEXT
  erstellt_am : TIMESTAMP
  aktualisiert_am : TIMESTAMP
  bestätigungscode : VARCHAR(20) <<UK>>
}
    

4. Festlegen finanzieller und servicebezogener Beziehungen

Um die Architektur abzuschließen, stelle ich die Rechnungsdaten (Zahlungen und Rechnungen) sowie Hilfsdienstleistungen wie Zimmerservice, die vom Hotelpersonal erbracht werden, dar. Um alles miteinander zu verbinden, definiere ich die Kardinalität ausdrücklich mit der Standard-Notation von PlantUML:


' Beziehungen
customer ||--o{ reservation : "macht"
room ||--o{ reservation : "zugeordnet zu"
reservation ||--|| payment : "hat"
reservation ||--|| invoice : "erzeugt"
reservation ||--o{ roomservice : "fordert an"
staff ||--o{ roomservice : "erfüllt"
roomtype ||--o{ room : "kategorisiert"

@enduml
    

Entwurfsentscheidung: Die Verwendung der präzisen Krähenfuß-Notation (wie ||--o{ für obligatorische zu optionale ein-zu-viele-Beziehungen) stellt sicher, dass die Geschäftslogikregeln – wie die Anforderung, dass eine Buchung einen Kunden erfordert, aber ein Kunde möglicherweise mehrere oder keine aktiven Buchungen hat – genau modelliert werden.

 

Der vollständige PlantUML-Skript

Hier ist der vollständige, zusammengestellte Quellcode für unsere Hotelmanagement-ERD. Sie können diesen Code direkt in Ihren bevorzugten kostenlosen PlantUML-Editor zum Bearbeiten oder Rendern von Vektorgrafiken:

@startuml 

title Hotelmanagement-ERD

hide circle
von links nach rechts direction

' Entitäten mit Attributen definieren
entity "Kunde" 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 "Zimmer" 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 "Zimmertyp" 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 "Buchung" 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 "Zahlung" 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 "Rechnung" 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 "Mitarbeiter" 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 "Zimmerservice" 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)
}

' Beziehungen
customer ||--o{ reservation : "macht"
room ||--o{ reservation : "zugeordnet zu"
reservation ||--|| payment : "hat"
reservation ||--|| invoice : "erzeugt"
reservation ||--o{ roomservice : "fordert an"
staff ||--o{ roomservice : "erfüllt"
roomtype ||--o{ room : "kategorisiert"

@enduml

Editing a ERD in Visual Paradigm VPasCode


Bringen Sie Ihre Datenbankmodelle mit VPasCode zum Leben

Die Erstellung komplexer Datenbankmodelle muss nicht bedeuten, sich mit unhandlichen Drag-and-Drop-Benutzeroberflächen herumzuschlagen. Durch die Nutzung eines Diagramm-als-Code-Ansatzes bleibt Ihre Architektur versionskontrolliert, sauber und problemlos wartbar.

Bereit, Ihre eigenen Systemarchitekturen zu erstellen? Gehen Sie zu VPasCode um heute Echtzeit-Rendering, automatische Formatdetektion und nahtlose Exporte für Ihre technische Dokumentation zu erleben!

Nach oben scrollen