हां, कई-से-कई (संक्षिप्तता के लिए एम: एन) संघों या रिश्तों की पहचान एक ऐसी स्थिति है जो एक वैचारिक स्कीमा को बिछाने के दौरान एक डेटाबेस व्यवसायी का सामना करना पड़ता है। उक्त कार्डिनैलिटी रेशियो के संबंध बहुत भिन्न प्रकृति के कारोबारी वातावरण में आते हैं, और जब SQL, DDL व्यवस्था के माध्यम से तार्किक स्तर पर सही ढंग से प्रतिनिधित्व किया जाता है, तो वे हानिकारक अतिरेक का परिचय नहीं देते हैं ।
इस तरह, एक मॉडलिंग मॉडलिंग अभ्यास का उद्देश्य उच्च परिशुद्धता के साथ ब्याज के व्यावसायिक संदर्भ की प्रासंगिक विशेषताओं को प्रतिबिंबित करना चाहिए ; इसलिए, यदि आप सही तरीके से पहचानते हैं कि कई एम: एन एसोसिएशन हैं, तो आपको उन्हें (ए) वैचारिक स्कीमा में और (बी) संबंधित तार्किक-स्तर की घोषणाओं में व्यक्त करना होगा , चाहे वह कितने भी कनेक्शन हो। अन्य प्रकार के कार्डिनैलिटी अनुपातों को संबोधित करना होगा।
व्यापार नियम
आपने एक सुविचारित प्रश्न की आपूर्ति की है, और यह भी स्पष्ट किया है कि जिस डेटाबेस पर आप काम कर रहे हैं, वह विशुद्ध रूप से काल्पनिक है, जो एक महत्वपूर्ण बिंदु है क्योंकि मैं यह मानता हूं कि "वास्तविक दुनिया" का व्यवसाय जैसा विचार विचाराधीन है, वह कहीं अधिक व्यापक होगा और, इसलिए, अधिक जटिल सूचनात्मक आवश्यकताओं का अर्थ होगा।
मैंने तय किया (1) कुछ नियम और विस्तार करें जो आपके द्वारा प्रदान किए गए व्यावसायिक नियमों के लिए (2) एक अधिक वर्णनात्मक वैचारिक स्कीमा का उत्पादन करते हैं- हालांकि अभी भी काल्पनिक है-। यहाँ कुछ योगों के बारे में बताया गया है:
- एक पार्टी 1 या तो एक व्यक्ति या एक संगठन है
- एक पार्टी को वास्तव में एक पार्टी टाइप द्वारा वर्गीकृत किया गया है
- एक पार्टी टाइप शून्य-एक-या-कई दलों को वर्गीकृत करता है
- एक संगठन शून्य-एक-या कई उत्पाद विकसित करता है
- एक उत्पाद या तो एक प्रणाली या एक खेल है
- एक उत्पाद को ठीक एक-एक ProductType द्वारा वर्गीकृत किया गया है
- एक सिस्टम बिल्कुल एक सिस्टम टाइप द्वारा सूचीबद्ध है
- एक गेम को कई-कई सिस्टम्स के माध्यम से खेला जा सकता है
- एक सिस्टम का उपयोग एक से कई गेम खेलने के लिए किया जाता है
- एक खेल शून्य से एक या कई द्वारा वर्गीकृत किया जाता शैलियां
- एक शैली शून्य-एक-या-कई खेलों का वर्गीकरण करती है
- एक उत्पाद एक से कई नौकरियां उत्पन्न करता है
- एक नौकरी शून्य से एक या कई द्वारा पूरी की है लोगों को , जो खेल रहे हैं भूमिका के सहयोगी
- एक व्यक्ति शून्य-एक-या-कई नौकरियों में एक सहयोगी है
1 पार्टी कानूनी संदर्भों में उपयोग किया जाने वाला एक शब्द है जो किसी व्यक्ति या एकल समूह की रचना करने वाले व्यक्तियों के समूह का उल्लेख करता है, इसलिए यह संप्रदाय लोगों और संगठनों का प्रतिनिधित्व करने के लिए उपयुक्त है ।
IDEF1X आरेख
इसके बाद, मैंने चित्र 1 में दिखाया गया IDEF1X 2 आरेख बनाया (उच्च रिज़ॉल्यूशन में इसे देखने के लिए लिंक पर क्लिक करना सुनिश्चित करें), एकल ग्राफ़िकल डिवाइस में समेकित व्यापार नियम ऊपर प्रस्तुत किए गए (कुछ अन्य जो प्रासंगिक लगते हैं) के साथ:
सूचना मॉडलिंग के लिए 2 एकीकरण परिभाषा ( आईडीईएफ 1 एक्स ) एक उच्च अनुशंसित डेटा मॉडलिंग तकनीक है जिसे दिसंबर 1993 में यूनाइटेड स्टेट्स नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड एंड टेक्नोलॉजी (एनआईएसटी) द्वारा मानक के रूप में स्थापित किया गया था । यह (ए) संबंधपरक मॉडल के एकमात्र प्रवर्तक द्वारा लिखित प्रारंभिक सैद्धांतिक सामग्री पर आधारित है, अर्थात, डॉ ईएफ कोड; डॉ। पीपी चेन द्वारा विकसित (बी) डेटा की इकाई-संबंध दृश्य ; और (ग) रॉबर्ट जी ब्राउन द्वारा निर्मित लॉजिकल डाटाबेस डिजाइन तकनीक पर भी।
जैसा कि आप देख सकते हैं, मैंने केवल तीन M: N संघों को इसी सहयोगी संस्था प्रकारों के माध्यम से दर्शाया है , अर्थात:
- सहयोगी
- SystemGame
- GameGenre
अन्य पहलुओं में, दो अलग - अलग सुपर-टाइप-उपप्रकार संरचनाएं हैं, जहां:
व्यक्ति और संगठन पार्टी के पारस्परिक रूप से अनन्य इकाई उपप्रकार हैं , उनकी इकाई सुपरटाइप
उत्पाद सिस्टम और गेम का सुपरटाइप है , जो बदले में पारस्परिक रूप से अनन्य उपप्रकार हैं
यदि आप सुपरटाइप-सबटाइप संघों से परिचित नहीं हैं, तो आपको मदद के लिए उदाहरण मिल सकते हैं, उदाहरण के लिए, मेरे सवालों के जवाब:
इलस्ट्रेटिव लॉजिकल एसक्यूएल-डीडीएल लेआउट
सफलतापूर्वक, हमें यह सुनिश्चित करना चाहिए कि, तार्किक स्तर पर:
- प्रत्येक इकाई प्रकार का प्रतिनिधित्व एक व्यक्ति द्वारा किया जाता है आधार तालिका
- लागू इकाई प्रकार की प्रत्येक एकल संपत्ति को किसी विशेष द्वारा निरूपित किया जाता है कॉलम
- प्रत्येक कॉलम के लिए एक सटीक डेटा प्रकार तय किया जाता है ताकि यह सुनिश्चित हो सके कि इसमें मौजूद सभी मान किसी विशेष और अच्छी तरह से निर्धारित सेट के हैं, यह INT, DATETIME, CHAR, आदि हो (बेशक, उपयोग करते समय, जैसे, Firebird या PostgfSQL , आप अधिक शक्तिशाली DOMAINs को रोजगार देना पसंद कर सकते हैं)
- यह सुनिश्चित करने के लिए कि सभी तालिकाओं में बनाए गए पंक्तियों के रूप में अभिकथन वैचारिक स्तर पर निर्धारित व्यावसायिक नियमों का पालन करते हैं, के लिए कई अड़चनें (घोषित रूप से) कॉन्फ़िगर की गई हैं।
इसलिए मैंने पहले दिखाए गए IDEF1X आरेख के आधार पर निम्नलिखित DDL व्यवस्था की घोषणा की:
CREATE TABLE PartyType ( -- Stands for an independent entity type.
PartyTypeCode CHAR(1) NOT NULL, -- To retain 'P' or 'O'.
Name CHAR(30) NOT NULL, -- To keep 'Person' or 'Organization'.
--
CONSTRAINT PartyType_PK PRIMARY KEY (PartyTypeCode)
);
CREATE TABLE Party ( -- Represents an entity supertype.
PartyId INT NOT NULL,
PartyTypeCode CHAR(1) NOT NULL, -- To hold the value that indicates the type of the row denoting the complementary subtype occurrence: either 'P' for 'Person' or 'O' for 'Organization'.
CreatedDateTime TIMESTAMP NOT NULL,
--
CONSTRAINT Party_PK PRIMARY KEY (PartyId),
CONSTRAINT PartyToPartyType_FK FOREIGN KEY (PartyTypeCode)
REFERENCES PartyType (PartyTypeCode)
);
CREATE TABLE Person ( -- Denotes an entity subtype.
PersonId INT NOT NULL, -- To be constrained as (a) the PRIMARY KEY and (b) a FOREIGN KEY.
FirstName CHAR(30) NOT NULL,
LastName CHAR(30) NOT NULL,
GenderCode CHAR(3) NOT NULL,
BirthDate DATE NOT NULL,
--
CONSTRAINT Person_PK PRIMARY KEY (PersonId),
CONSTRAINT Person_AK UNIQUE (FirstName, LastName, GenderCode, BirthDate), -- Composite ALTERNATE KEY.
CONSTRAINT PersonToParty_FK FOREIGN KEY (PersonId)
REFERENCES Party (PartyId)
);
CREATE TABLE Organization ( -- Stands for an entity subtype.
OrganizationId INT NOT NULL, -- To be constrained as (a) the PRIMARY KEY and (b) a FOREIGN KEY.
Name CHAR(30) NOT NULL,
FoundingDate DATE NOT NULL,
--
CONSTRAINT Organization_PK PRIMARY KEY (OrganizationId),
CONSTRAINT Organization_AK UNIQUE (Name), -- Single-column ALTERNATE KEY.
CONSTRAINT OrganizationToParty_FK FOREIGN KEY (OrganizationId)
REFERENCES Party (PartyId)
);
CREATE TABLE ProductType ( -- Represents an independent entity type.
ProductTypeCode CHAR(1) NOT NULL, -- To enclose the values 'S' and 'G' in the corresponding rows.
Name CHAR(30) NOT NULL, -- To comprise the values 'System' and 'Person' in the respective rows.
--
CONSTRAINT ProductType_PK PRIMARY KEY (ProductTypeCode)
);
CREATE TABLE Product ( -- Denotes an entity supertype.
OrganizationId INT NOT NULL,
ProductNumber INT NOT NULL,
ProductTypeCode CHAR(1) NOT NULL, -- To keep the value that indicates the type of the row denoting the complementary subtype occurrence: either 'S' for 'System' or 'G' for 'Game'.
CreatedDateTime DATETIME NOT NULL,
--
CONSTRAINT Product_PK PRIMARY KEY (OrganizationId, ProductNumber), -- Composite PRIMARY KEY.
CONSTRAINT ProductToOrganization_FK FOREIGN KEY (OrganizationId)
REFERENCES Organization (OrganizationId),
CONSTRAINT ProductToProductType_FK FOREIGN KEY (ProductTypeCode)
REFERENCES ProductType (ProductTypeCode)
);
CREATE TABLE SystemType ( -- Stands for an independent entity type.
SystemTypeCode CHAR(1) NOT NULL,
Name CHAR(30) NOT NULL,
--
CONSTRAINT SystemType_PK PRIMARY KEY (SystemTypeCode)
);
CREATE TABLE MySystem ( -- Represents a dependent entity type.
OrganizationId INT NOT NULL, -- To be constrained as (a) the PRIMARY KEY and (b) a FOREIGN KEY.
SystemNumber INT NOT NULL,
SystemTypeCode CHAR(1) NOT NULL,
ParticularColumn CHAR(30) NOT NULL,
--
CONSTRAINT System_PK PRIMARY KEY (OrganizationId, SystemNumber),
CONSTRAINT SystemToProduct_FK FOREIGN KEY (OrganizationId, SystemNumber)
REFERENCES Product (OrganizationId, ProductNumber),
CONSTRAINT SystemToSystemType_FK FOREIGN KEY (SystemTypeCode)
REFERENCES SystemType (SystemTypeCode)
);
CREATE TABLE Game ( -- Denotes an entity subtype.
OrganizationId INT NOT NULL, -- To be constrained as (a) the PRIMARY KEY and (b) a FOREIGN KEY.
GameNumber INT NOT NULL,
SpecificColumn CHAR(30) NOT NULL,
--
CONSTRAINT Game_PK PRIMARY KEY (OrganizationId, GameNumber),
CONSTRAINT GameToProduct_FK FOREIGN KEY (OrganizationId, GameNumber)
REFERENCES Product (OrganizationId, ProductNumber)
);
CREATE TABLE Genre ( -- Stands for an independent entity type.
GenreNumber INT NOT NULL,
Name CHAR(30) NOT NULL,
Description CHAR(90) NOT NULL,
--
CONSTRAINT Genre_PK PRIMARY KEY (GenreNumber),
CONSTRAINT Genre_AK1 UNIQUE (Name),
CONSTRAINT Genre_AK2 UNIQUE (Description)
);
CREATE TABLE SystemGame ( -- Represents an associative entity type or M:N association.
SystemOrganizationId INT NOT NULL,
SystemNumber INT NOT NULL,
GameOrganizationId INT NOT NULL,
GameNumber INT NOT NULL,
CreatedDateTime DATETIME NOT NULL,
--
CONSTRAINT SystemGame_PK PRIMARY KEY (SystemOrganizationId, SystemNumber, GameOrganizationId, GameNumber), -- Composite PRIMARY KEY.
CONSTRAINT SystemGameToSystem_FK FOREIGN KEY (SystemOrganizationId, SystemNumber) -- Multi-column FOREIGN KEY.
REFERENCES MySystem (OrganizationId, SystemNumber),
CONSTRAINT SystemGameToGame_FK FOREIGN KEY (SystemOrganizationId, GameNumber) -- Multi-column FOREIGN KEY.
REFERENCES Game (OrganizationId, GameNumber)
);
CREATE TABLE GameGenre ( -- Denotes an associative entity type or M:N association.
GameOrganizationId INT NOT NULL,
GameNumber INT NOT NULL,
GenreNumber INT NOT NULL,
CreatedDateTime DATETIME NOT NULL,
--
CONSTRAINT GameGenre_PK PRIMARY KEY (GameOrganizationId, GameNumber, GenreNumber), -- Composite PRIMARY KEY.
CONSTRAINT GameGenreToGame_FK FOREIGN KEY (GameOrganizationId, GameNumber)
REFERENCES Game (OrganizationId, GameNumber), -- Multi-column FOREIGN KEY.
CONSTRAINT GameGenreToGenre_FK FOREIGN KEY (GenreNumber)
REFERENCES Genre (GenreNumber)
);
CREATE TABLE Job ( -- Stands for an associative entity type or M:N association.
OrganizationId INT NOT NULL,
ProductNumber INT NOT NULL,
JobNumber INT NOT NULL,
Title CHAR(30) NOT NULL,
CreatedDateTime DATETIME NOT NULL,
--
CONSTRAINT Job_PK PRIMARY KEY (OrganizationId, ProductNumber, JobNumber), -- Composite PRIMARY KEY.
CONSTRAINT Job_AK UNIQUE (Title), -- Single-column ALTERNATE KEY.
CONSTRAINT JobToProduct_FK FOREIGN KEY (OrganizationId, ProductNumber) -- Multi-column FOREIGN KEY.
REFERENCES Product (OrganizationId, ProductNumber)
);
CREATE TABLE Collaborator ( -- Represents an associative entity type or M:N association.
CollaboratorId INT NOT NULL,
OrganizationId INT NOT NULL,
ProductNumber INT NOT NULL,
JobNumber INT NOT NULL,
AssignedDateTime DATETIME NOT NULL,
--
CONSTRAINT Collaborator_PK PRIMARY KEY (CollaboratorId, OrganizationId, ProductNumber, JobNumber), -- Composite PRIMARY KEY.
CONSTRAINT CollaboratorToPerson_FK FOREIGN KEY (CollaboratorId)
REFERENCES Person (PersonId),
CONSTRAINT CollaboratorToJob_FK FOREIGN KEY (OrganizationId, ProductNumber, JobNumber) -- Multi-column FOREIGN KEY.
REFERENCES Job (OrganizationId, ProductNumber, JobNumber)
);
यह तनावपूर्ण है कि कई तालिकाओं में समग्र प्राथमिक कुंजी बाधाओं की घोषणाएं हैं , जो वैचारिक इकाई प्रकारों के बीच होने वाले कनेक्शनों की पदानुक्रम के लिए खड़े हैं, व्यवस्था जब डेटा पुनर्प्राप्ति के संबंध में बहुत फायदेमंद हो सकती है, उदाहरण के लिए, का चयन करें संचालन शामिल है कि खंड प्राप्त करने के लिए शामिल हों व्युत्पन्न टेबल।
हां, (i) प्रत्येक M: N संगति और (ii) संबद्ध इकाई प्रकारों में से प्रत्येक को तार्किक DDL संरचना में संगत सारणी (iii) द्वारा निरूपित किया जाता है, इसलिए PRIMARY और FOREIGN KEY बाधाओं (और) पर विशेष ध्यान दें इन वैचारिक तत्वों का प्रतिनिधित्व करने वाली तालिकाओं के नोटों को मैंने टिप्पणियों के रूप में छोड़ दिया), क्योंकि वे यह सुनिश्चित करने में सहायता करते हैं कि संबंधित पंक्तियों के बीच संबंध लागू कार्डिनिटी अनुपात से मिलते हैं।
डॉ। ईएफ कोडड द्वारा समग्र कुंजियों का उपयोग संबंधपरक प्रतिमान के मूल से किया गया था, जैसा कि उनके 1970 के सेमिनल पेपर में शामिल उदाहरणों में प्रदर्शित किया गया था जिसका शीर्षक था ए रिलेशन मॉडल फॉर लार्ज शेयर्ड डेटा बैंक। (जो, ठीक है, प्रस्तुत भी करता है। वैचारिक एम को संभालने के लिए सबसे सुंदर तरीका: एन एसोसिएशन)।
मैंने एक db <> फिडल और एक एसक्यूएल फिडल डाला Microsoft SQL Server 2014 पर चल रहे , ताकि संरचना को "कार्रवाई" में परीक्षण किया जा सके।
मानकीकरण
सामान्यीकरण एक तार्किक-स्तरीय प्रक्रिया है, जिसका अर्थ है मूल रूप से बोलना:
पहले सामान्य रूप के माध्यम से गैर-परमाणु स्तंभों को समाप्त करना ताकि डेटा हेरफेर और कसना उपयोग के डेटा सबलंगेज द्वारा सामना करना आसान हो (जैसे, एसक्यूएल)।
अद्यतन विसंगतियों से बचने के लिए क्रमिक सामान्य रूपों के आधार पर एक विशिष्ट तालिका के स्तंभों के बीच अवांछनीय निर्भरता से छुटकारा पाना ।
स्वाभाविक रूप से, किसी को इस मुद्दे पर तालिका (एस) और कॉलम (एस) द्वारा किए गए अर्थ को ध्यान में रखना होगा ।
मैं विज्ञान पर स्थापित परीक्षण के रूप में सामान्यीकरण के बारे में सोचना पसंद करता हूं कि कि एक डिजाइनर एक बार तत्कालीन तत्वों पर लागू होता है या नहीं, उसने यह निर्धारित करने के लिए एक स्थिर तार्किक-स्तरीय व्यवस्था को रद्द कर दिया है कि क्या उसके सामान सामान्य रूपों में से हर एक का पालन करते हैं या नहीं। फिर, यदि आवश्यक हो, तो डिजाइनर उपयुक्त सही उपाय करता है।
फालतूपन
रिलेशनल मॉडल में, जबकि कॉलम में निहित मूल्यों का दोहराव न केवल स्वीकार्य है , बल्कि अपेक्षित है , डुप्लिकेट पंक्तियों को निषिद्ध है । उस सीमा तक, जहाँ तक मैं देख सकता हूँ, डुप्लीकेट पंक्तियाँ और अन्य प्रकार की हानिकारक अतिरेक को पहले उजागर की गई तार्किक लेआउट में शामिल सभी तालिकाओं में रोका गया है, शायद आप इस संबंध में अपनी चिंता स्पष्ट करना चाहेंगे।
वैसे भी, आप निश्चित रूप से (ए) का मूल्यांकन कर सकते हैं कि यह निर्धारित करने के लिए कि यह आवश्यक है और (बी) इसे संशोधित करें यदि आवश्यक हो तो सामान्य रूपों के अनुसार।
संबंधित संसाधन
- में पदों की इस श्रृंखला मैं एक सीधा एम के बारे में कुछ विचार-विमर्श मौजूद: एन संघ है कि दो के उदाहरण interrelate कर सकते हैं अलग इकाई प्रकार के।
- में इस दूसरे एक मैं एक दृष्टिकोण "सामग्री का बिल" या "पार्ट्स धमाका" निर्माण की घटना को संभालने के लिए प्रस्ताव मैं जिसमें वर्णन कनेक्ट करने के लिए कैसे अलग की घटनाओं को एक ही इकाई के प्रकार।
टर्नरी एसोसिएशन
एक और महत्वपूर्ण पहलू है जिसे आप टिप्पणियों के माध्यम से लाए हैं (अब-हटाए गए उत्तर में पोस्ट किया गया है):
हर बार जब मैं एक पुल बनाने की कोशिश करता हूं, तो उस पुल में एक से कई तत्व भी होते हैं, मैं इस धारणा के तहत हूं कि अनुमति नहीं है या कम से कम हतोत्साहित नहीं है।
उस परिस्थिति से संकेत मिलता है कि आपकी चिंताओं में से एक वैचारिक तिर्यक संघों के साथ है । मूल रूप से, इस तरह के संबंध तब आते हैं जब (1) एक संबंध (2) दो अन्य रिश्तों को शामिल करता है, दूसरे शब्दों में "रिश्तों के बीच एक संबंध" - विशिष्ट स्थिति भी, क्योंकि एक संबंध अपने आप में एक इकाई है -।
ये व्यवस्थाएं, जब उपयुक्त रूप से प्रबंधित की जाती हैं, तो हानिकारक अतिरेक को भी नहीं लाती हैं। और, हाँ, अगर कोई निश्चित उपयोग का मामला है जहाँ आप यह पहचानते हैं कि ऐसे रिश्ते "वास्तविक दुनिया" इकाई प्रकारों के बीच खुद को प्रस्तुत करते हैं, तो आपको (i) मॉडल और (ii) उन्हें तार्किक स्तर पर सटीकता के साथ घोषित करना होगा।
- यहां एक सवाल और जवाब है कि क्या हम सर्वेक्षण के बारे में प्रवचन के एक क्षेत्र का विश्लेषण करते हैं , जिसमें एक टर्नरी एसोसिएशन का एक उदाहरण शामिल है।
- में यह बहुत अच्छा जवाब , @Ypercube एक दिलचस्प के लिए एक चित्र और संबंधित DDL संरचना प्रस्तुत हीरे के आकार संबंध , जो बहुत परिदृश्यों के इस वर्ग के समान है।