PlantUMLとVPasCodeを用いたホテル管理ERDの構築

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.

ホスピタリティのような複雑な分野の堅牢なデータベースアーキテクチャを設計する際、関係を明確に可視化することは非常に重要です。顧客プロフィールのマッピング、部屋在庫の追跡、請求の管理など、あらゆる場面で、構造が整ったエンティティ関係図(ERD)は開発中に膨大な時間を節約します。このマスタークラスでは、PlantUMLを用いて、VPasCodeの内部で、どのように包括的なホテル管理ERDをゼロから構築したかを丁寧に説明します。無料のPlantUMLエディタ, VPasCode.

1. PlantUML環境の初期化

まず、スクリプトの基盤構造を設定します。多数の属性を含む複雑なスキーマを扱う際、レイアウトの可読性が最も重要です。不要なごちゃごちゃを非表示にし、図のレイアウト方向を最適化するようにPlantUMLを設定します:


@startuml 
title ホテル管理ERD

hide circle
left to right direction
    

なぜこのアプローチなのか?デフォルトの属性円を非表示にすることで、エンティティボックスを洗練され、現代的な見た目に保ちます。方向をleft to right directionに設定することで、広いERDが縦方向に管理不能になるのを防ぎ、複数テーブル間の関係を論理的に広げることができます。

2. コアエンティティと属性の定義

次に、ビジネスドメインを表すコアエンティティを定義する必要があります。各エンティティには主キー、一意制約、型付き属性を構造化して定義します。以下に、コアのCustomerおよびRoomTypeエンティティの設定方法を見てみましょう:


entity "Customer" as customer {
  * 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)
}

entity "RoomType" as roomtype {
  * 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
}
    

<<PK>>や<<UK>>のような明確なマーカーを定義することで、データベース移行スクリプトが書かれる前から、誰がコードを確認してもインデックス付けや一意性のルールを即座に理解できます。<<PK>>および<<UK>>、誰がコードを確認してもインデックス付けや一意性のルールを即座に理解できます。

3. 操作エンティティのマッピング(部屋、予約、スタッフ)

参照データを整えた後、ホテル管理システムのトランザクションの核となる部屋、予約、スタッフのワークフローに移行します。各エンティティは外部キーを使って、基盤となるテーブルにリンクします:


entity "Room" as room {
  * 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
}

entity "Reservation" as reservation {
  * 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. 財務およびサービス関係の確立

アーキテクチャを完成させるために、支払い記録(支払いと請求書)およびホテルスタッフが担当する補助サービス(ルームサービスなど)をマッピングします。すべてをつなげるために、標準的なPlantUML表記を使って、カーディナリティを明確に定義します:


' 関係性
customer ||--o{ reservation : "作成する"
room ||--o{ reservation : "割り当てられる"
reservation ||--|| payment : "保有する"
reservation ||--|| invoice : "生成する"
reservation ||--o{ roomservice : "依頼する"
staff ||--o{ roomservice : "対応する"
roomtype ||--o{ room : "分類する"

@enduml
    

設計選択:正確なクロウズフット記法(例えば ||--o{必須対オプションの1対多関係を表すために)を使用することで、予約には顧客が必要だが、顧客が複数またはゼロのアクティブな予約を持つ可能性があるといったビジネスロジックルールが正確にモデル化されます。

 

完全なPlantUMLスクリプト

ここに、ホテル管理ERDの完全な統合ソースコードを示します。このコードを、お好みの 無料のPlantUMLエディタにコピー&ペーストして、編集またはベクターグラフィックスのレンダリングが可能です:

@startuml 

title ホテル管理ERD

hide circle
left to right direction

' エンティティと属性を定義
entity "顧客" 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 "部屋" 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 "部屋タイプ" 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 "予約" 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 "支払い" 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 "請求書" 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 "スタッフ" 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 "ルームサービス" 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)
}

' 関係性
customer ||--o{ reservation : "作成する"
room ||--o{ reservation : "割り当てられる"
reservation ||--|| payment : "保有する"
reservation ||--|| invoice : "生成する"
reservation ||--o{ roomservice : "依頼する"
staff ||--o{ roomservice : "対応する"
roomtype ||--o{ room : "分類する"

@enduml

Editing a ERD in Visual Paradigm VPasCode


VPasCodeでデータベース設計を現実のものに

複雑なデータベースモデルを構築するには、使いにくいドラッグアンドドロップ型のUIと格闘する必要はありません。図をコードとして扱うアプローチを活用することで、アーキテクチャはバージョン管理され、クリーンで、簡単に保守可能な状態を保ちます。

自らのシステムアーキテクチャを構築してみたいですか? 今すぐ VPasCodeへアクセスして、リアルタイムレンダリング、自動フォーマット検出、技術文書へのスムーズなエクスポートを今日から体験しましょう!

上部へスクロール