![]()
जब आप आतिथ्य जैसे जटिल क्षेत्रों के लिए विश्वसनीय डेटाबेस आर्किटेक्चर डिज़ाइन करते हैं, तो संबंधों को स्पष्ट रूप से दिखाना महत्वपूर्ण है। चाहे आप ग्राहक प्रोफाइल को मैप कर रहे हों, कमरे के स्टॉक को ट्रैक कर रहे हों, या बिलिंग का प्रबंधन कर रहे हों, एक अच्छी तरह से संरचित एंटिटी रिलेशनशिप डायग्राम (ERD) विकास के दौरान अनगिनत घंटे बचाता है। इस मास्टरक्लास में, मैं आपके साथ चलूंगा कि मैंने PlantUML का उपयोग करके शुरू से ही एक व्यापक होटल प्रबंधन ERD कैसे बनाया, जो VPasCode के अंदर हैमुफ्त PlantUML संपादक, VPasCode.

1. PlantUML पर्यावरण को प्रारंभ करना
मैं स्क्रिप्ट की आधारभूत संरचना सेट करके शुरू करता हूं। जब आप बहुत सारे विशेषताओं वाले जटिल स्कीमा के साथ काम करते हैं, तो लेआउट पठनीयता अत्यंत महत्वपूर्ण होती है। मैं PlantUML को अनावश्यक भार को छिपाने और डायग्राम लेआउट दिशा को अनुकूलित करने के लिए कॉन्फ़िगर करता हूं:
@startuml
title होटल प्रबंधन ERD
circle छिपाएं
बाएं से दाएं दिशा
इस दृष्टिकोण का क्या कारण है?डिफ़ॉल्ट विशेषता वृत्तों को छिपाने से एंटिटी बॉक्स साफ और आधुनिक रहते हैं। दिशा को सेट करना बाएं से दाएं दिशाविस्तृत ERD को ऊर्ध्वाधर रूप से अनियंत्रित होने से रोकता है, बहु-तालिका संबंधों को तार्किक रूप से फैलाता है।
2. मुख्य एंटिटी और विशेषताओं को परिभाषित करना
अगला, मुझे अपने व्यवसाय क्षेत्र का प्रतिनिधित्व करने वाली मुख्य एंटिटी को परिभाषित करने की आवश्यकता है। मैं प्रत्येक एंटिटी को उसके प्राथमिक कुंजियों, अद्वितीय सीमाओं और प्रकार वाली विशेषताओं के साथ संरचित करता हूं। आइए देखें कि मैंने मुख्य ग्राहक और कमरा प्रकारएंटिटी को कैसे सेट किया:
entity "ग्राहक" as ग्राहक {
* ग्राहक_id : UUID <<PK>>
--
प्रथम_नाम : VARCHAR(50)
अंतिम_नाम : VARCHAR(50)
ईमेल : VARCHAR(100) <<UK>>
फ़ोन : VARCHAR(20)
पता : TEXT
लॉयल्टी_पॉइंट्स : INTEGER
कुल_ठहराव : INTEGER
पंजीकृत_तिथि : TIMESTAMP
जन्म_तिथि : DATE
राष्ट्रीयता : VARCHAR(50)
}
entity "कमरा प्रकार" as कमरा_प्रकार {
* कमरा_प्रकार_id : UUID <<PK>>
--
प्रकार_नाम : VARCHAR(50) <<UK>>
विवरण : TEXT
मानक_क्षमता : INTEGER
आधार_मूल्य : DECIMAL(10,2)
अतिरिक्त_बिस्तर_शुल्क : DECIMAL(10,2)
रसोई_छोटा_कमरा_है : BOOLEAN
बालकनी_है : BOOLEAN
}
स्पष्ट चिह्नों जैसे <<PK>> और <<UK>>, कोई भी कोड को देखते समय डेटाबेस माइग्रेशन स्क्रिप्ट लिखे जाने से पहले ही इंडेक्सिंग और अद्वितीयता नियमों को समझ जाता है।
3. संचालन एंटिटी का मैपिंग (कमरे, बुकिंग और कर्मचारी)
हमारे संदर्भ डेटा के स्थापित होने के बाद, मैं होटल प्रबंधन प्रणाली के लेनदेन के केंद्र में जाता हूं: कमरे, बुकिंग और कर्मचारी के कार्यप्रवाह। प्रत्येक एंटिटी विदेशी कुंजियों के उपयोग से हमारी आधारभूत तालिकाओं से जुड़ती है:
entity "कमरा" as कमरा {
* कमरा_id : UUID <<PK>>
--
कमरा_संख्या : VARCHAR(10) <<UK>>
मंजिल_संख्या : INTEGER
कमरा_प्रकार_id : UUID <<FK>>
क्षमता : INTEGER
आधार_मूल्य : DECIMAL(10,2)
उपलब्ध_है : BOOLEAN
दृश्य_है : BOOLEAN
वर्ग_फुट : INTEGER
अंतिम_आधुनिकीकरण : DATE
}
entity "बुकिंग" as बुकिंग {
* बुकिंग_id : UUID <<PK>>
--
ग्राहक_id : UUID <<FK>>
कमरा_id : UUID <<FK>>
आगमन_तिथि : DATE
निर्गमन_तिथि : DATE
अतिथि_संख्या : INTEGER
कुल_राशि : DECIMAL(10,2)
स्थिति : VARCHAR(20)
विशेष_अनुरोध : TEXT
निर्मित_तिथि : TIMESTAMP
अद्यतनित_तिथि : TIMESTAMP
पुष्टि_कोड : 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{ अनिवार्य-से-वैकल्पिक एक-से-बहुत के संबंधों के लिए) व्यापार तर्क नियमों—जैसे एक बुकिंग के लिए ग्राहक की आवश्यकता होती है, लेकिन एक ग्राहक के एक या शून्य सक्रिय बुकिंग हो सकती है—को सटीक ढंग से मॉडल करने में सुनिश्चित करता है।
पूर्ण PlantUML स्क्रिप्ट
यहाँ हमारे होटल प्रबंधन ERD के लिए पूर्ण, संयुक्त स्रोत कोड है। आप इस कोड को अपने पसंदीदा मुफ्त PlantUML संपादक में संपादित या वेक्टर ग्राफिक्स रेंडर करने के लिए:
@startuml
title होटल प्रबंधन ERD
hide circle
बाएं से दाएं दिशा
' एककों को विशेषताओं के साथ परिभाषित करें
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 
जटिल डेटाबेस मॉडल बनाने के लिए असंगत ड्रैग-एंड-ड्रॉप उपयोगकर्ता इंटरफेस के साथ लड़ने की आवश्यकता नहीं है। डायग्राम-एज-कोड दृष्टिकोण का उपयोग करके, आपकी आर्किटेक्चर संस्करण नियंत्रित, साफ और आसानी से बनाए रखी जा सकती है।
अपनी स्वयं की सिस्टम आर्किटेक्चर बनाने की कोशिश करने के लिए तैयार हैं? जाएं VPasCode आज ही अपनी तकनीकी दस्तावेज़ीकरण के लिए रियल-टाइम रेंडरिंग, स्वचालित फॉर्मेट डिटेक्शन और बिना किसी दिक्कत के निर्यात का अनुभव करें!



