एक एंटिटी रिलेशनशिप डायग्राम (ERD) क्या है?
एक एंटिटी रिलेशनशिप डायग्राम (ERD) एक संरचनात्मक ब्लूप्रिंट है जिसका उपयोग संबंधात्मक डेटाबेस के डिजाइन, दस्तावेजीकरण और विश्लेषण के लिए किया जाता है। यह प्रणाली के भीतर तालिकाओं (एंटिटीज) को, उनमें शामिल विशिष्ट स्तंभों (गुणधर्मों) को और उन तालिकाओं के बीच जुड़ाव को दृश्यमान करता है। PlantUML में, ERD को इनफॉर्मेशन इंजीनियरिंग (IE) नोटेशन, जो मानक क्राउ के पैर नोटेशन संबंधात्मक सीमाओं का प्रतिनिधित्व करने के लिए उपयोग करता है।
चाहे आप माइक्रोसर्विस डेटा स्टोर के डिजाइन कर रहे हों, SQL जॉइन पथ को अनुकूलित कर रहे हों, या एक एंटरप्राइज-वाइड डेटा वेयरहाउस आर्किटेक्चर को मैप कर रहे हों, एक टेक्स्ट-आधारित UML ERD यह सुनिश्चित करता है कि आपके डेटाबेस स्कीमा पूरी तरह स्पष्ट हैं। VPasCode, आप एक साफ, घोषणात्मक सिंटैक्स का उपयोग करके अपनी डेटाबेस तालिकाओं, इंडेक्स कीवर्ड्स और तार्किक संबंधों को परिभाषित कर सकते हैं। इंजन स्वचालित रूप से तालिका बॉक्स के आकार को संभालता है और आपके फॉरेन की कनेक्टर स्ट्रिंग्स को बिना किसी ओवरलैपिंग लेआउट लाइन के रूट करता है।
कोर सिंटैक्स गाइड: तत्व और निर्माण
PlantUML में एक विश्वसनीय IE-शैली ERD बनाने के लिए संरचित एंटिटी ब्लॉक्स, स्पष्ट की निर्देशन और क्राउ के पैर कार्डिनैलिटी मॉडिफायर्स पर निर्भरता होती है।
1. एंटिटीज की घोषणा करना (डेटाबेस तालिकाएं)
आप डेटाबेस तालिका की घोषणा entityकीवर्ड के साथ करते हैं, जिसके बाद तालिका का नाम और कुछ कर्ली ब्रेसेज आते हैं। ब्रेसेज के भीतर, आप अपनी तालिका के स्तंभों की सूची बनाते हैं। अपने स्कीमा को साफ और पढ़ने योग्य बनाने के लिए, एक क्षैतिज रेखा सेपरेटर (--) का उपयोग करें ताकि आपकी प्राथमिक/परावर्तित कीज को मानक डेटा विशेषताओं से अलग किया जा सके:
entity "users" as users_table {
id : INT [PK]
--
email : VARCHAR(255)
created_at : TIMESTAMP
} 
2. प्राथमिक और परावर्तित कीज की निर्धारण
जबकि टेक्स्ट संकेत जैसे `[PK]` या `[FK]` अच्छे काम करते हैं, PlantUML का IE इंजन दृश्य की आइकन्स का समर्थन भी करता है। एक एस्टरिस्क (*) एक विशेषता के सामने रखने से इसे **अनिवार्य (नॉन-नल)** कॉलम के रूप में निर्दिष्ट करता है, जबकि एक साफ टेक्स्ट स्ट्रिंग या टैग स्पष्ट इंडेक्सिंग संदर्भ जोड़ता है:
संस्था "आदेश" {
* आईडी : पूर्णांक <<पीके>>
--
* उपयोगकर्ता_आईडी : पूर्णांक <<एफके>>
छूट_कोड : वर्चुअल(50)
} 
3. क्राउ कांटा कार्डिनैलिटी और संबंधों का मैपिंग
तालिकाओं को जोड़ने और संदर्भात्मक अखंडता सीमाओं को लागू करने के लिए डैश, कोष्ठक और पाइप चरित्रों के संयोजन का उपयोग करें। IE नोटेशन में, इन प्रतीकों से अलग **क्राउ कांटा** सिर बनते हैं जो डेटाबेस संबंधों का प्रतिनिधित्व करते हैं:
||--||**बिल्कुल एक से बिल्कुल एक:** एक सख्त, अनिवार्य एक-से-एक मैपिंग।||--o|**बिल्कुल एक से शून्य या एक:** एक वैकल्पिक एक-से-एक मैपिंग।||--|{**बिल्कुल एक से एक या बहुत सारे:** एक अनिवार्य एक-से-बहुत संबंध।||--o{**बिल्कुल एक से शून्य, एक या बहुत सारे:** एक मानक, वैकल्पिक एक-से-बहुत संबंध।
उपयोगकर्ता_तालिका ||--o{ आदेश : "स्थापित करता है" 
स्पष्ट डेटाबेस स्कीमा के लिए बेस्ट प्रैक्टिसेज
- केसिंग नियमों का बनाए रखें: अपनी संस्था घोषणाओं को पूर्वानुमानित रखें। निचले मामले के स्नेक_केस (उदाहरण के लिए,
आदेश_आइटम) वास्तविक SQL-मैप्ड तालिकाओं के लिए या अवधारणात्मक डोमेन मॉडल्स के लिए ऊपरी मामले के कैमल_केस का उपयोग करें। - हमेशा विदेशी कुंजियों का दस्तावेजीकरण करें: जब दो तालिकाओं को जोड़ते हैं, तो हमेशा बच्चे तालिका ब्लॉक के भीतर विदेशी कुंजी कॉलम को निर्दिष्ट करें। इससे डेटा माइग्रेशन के दौरान इंजीनियरिंग टीमों के लिए स्पष्ट संदर्भ संदर्भ प्रदान करता है।
- क्राउ कांटा अंतराल को नियंत्रित करें: दर्जनों तालिकाओं वाले जटिल डेटाबेस स्कीमा जल्दी से भीड़ बन सकते हैं। यदि आपकी संबंध रेखाएं अस्वाभाविक रूप से एक दूसरे को काटने लगती हैं, तो अपने डबल-डैश कनेक्टर्स (
--) को तीन या चार डैश (---) से बदलें ताकि तालिकाओं को अलग किया जा सके और लेआउट इंजन को ग्रिड को व्यवस्थित करने के लिए अधिक जगह मिल सके।
वास्तविक दुनिया के PlantUML ERD उदाहरण
उदाहरण 1: मूल ई-कॉमर्स संबंधात्मक मॉडल (कीज़ और मैपिंग)
यह कार्यात्मक ब्लूप्रिंट एक मूल ई-कॉमर्स डेटाबेस लेनदेन लूप का मॉडल बनाता है, जो उपयोगकर्ताओं, आदेशों और भुगतान लेजरों के बीच कॉर्व्स फुट संबंधों के उपयोग से जुड़ने के तरीके को दिखाता है।
@startuml
' एंटिटी बॉक्स के रेंडरिंग को तेज आधुनिक वर्गों में जमे रखें
hide circle
skinparam LINETYPE ortho
entity "उपयोगकर्ता" as user {
* id : INT <<PK>>
--
* email : VARCHAR(100)
* password_hash : VARCHAR(255)
phone : VARCHAR(20)
}
entity "आदेश" as order {
* id : INT <<PK>>
--
* user_id : INT <<FK>>
* total_amount : DECIMAL(10,2)
status : VARCHAR(50)
}
entity "भुगतान लेजर" as ledger {
* id : INT <<PK>>
--
* order_id : INT <<FK>>
* transaction_reference : VARCHAR(100)
gateway : VARCHAR(50)
}
' संबंधात्मक स्कीमा बाइंडिंग परिभाषित करें
user ||--o{ order : "रखता है"
order ||--|| ledger : "उत्पन्न करता है"
@enduml 
सिंटैक्स विश्लेषण: निर्देश hide circle डिफ़ॉल्ट UML क्लास टोकन बबल्स को अक्षम करता है, जबकि skinparam LINETYPE ortho संबंध पथ को साफ 90 डिग्री के समकोण में बल देता है। स्कीमा स्पष्ट रूप से दिखाता है कि एक उपयोगकर्ता शून्य या एक से अधिक आदेश रख सकता है (||--o{) जबकि एक आदेश को बिल्कुल एक संबंधित भुगतान लेजर रिकॉर्ड होना चाहिए (||--||).
उदाहरण 2: उन्नत सामग्री प्रबंधन प्रणाली स्कीमा (बहु-से-बहु प्रतिच्छेदन)
यह उन्नत उद्यम ब्लूप्रिंट एक पूर्ण सामग्री प्रबंधन प्रणाली (CMS) टोपोलॉजी का नक्शा बनाता है। इसमें एक मध्यवर्ती मैपिंग तालिका के उपयोग से बहु-से-बहु आर्किटेक्चर को साफ तरीके से संभालने के तरीके को दिखाया गया है।
@startuml
hide circle
skinparam LINETYPE ortho
entity "पोस्ट" as post {
* id : INT <<PK>>
--
* author_id : INT <<FK>>
* title : VARCHAR(255)
slug : VARCHAR(255)
body : TEXT
}
entity "श्रेणियाँ" as category {
* id : INT <<PK>>
--
* name : VARCHAR(100)
description : VARCHAR(255)
}
entity "पोस्ट_श्रेणी_मैपिंग" as mapping {
* post_id : INT <<PK>><<FK>>
* category_id : INT <<PK>><<FK>>
--
assigned_at : TIMESTAMP
}
entity "टिप्पणियाँ" as comment {
* id : INT <<PK>>
--
* post_id : INT <<FK>>
author_name : VARCHAR(100)
* content : TEXT
}
' संबंधात्मक लिंक संरचनाएँ
post ||--o{ mapping : "समावेश करता है"
category ||--o{ mapping : "श्रेणीबद्ध करता है"
post ||--o{ comment : "जोड़ता है"
@enduml 
सिंटैक्स विश्लेषण: यह टेम्पलेट पोस्ट और श्रेणियों के बीच एक पारंपरिक बहु-से-बहु संबंध का मॉडल बनाता है। उन्हें सीधे जोड़ने के बजाय, इसमें एक मध्यवर्ती तालिका (पोस्ट_श्रेणी_मैपिंग) जहाँ दोनों कॉलम एक संयुक्त प्राथमिक कुंजी के रूप में कार्य करते हैं। कॉर्व्स फुट संकेतक स्पष्ट रूप से निर्माण संबंधों को टिप्पणियों तक नीचे नक्शा बनाते हैं।