यह बहुत अच्छा है कि आप अपने व्यक्तिगत अनुभव से, आपके द्वारा जिस डेटा के साथ काम कर रहे हैं, उसे समझने, वर्गीकृत करने और मॉडल करने के लिए समय निकाल रहे हैं, यह सब भविष्य के परिवर्तनों के लिए पूरी विकास प्रक्रिया को आसान और बहुत लचीला बनाता है। और मुझे पूरा यकीन है कि आप इस बारे में पहले से ही अवगत हैं।
प्रारंभिक डेटा मॉडल और व्यापार नियम ग्रहण किया
मैंने आपके नियमों को समझने के बाद आपके विवरणों को समझने के लिए, आपके द्वारा पढ़े गए और आपके आरेखों की बारीकी से जांच करने के बाद अपने द्वारा ग्रहण किए गए व्यावसायिक नियमों की एक सूची को परिभाषित किया है। इस तरह की सूची को परिभाषित करने के बाद, मैंने एक 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
द्वारा रखा जा सकता है या, एक और तरीका है, एक-से-कई रखता है । Profiles
Profile
Addresses
एक विशिष्ट Address
द्वारा इस्तेमाल किया जा सकता है एक-से-कई Profiles
(के रूप में सेवारत Physical
के लिए एक Profile
, के लिए इस्तेमाल किया जा रहा Billing
द्वारा एक अलग से एक , आदि)। तो, के Address
लिए एक समान तरीके से काम करता है Locations
और Profiles
।
- इस प्रकार, एक व्यक्ति एक ही समय में , प्रकार का
Address
हो सकता है , और ।Physical
Shipping
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
तय है , क्या यह सही है? Address
Physical
क्या यह एक-से-कई अलग - अलग 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
में होना संभव है ? मेरा मानना है कि इस तरह के परिदृश्य केवल एक और एक के बीच संबंधों के लिए मान्य हैं , आपको क्या लगता है?Location
Profile
Organization
Member
Person
इसी तरह, अगर में Organization
"1" एक है Member
(या Friend
) की Organization
"2", इसके लिए संभव है Organization
"1" बाहर ले जाने के लिए एक Role
एक में Location
के स्वामित्व में Organization
"2"? फिर से, मुझे लगता है कि इस तरह के परिदृश्य केवल Organization
ए और ए के बीच के रिश्तों के लिए मान्य हैं Member
Person
, क्या यह सही है?
इस संबंध में - मैं यह प्रश्न लिख रहा हूं- मुझे लगता है कि यह कहना उचित होगा कि इसमें केवल तीन अलग-अलग प्रकार के रिश्ते शामिल हैं Organizations
और Persons
, और हम परिभाषित कर सकते हैं:
- (ए) एक
Organization
और एक Person
" Membership
" के बीच संबंध ।
- (बी) "और " के रूप में एक
Person
और अलग के बीच संबंध ।Person
Friendhip
- (ग) हमें अभी तक एक व्यक्ति और दूसरे के बीच संबंधों का वर्णन करने के लिए एक सार्थक नाम मिल गया है ।
Organization
Organization
- तो, मुझे पता है कि आप (ए), (बी) और (सी) के बारे में क्या सोचते हैं।
क्या यह संभव है एक के लिए 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
दिए गए द्वारा किए गए एक या एक के लिए बराबर हैं । मेरे दृष्टिकोण से, पहले एक के साथ जुड़े होने की जरूरत है , और फिर यह नियुक्त करेगा एक विशेष रूप से प्रदर्शन करने के लिए कहा , लेकिन आप परिदृश्य को बेहतर जानते हैं, इसलिए यह नियम अनावश्यक हो सकता है। इस संबंध में, मैं इस तथ्य के बारे में बात पर जोर देना है कि यह मुझे प्रासंगिक वर्णन या पता करने के लिए के लिए बहुत मददगार होगा जा रहा हूँ अर्थ है कि करने के लिए इस डेटा संरचना दे के भविष्य के उपयोगकर्ताओं , औरProfile
Location
Organization
Person
Person
Organization
Organization
Person
Role
Location
Organization
Profile
Location
, लेकिन मैं समझता हूं कि इसे गोपनीय जानकारी माना जा सकता है, इसलिए यह एक सीमा होगी।
वर्तमान संरचना के साथ, ऐसा लगता है कि हर कोई ( 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. जैसे, यह एक-से-कई (या कई-से-एक) पदानुक्रमित संबंध का एक उदाहरण है ।