यह बहुत अच्छा है कि आप अपने व्यक्तिगत अनुभव से, आपके द्वारा जिस डेटा के साथ काम कर रहे हैं, उसे समझने, वर्गीकृत करने और मॉडल करने के लिए समय निकाल रहे हैं, यह सब भविष्य के परिवर्तनों के लिए पूरी विकास प्रक्रिया को आसान और बहुत लचीला बनाता है। और मुझे पूरा यकीन है कि आप इस बारे में पहले से ही अवगत हैं।
प्रारंभिक डेटा मॉडल और व्यापार नियम ग्रहण किया
मैंने आपके नियमों को समझने के बाद आपके विवरणों को समझने के लिए, आपके द्वारा पढ़े गए और आपके आरेखों की बारीकी से जांच करने के बाद अपने द्वारा ग्रहण किए गए व्यावसायिक नियमों की एक सूची को परिभाषित किया है। इस तरह की सूची को परिभाषित करने के बाद, मैंने एक IDEF1X [1] डेटा मॉडल प्राप्त किया, जिसे मैंने एक बाहरी प्लेटफॉर्म (ड्रॉपबॉक्स) में .PDF दस्तावेज़ के रूप में अपलोड करने का फैसला किया था, क्योंकि इसके प्रारूप के कारण यह डेटा मॉडल एक एम्बेडेड छवि में अच्छी तरह से फिट नहीं होता है। ये दो साधन कुछ महत्वपूर्ण बिंदुओं के संदर्भ के रूप में उपयोगी होने वाले हैं, जिन्हें मैं आगे बढ़ने के लिए हल करने के लिए नीचे दिए गए ऐस्पेक्ट्स नामक खंड में गणना करता हूं ।
सबसे पहले, यहाँ है ...
चूंकि यह केवल यही है, प्रारंभिक, इसे एक ऐसा साधन मानें जो हमें वांछित अंतिम डेटा मॉडल को तैयार करने में मदद करता है।
मान लिया व्यावसायिक नियम
कहा कि प्रारंभिक डेटा मॉडल व्यावसायिक नियमों (आपके प्रश्न से अनुमानित) के संग्रह से लिया गया है, जिसे मैं इस प्रकार समझूंगा:
संगठन और प्रोफाइल
ध्यान दें कि Profileवर्तमान में इसके लिए एक पर्याय के रूप में समझा जाता है Person।
- एक -से-
Organization एक का मित्र है । Profiles
- एक -से-
Organization एक का मित्र है । Organizations
- एक -से-
Organization एक का सदस्य है । Organizations
- A एक-से-
Profile एक का सदस्य है ।Organizations
- A
Profile, टू-वन का मित्र है Profiles।
- A एक-से-
Profile एक का सदस्य है । Profiles
स्थान और पते
- एक एक-से-कई
Organization का मालिक है । Locations
- ए
Locationको एक-से-कई LocationTypes ( केवल एक दिए गए बिंदु पर एक समय में) द्वारा वर्गीकृत किया जाता है ।
- एक
Locationहो सकता है एक-से-कई Addresses ( एक Physical , एक के लिए Shipping, एक के लिए Billing, या एक है कि सभी ने कहा उद्देश्यों को पूरा करती, या एक है कि जोड़ती दो उद्देश्यों और एक और है कि कार्य करता है केवल एक उनमें से)।
एक -से-कईAddress द्वारा रखा जा सकता है या, एक और तरीका है, एक-से-कई रखता है । ProfilesProfile Addresses
एक विशिष्ट Addressद्वारा इस्तेमाल किया जा सकता है एक-से-कई Profiles (के रूप में सेवारत Physicalके लिए एक Profile , के लिए इस्तेमाल किया जा रहा Billingद्वारा एक अलग से एक , आदि)। तो, के Addressलिए एक समान तरीके से काम करता है Locationsऔर Profiles।
- इस प्रकार, एक व्यक्ति एक ही समय में , प्रकार का
Addressहो सकता है , और ।PhysicalShipping Billing
स्थान और भूमिकाएँ
- A एक-से-कई
Location खोलता है । Roles
- एक से कई
Role में किया जा सकता है । Locations
- एक
Profile(एक बार यह के रूप में स्थापित किया गया है Memberएक के Organization) बाहर ले जाने के कर सकते हैं एक-से-कई Roles , में एक-से-कई Locations (लेकिन केवल एक विशिष्ट Roleप्रत्येक में Locationसमय में एक खास बिंदु पर, यानी, कभी नहीं दो या अधिक Roles एक ही समय में )।
आगे बढ़ने के लिए हल करने की आकांक्षा
अपने डेटा मॉडल के रिज़ॉल्यूशन में आगे बढ़ने के लिए, यहां प्रासंगिक बिंदुओं की एक सूची दी गई है, जो एक बार हमें काम करने के बाद इस लक्ष्य तक पहुंचने में हमारी मदद करने जा रहे हैं:
मैंने मान लिया है कि Profileआपके संदर्भ में इस शब्द का एक जैसा (या समान) अर्थ है Person, लेकिन यह थोड़ा अलग हो सकता है। इस तरह, क्या आप कहेंगे कि आपके परिदृश्य में, निकाय Organizationऔर Personउपप्रकार हैं Profile?
क्या एक Profile(या Person) खुद को एक-से-कई कर सकता है EmailAddresses , या एक Profile(या Person) बिल्कुल एक के लिए तय है EmailAddress?
क्या आप के Organizationमाध्यम से संपर्क किए जाने की संभावना प्रदान करना चाहते हैं Telephoneऔर Email, या आप केवल Profile(या Person) के लिए संभव होना चाहते हैं?
मुझे लगता है कि एक सही प्रकार से एक के लिए Locationतय है , क्या यह सही है? AddressPhysical
क्या यह एक-से-कई अलग - अलग Locationद्वारा साझा किया जाना संभव है या , अन्यथा, केवल एक के स्वामित्व में हो सकता है ?Organizations Location Organization
आपने टिप्पणियों के माध्यम से कहा है कि एक Memberऔर एक होने का तथ्य Friendसमान है। जैसा कि आप मेरे प्रस्तावित प्रारंभिक डेटा मॉडल में देख सकते हैं, मैंने आपको मूल विनिर्देशों का पालन किया और विभिन्न संस्थाओं में सदस्यता Organizationऔर Profile(या Person) के सभी संभावित संयोजनों का चित्रण किया क्योंकि मुझे लगता है कि यह सबसे अच्छा संभव परिभाषित करने के प्रयास में सहायक हो सकता है आपके परिदृश्य के उस हिस्से के लिए संरचना। किस अर्थ में:
- मैं यह मानता हूं कि
an Organization is a Member of another Organizationकथन a Profile (or Person) is a Member of an Organizationमें इकाई के संबंध में कथन की तुलना में कथन का अलग-अलग प्रभाव है Location।
- आप डेटा मॉडल में देख सकते हैं, मुझे लगता है कि
Roleके Ownerएक लिए ही मान्य है Organization, और, मेरे लिए मान्य Rolesके लिए एक Profile(या Person), अंदर एक Locationहैं Adminऔर Member। आपका इन सभी के बारे में क्या विचार है? चूंकि आप उन व्यावसायिक नियमों के सीधे संपर्क में हैं जो आपकी स्थिति पर लागू होते हैं, तो आपको यह बताने की आवश्यकता है कि क्या मेरी धारणा सही है।
क्या एक Profile(या Person) Rolesसमान के अंदर अलग-अलग खेल सकते हैं Location? यानी, एक कर सकते हैं Personएक ही समय में हो सकता है, Adminऔर यह भी एक Memberही की Location? इस संबंध में क्या नियम हैं?
मुझे लगता है कि एक ही Profile(या Person) विभिन्न खेल सकते हैं Rolesअलग में Locations। उदाहरण के लिए: एक विशिष्ट Profile(या Person) Location"1 " में "व्यवस्थापक" है , और यह एक ही Profile(या Person) "2" में एक ही समय Memberमें एक " " है Location। क्या मैं सही हू?
क्या किसी विशेष के लिए एक ही समय में Locationअलग-अलग होना संभव है LocationTypes, या क्या किसी व्यक्ति Locationको ठीक एक धारण करने के लिए तय किया गया है LocationType?
क्या विशेषता Organization.Websiteकिसी विशेष संगठन के वेबसाइट पते का प्रतिनिधित्व करती है, जैसे "dba.stackexchange.com"?
यदि Profile"1" (समझा जाता है Person) "2" का Member(या Friend) है Profile, तो क्या Profile"1" के लिए "2" के स्वामित्व Roleमें होना संभव है ? मेरा मानना है कि इस तरह के परिदृश्य केवल एक और एक के बीच संबंधों के लिए मान्य हैं , आपको क्या लगता है?LocationProfileOrganizationMember Person
इसी तरह, अगर में Organization"1" एक है Member(या Friend) की Organization"2", इसके लिए संभव है Organization"1" बाहर ले जाने के लिए एक Roleएक में Locationके स्वामित्व में Organization"2"? फिर से, मुझे लगता है कि इस तरह के परिदृश्य केवल Organizationए और ए के बीच के रिश्तों के लिए मान्य हैं Member Person, क्या यह सही है?
इस संबंध में - मैं यह प्रश्न लिख रहा हूं- मुझे लगता है कि यह कहना उचित होगा कि इसमें केवल तीन अलग-अलग प्रकार के रिश्ते शामिल हैं Organizationsऔर Persons, और हम परिभाषित कर सकते हैं:
- (ए) एक
Organizationऔर एक Person" Membership" के बीच संबंध ।
- (बी) "और " के रूप में एक
Personऔर अलग के बीच संबंध ।PersonFriendhip
- (ग) हमें अभी तक एक व्यक्ति और दूसरे के बीच संबंधों का वर्णन करने के लिए एक सार्थक नाम मिल गया है ।
OrganizationOrganization
- तो, मुझे पता है कि आप (ए), (बी) और (सी) के बारे में क्या सोचते हैं।
क्या यह संभव है एक के लिए Organizationएक होने के लिए Friend(या एक Memberका) एक-से-कई अलग अलग Organizationsएक ही समय में? या यह केवल विशेष रूप से एक अलग के Organizationसाथ एक संबंध रखने के लिए ही संभव हैOrganization?
पहला अग्रिम दर्शाते हुए क्रमिक डेटा मॉडल
ऊपर सूचीबद्ध किए गए लंबित पहलुओं पर आपकी प्रतिक्रियाओं और प्रस्तावों पर ध्यान देने के बाद, मैंने निम्नलिखित बनाया है ...
हालाँकि मैं अभी तक इसके साथ बहुत सहज महसूस नहीं करता, लेकिन यह नया डेटा मॉडल निम्नलिखित व्यावसायिक नियमों को व्यक्त करता है:
- एक
Profileहै या तो एक Organization या एक Person। [2]
- एक
Profileकी भेंट दोस्त हो सकता है एक-से-कई FriendProfiles हैं, और एक Profileके स्वीकार करने दोस्त हो सकता है एक-से-कई FriendProfiles । [3]
- एक में कई
Location शामिल हो सकते हैं । [4] Locations
आपकी बाद की विशिष्ट टिप्पणियों के उत्तर
यह मेरे लिए वास्तव में दिलचस्प है कि मैं चिंताओं के अलगाव को नोट / यौगिक कर सकूं [जैसे कि LocationAddress और ProfileAddress] - क्योंकि मैं स्पष्ट रूप से सही रिश्तों के बिना उन सभी को पकड़ना चाहता था और [funnily, यह मेरे मूल ERD के साथ सही नहीं लगा]।
हां, यह एक अच्छी तुलना है, हालांकि मैं इसे चिंताओं को अलग नहीं कहूंगा (जो कि निश्चित रूप से, एप्लिकेशन प्रोग्रामिंग और डिजाइन में एक बुनियादी सिद्धांत है), क्योंकि यह शब्द आमतौर पर अनुप्रयोग विकास के चरण से संबंधित है और हम वर्तमान में खुद को पाते हैं। डेटा को समझने और इसकी तार्किक संरचना को डिजाइन करने का चरण।
अपने व्यक्तिगत अनुभव से, मैं समझता हूं कि इस चरण को अपने पूरे संदर्भ में महत्वपूर्ण चीजों को डालने के साथ करना है, यह उन संघों को देखने के साथ करना है जो विभिन्न संस्थाओं के बीच मौजूद हैं जो ब्याज के विशेष परिदृश्य में प्रासंगिकता के हैं, और फिर डेटा मॉडल में इन चीजों का चित्रण। जिस विशिष्ट मामले के बारे में आप टिप्पणी कर रहे हैं, उस Addressइकाई में अन्य संस्थाओं के साथ विभिन्न प्रकार के कनेक्शन हो सकते हैं, एक के साथ Profileऔर एक अलग के साथ Location।
और, हां, जब कुछ सही या स्वाभाविक नहीं लगता है , तो यह अच्छी तरह से एक संकेत हो सकता है कि किसी को प्रासंगिक डेटा को समझने के लिए अधिक प्रयास करने की आवश्यकता है। इस तरीके से, Addressइकाई उन चीजों में से एक है, जिन पर मैं विचार करता हूं, जिन पर अधिक ध्यान देने की आवश्यकता है, क्योंकि मुझे लगता है कि ए Profileऔर के बीच के रिश्ते को इकाई के माध्यम से नियंत्रित किया जा Address सकता है Location(इस तथ्य के कारण कि प्रत्येक Locationमें कम से कम एक भौतिक होना चाहिए Address), इसलिए हम नवीनतम मॉडल में चित्रित सहयोगी संस्था को खारिज कर सकते हैंProfileAddress , लेकिन आपको इन बिंदुओं को जारी रखना चाहिए और मुझे अपने विचारों से अवगत कराना चाहिए।
इसके अलावा, बेहतर पठनीयता [जैसे ProfileId - LocationOwnerProfileId] के लिए संस्थाओं में PK / FK संप्रदायों को बदलने के लिए IDEF1X में यह आम बात है?
हां, यह आपसे एक बहुत ही चतुर टिप्पणी है, क्योंकि IDEF1X फ़ॉरऑनडॉग कुंजियों को निरूपित करने के लिए भूमिका नामों के उपयोग की सिफारिश करता है , ताकि इकाई के अनुसार ऐसी विशेषताओं के अर्थ को कैप्चर किया जा सके जिसमें इसका उपयोग किया जा रहा है। यह भी ध्यान देने योग्य है कि यह भी प्राथमिक कुंजी प्रवासन की अवधारणा से दृढ़ता से संबंधित है । वास्तव में, भूमिका नाम का उपयोग IDEF1X से पहले है, क्योंकि यह मूल रूप से डॉ। ईएफ कोडड द्वारा अपने 1970 के सेमिनल पाठ में प्रस्तुत किया गया था। इस तरीके से, कोई स्पष्ट रूप से निष्ठा देख सकता है कि आईडीईएफ 1 एक्स मानक रिलेशनल मॉडल की ओर रहता है ।
मैं यह जानने के लिए आतुर हो जाऊंगा कि आपको क्या पसंद नहीं है / ऐसा नहीं लगता कि यह समाधान में / साथ मॉडल नहीं करता है?
Addressइकाई के बारे में पहले से ही वर्णित विवरणों के अलावा , मुझे यकीन नहीं है कि किसी विशेष में Rolesदिए गए द्वारा किए गए एक या एक के लिए बराबर हैं । मेरे दृष्टिकोण से, पहले एक के साथ जुड़े होने की जरूरत है , और फिर यह नियुक्त करेगा एक विशेष रूप से प्रदर्शन करने के लिए कहा , लेकिन आप परिदृश्य को बेहतर जानते हैं, इसलिए यह नियम अनावश्यक हो सकता है। इस संबंध में, मैं इस तथ्य के बारे में बात पर जोर देना है कि यह मुझे प्रासंगिक वर्णन या पता करने के लिए के लिए बहुत मददगार होगा जा रहा हूँ अर्थ है कि करने के लिए इस डेटा संरचना दे के भविष्य के उपयोगकर्ताओं , औरProfileLocationOrganizationPersonPersonOrganizationOrganizationPersonRoleLocationOrganizationProfileLocation, लेकिन मैं समझता हूं कि इसे गोपनीय जानकारी माना जा सकता है, इसलिए यह एक सीमा होगी।
वर्तमान संरचना के साथ, ऐसा लगता है कि हर कोई ( Organizationया Person) किसी से संबंधित हो सकता है (फिर से, Organizationया Person) और Roleकहीं भी / (कुछ भी ) कर सकता है ( Locationलेकिन), perharps, यह प्रिसिसेली है जिसे आप और उपयोगकर्ता इस डेटाबेस से उम्मीद कर रहे हैं जिसके लिए आप निश्चित रूप से अच्छी तरह से परिभाषित बाधाओं को प्रदान करेंगे। यदि यह मामला है, तो हम लगभग एक अंतिम समाधान प्रदान कर रहे हैं। चूंकि, स्वाभाविक रूप से, आपकी राय इस स्थिति में निर्णायक है, आपको इस विचारों को भी मानना चाहिए और फिर मुझे अपने निष्कर्षों को बताना चाहिए ताकि हम अंतिम कदम उठा सकें।
संभव दूसरी अग्रिम
दुर्भाग्य से, कॉमेडिकेशन कुछ सप्ताह पहले बंद हो गया, मुझे लगता है कि काम की प्रतिबद्धताओं के कारण आपको मिलना चाहिए, जो पूरी तरह से उचित है। अगर हम अधिक स्थिर और मजबूत मॉडल विकसित कर लेते, तो मैं और अधिक सामग्री प्राप्त कर सकता था, लेकिन हमारी पिछली बातचीत के कारण, मैं यह मान सकता हूं कि मैं आपको सही दिशा में इंगित करने में सक्षम हूं।
इस प्रश्न और उत्तर प्रक्रिया में पहले से ही जो प्रस्तुत किया गया है, इसके अलावा, मैं मानता हूं कि पिछले डेटा मॉडल से एक नई प्रगति प्रदान करना अन्य साधकों के लिए एक समान समस्या के लिए सहायक हो सकता है। तो, मैंने बनाया है ...
संगठन और प्रोफाइल प्रारंभिक डेटा मॉडल - दूसरा अग्रिम
जैसा कि इस तरह के डेटा मॉडल में देखा जा सकता है, मैंने उन कई-से-कई संबंधों को हटा दिया है, जिन्हें मैंने पहले Profileऔर Addressबाद के मॉडल में दर्शाया है , क्योंकि किसी दिए गए Profileपहले से ही कई Addresses स्वामित्व से संबंधित है Locations।
एक और परिवर्तन जो इस नई अग्रिम में चित्रित किया गया है, वह यह है कि इसमें अब संभावना है कि किसी दिए Locationगए एक-से-कई स्वामित्व हो सकते हैं Profiles। नतीजतन, मैंने Locationप्राथमिक कुंजी ( LocationOwnerProfileIdविशेषता को खारिज करके ) को बदल दिया है और फिर एक सहयोगी संस्था ( कई-से-कई ) को जोड़ा है जो कि संबंधित Profileहै Location।
टिप्पणियाँ
1. आईडीईएफ 1 एक्स एक अत्यधिक अनुशंसित डेटा मॉडलिंग तकनीक है जिसे यूएस नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड एंड टेक्नोलॉजी ( एनआईएसटी ) ने 1993 में एक मानक के रूप में परिभाषित किया था ।
2. यह एक (सुपर) प्रकार-उप-प्रकार क्लस्टर का एक ऑयर्स है । यदि आप रुचि रखते हैं, तो यहां एक जवाब है जिसमें मैं इस तरह के संबंधों के साथ अधिक विस्तृत तरीके से व्यवहार करता हूं।
3. कई-से-कई पदानुक्रमित संबंधों का एक उदाहरण है , और संरचना के लिए बहुत अनुकरणीय है जिसने "पार्ट्स एक्सप्लोरेशन समस्या" का निश्चित समाधान दिया है । इस तरह का समाधान, निश्चित रूप से डॉ। एडगर फ्रैंक कॉड द्वारा अपने 1970 के व्यापक प्रभावशाली पेपर "बड़े साझा डेटा बैंकों के लिए डेटा का एक संबंधपरक मॉडल" में पेश किया गया था ।
4. जैसे, यह एक-से-कई (या कई-से-एक) पदानुक्रमित संबंध का एक उदाहरण है ।