आपकी विशिष्टताओं के बारे में मेरी समझ के अनुसार, आपके व्यवसाय के वातावरण में एक वैचारिक-स्तर की त्रैमासिक संबंध शामिल है । इस संबंध में, आपको परिभाषित करने की आवश्यकता है:
- संबंध प्रकार (या एसोसिएशन ) इकाई प्रकार व्यक्ति और सर्वेक्षण के बीच ;
- सर्वेक्षण और प्रश्न के बीच संबंध प्रकार ;
- संबंध प्रकार जो दो पूर्वोक्त संबंध प्रकारों के बीच संबंध स्थापित करता है और, परिणामस्वरूप, व्यक्ति , सर्वेक्षण और प्रश्न , अर्थात, प्रतिक्रिया (एक छोटा नाम जो व्याख्या को सरल करता है, मेरे दृष्टिकोण से) के बीच।
इसलिए, मैं समझता हूं कि आप अपने दृष्टिकोण 1 के साथ सही रास्ते पर हैं , हालांकि इसे और अधिक सटीक बनाने के लिए इसमें कुछ छोटे (अभी तक महत्वपूर्ण) परिशोधन की आवश्यकता है। मैं निम्नलिखित अनुभागों में इस तरह के शोधन और अन्य प्रासंगिक विचारों का विस्तार करूंगा।
व्यापार नियम
आइए हम लागू व्यापार नियमों को थोड़ा विस्तारित करें और उन्हें निम्नलिखित तरीके से सुधारें:
- एक व्यक्ति शून्य-एक-या-कई सर्वेक्षण में पंजीकृत होता है
- एक सर्वेक्षण में शून्य-एक-या-कई व्यक्तियों का पंजीकरण हो जाता है
- एक सर्वेक्षण एक-से-कई सवालों से एकीकृत होता है
- एक प्रश्न शून्य-एक-या कई सर्वेक्षणों को एकीकृत करता है
- एक प्रश्न शून्य-एक-या कई प्रतिक्रियाएँ प्राप्त करता है
- वास्तव में एक सर्वेक्षण के संदर्भ में एक व्यक्ति द्वारा एक प्रतिक्रिया प्रदान की जाती है
एक्सपोजिटरी IDEF1X आरेख
फिर, मैं IDEF1X बनाया है एक चित्र है कि में प्रस्तुत किया है चित्रा 1 , जो ऊपर से तैयार व्यापार के नियम का संश्लेषण:
सूचना मॉडलिंग ( IDEF1X ) के लिए एक एकीकरण परिभाषा एक अत्यधिक अनुशंसित मॉडलिंग तकनीक है जिसेदिसंबर 1993 में संयुक्त राज्य अमेरिका के राष्ट्रीय मानक और प्रौद्योगिकी संस्थान ( NIST )द्वाराएक मानक के रूप में स्थापित किया गया था। यह ठोस रूपसे रिलेशनल मॉडल के एकमात्र संस्थापक , अर्थात डॉ। ईएफ कोडड और डॉ। पीपी चेन द्वारा विकसित इकाई-संबंध के दृष्टिकोण पर आधारित सैद्धांतिक काम पर आधारित है।
PersonSurvey संबंध
जैसा कि मैं इसे देखता हूं, निजीकरण संबंध को प्राधिकरण के साधन प्रदान करने की आवश्यकता है ताकि एक व्यक्ति किसी दिए गए सर्वेक्षण में भाग ले सके । इस तरह, एक बार एक निश्चित व्यक्ति को एक विशिष्ट सर्वेक्षण में पंजीकृत किया गया है , वह संबंधित सर्वेक्षण को एकीकृत करने वाले सवालों के जवाब देने के लिए अधिकृत है ।
SurveyQuestion संबंध
मुझे लगता है कि आपके चित्र में suvery_question.question_number नामक संपत्ति (या विशेषता) का उपयोग किसी विशेष सर्वेक्षण के संबंध में दिए गए प्रश्न उदाहरण की प्रस्तुति के आदेश का प्रतिनिधित्व करने के लिए किया जाता है । आप देख सकते हैं, मैं के रूप में इस तरह की संपत्ति में निरूपित किया जाता है SurveyQuestion.PresentationOrder , और मुझे लगता है कि आपको लगता है कि (i) दो या अधिक रोकने चाहिए Question.QuestionNumber मूल्यों शेयर (ii) एक ही PresentationOrder (iii) एक ही में मूल्य SurveyQuestion घटना।
उस आवश्यकता को चित्रित करने के लिए, मैंने इस इकाई प्रकार का प्रतिनिधित्व करने वाले बॉक्स में एक समग्र ALTERNATE KEY (AK) को शामिल किया है, जिसमें गुणों के संयोजन ( सर्वेनंबर, प्रश्नावली, PresentationOrder ) शामिल है। जैसा कि आप अच्छी तरह से जानते हैं, एक मिश्रित AK को एक बहु-स्तंभ UNIQUE बाधा की सहायता से तार्किक DDL डिज़ाइन में घोषित किया जा सकता है (जैसा कि मैंने SurveyQuestion
तालिका में अनुकरणीय है कि एक्सप्लॉरी डीडीएल लेआउट का एक भाग नीचे कुछ खंडों में दर्शाया गया है )।
रिस्पांस इकाई प्रकार
हां, रिस्पांस इकाई के साथ मैं दो अन्य रिश्तों के बीच संबंध का चित्रण कर रहा हूं ; यह पहली नज़र में अजीब लग सकता है लेकिन इस दृष्टिकोण के साथ कुछ भी गलत नहीं है, जब तक कि यह (ए) ब्याज के व्यवसाय के संदर्भ की विशेषताओं को सही ढंग से प्रदर्शित करता है और (बी) एक तार्किक स्तर के लेआउट में ठीक से प्रतिनिधित्व करता है।
हां, आप पूरी तरह से सही हैं, यह दो भागों के दो अलग-अलग स्तंभों से संदर्भित मानों Response.SurveyNumber
(या कहें, Response.SurveyId
) के माध्यम से अमूर्त के तार्किक स्तर पर परिदृश्य के उस हिस्से को चित्रित करने के लिए एक त्रुटि होगी Response
।
व्युत्पन्न तार्किक एसक्यूएल-डीडीएल लेआउट
-- You should determine which are the most fitting
-- data types and sizes for all your table columns
-- depending on your business context characteristics.
-- As one would expect, you are free to make use of
-- your preferred (or required) naming conventions.
CREATE TABLE Person (
PersonId INT NOT NULL,
FirstName CHAR(30) NOT NULL,
LastName CHAR(30) NOT NULL,
GenderCode CHAR(3) NOT NULL,
BirthDate DATE NOT NULL,
CreatedDateTime DATETIME NOT NULL,
--
CONSTRAINT Person_PK PRIMARY KEY (PersonId),
CONSTRAINT Person_AK UNIQUE (
FirstName,
LastName,
GenderCode,
BirthDate
)
);
CREATE TABLE Survey (
SurveyNumber INT NOT NULL,
Description CHAR(255) NOT NULL,
CreatedDateTime DATETIME NOT NULL,
--
CONSTRAINT Survey_PK PRIMARY KEY (SurveyNumber),
CONSTRAINT Survey_AK UNIQUE (Description)
);
CREATE TABLE PersonSurvey (
PersonId INT NOT NULL,
SurveyNumber INT NOT NULL,
RegisteredDateTime DATETIME NOT NULL,
--
CONSTRAINT PersonSurvey_PK PRIMARY KEY (PersonId, SurveyNumber),
CONSTRAINT PersonSurveyToPerson_FK FOREIGN KEY (PersonId)
REFERENCES Person (PersonId),
CONSTRAINT PersonSurveyToSurvey_FK FOREIGN KEY (SurveyNumber)
REFERENCES Survey (SurveyNumber)
);
CREATE TABLE Question (
QuestionNumber INT NOT NULL,
Wording CHAR(255) NOT NULL,
CreatedDateTime DATETIME NOT NULL,
--
CONSTRAINT Question_PK PRIMARY KEY (QuestionNumber),
CONSTRAINT Question_AK UNIQUE (Wording)
);
CREATE TABLE SurveyQuestion (
SurveyNumber INT NOT NULL,
QuestionNumber INT NOT NULL,
PresentationOrder TINYINT NOT NULL,
IsMandatory BIT NOT NULL,
IntegratedDateTime DATETIME NOT NULL,
--
CONSTRAINT SurveyQuestion_PK PRIMARY KEY (SurveyNumber, QuestionNumber),
CONSTRAINT SurveyQuestion_AK UNIQUE (
QuestionNumber,
SurveyNumber,
PresentationOrder
),
CONSTRAINT SurveyQuestionToSurvey_FK FOREIGN KEY (SurveyNumber)
REFERENCES Survey (SurveyNumber),
CONSTRAINT SurveyQuestionToQuestion_FK FOREIGN KEY (QuestionNumber)
REFERENCES Question (QuestionNumber)
);
CREATE TABLE Response (
SurveyNumber INT NOT NULL,
QuestionNumber INT NOT NULL,
PersonId INT NOT NULL,
Content TEXT NOT NULL,
ProvidedDateTime DATETIME NOT NULL,
--
CONSTRAINT Response_PK PRIMARY KEY (SurveyNumber, QuestionNumber, PersonId),
CONSTRAINT ResponseToPersonSurvey_FK FOREIGN KEY (PersonId, SurveyNumber)
REFERENCES PersonSurvey (PersonId, SurveyNumber),
CONSTRAINT ResponseToSurveyQuestion_FK FOREIGN KEY (SurveyNumber, QuestionNumber)
REFERENCES SurveyQuestion (SurveyNumber, QuestionNumber)
);
Response
तालिका में दो सम्मिश्रित कुंजी चिह्न
यह, शायद, चर्चा करने के लिए सबसे महत्वपूर्ण बिंदु है: किसी दिए गए Response
पंक्ति से किए गए संदर्भ
SurveyQuestion.SurveyNumber
, तथा
SurveyPerson.SurveyNumber
मूल्यों का मिलान होना चाहिए । जहां तक मेरा सवाल है, इस स्थिति को घोषित रूप से लागू करने का सबसे अच्छा विकल्प दो समग्र फॉर्वर्ड कुंजी (FKs) का उपयोग करना है।
के रूप में DDL डिजाइन में दिखाया गया है, पहले FK के लिए एक संदर्भ बना रही है PersonSurvey
तालिका प्राथमिक कुंजी (पी), यानी, (PersonId, SurveyNumber)
और स्तंभों के आधार पर पुष्टि कर रहा है Response.PersonId
और Response.SurveyNumber
।
दूसरा एफके SurveyQuestion
टेबल पीके की ओर इशारा कर रहा है , यानी (SurveyNumber, QuestionNumber)
, और, तदनुसार, स्तंभों से बना है Response.SurveyNumber
और Response.QuestionNumber
।
इस तरह, Response.SurveyNumber
स्तंभ काफी महत्वपूर्ण है क्योंकि यह दो अलग-अलग बाधाओं में एफके संदर्भ के हिस्से के रूप में उपयोग किया जाता है ।
इस विधि के साथ, एक डेटाबेस प्रबंधन प्रणाली-गारंटी रेफरल अखंडता से सुनिश्चित करता है
- (ए)
Response
से PersonSurvey
;
- (बी)
Response
से SurveyQuestion
; तथा
- (ग) स्वतंत्र इकाई प्रकार, अर्थात्
Person
, Survey
और के लिए खड़े तालिकाओं के लिए एक सहयोगी इकाई प्रकार का प्रतिनिधित्व करने वाले तालिकाओं में से प्रत्येक Question
।
अद्यतन विसंगतियों से बचने के लिए व्युत्पन्न डेटा
मैंने आपके चित्र दो तत्वों पर ध्यान दिया है जिन्हें मैं सम्मान देता हूं। ये तत्व दो PersonSurvey
स्तंभों से संबंधित हैं जो व्युत्पन्न किए जा सकते हैं (चाहिए) ।
इस संबंध में, PersonSurvey.IsStarted
यदि आप किसी दिए Person
गए एक या अधिक Responses
को तालिका के माध्यम से Questions
सटीक रूप Survey
से एकीकृत करने के लिए प्रदान करते हैं, तो आप क्वेरी द्वारा डेटम प्राप्त कर सकते हैं SurveyQuestion
।
और अगर आप भी प्राप्त कर सकते हैं PersonSurvey.IsCompleted
यदि किसी विशेष का निर्धारण करके डेटा बिंदु Person
उदाहरण एक की आपूर्ति की है Response
सभी के लिए Questions
है कि में 'TRUE' के एक मूल्य cointain IsMandatory
एक विशिष्ट में स्तंभ SurveyQuestion
पंक्ति।
इन मूल्यों की व्युत्पत्ति के माध्यम से, आप कुछ अद्यतन विसंगतियों को रोक रहे हैं जो अंततः आपके द्वारा SurveyQuestion
स्तंभ में ऐसे मान रखे जाने की स्थिति में उत्पन्न होंगे ।
महत्वपूर्ण विचार
जैसा कि @Dave उनकी टिप्पणी में सही इंगित करता है, अगर आपको भविष्य की आवश्यकता का सामना करना पड़ता है जो विभिन्न प्रकार की प्रतिक्रियाओं के प्रबंधन की मांग करता है जो दिनांक, संख्यात्मक मान, एकाधिक विकल्प और अन्य संभावित पहलुओं का प्रबंधन करते हैं, तो आपको इस डेटाबेस लेआउट का विस्तार करना होगा।
ID
औरNumber
, लेकिन अन्यथा यह शानदार है। धन्यवाद।