আপনার স্পেসিফিকেশন সম্পর্কে আমার বোঝার হিসাবে, আপনার ব্যবসায়ের পরিবেশের একটি ধারণাগত-স্তরের ত্রৈমাসিক সম্পর্ক জড়িত । এই ক্ষেত্রে, আপনি সংজ্ঞায়িত করা প্রয়োজন:
- ব্যক্তি বা সমীক্ষার প্রকারের মধ্যে সম্পর্ক (বা সমিতি ) প্রকার ;
- জরিপ এবং প্রশ্নের মধ্যে সম্পর্কের ধরন ;
- সম্পর্কের ধরণ যা পূর্বোক্ত উভয় সম্পর্কের প্রকারের মধ্যে এবং এর ফলে ব্যক্তি , জরিপ এবং প্রশ্নের মধ্যে অর্থাত্ প্রতিক্রিয়া (সংক্ষিপ্ত নাম যা আমার দৃষ্টিকোণ থেকে ব্যাখ্যা সহজ করে) সংযোগ স্থাপন করে ।
সুতরাং, আমি বিবেচনা করি যে আপনি আপনার পন্থা 1 এর সাথে সঠিক পথে রয়েছেন , যদিও এটি আরও সঠিক করার জন্য কিছু ছোট (এখনও গুরুত্বপূর্ণ) পরিশোধন প্রয়োজন requires আমি নিম্নলিখিত বিভাগগুলিতে এই জাতীয় পরিশোধন এবং অন্যান্য প্রাসঙ্গিক বিবেচনাগুলি বিশদ করব।
ব্যবসার নীতি
আসুন আমরা প্রযোজ্য ব্যবসায়ের বিধিগুলি কিছুটা প্রসারিত করি এবং নিম্নলিখিত পদ্ধতিতে সেগুলি সংশোধন করি:
- একজন ব্যক্তি শূন্য-এক-বা একাধিক সমীক্ষায় নিবন্ধন করে
- একটি জরিপ শূন্য-এক-বা একাধিক ব্যক্তির নিবন্ধন পায়
- একটি জরিপ এক থেকে একাধিক প্রশ্নের দ্বারা একীভূত হয়
- একটি প্রশ্ন শূন্য-এক-বা একাধিক সমীক্ষাকে সংহত করে
- একটি প্রশ্ন শূন্য-এক বা একাধিক প্রতিক্রিয়া প্রাপ্ত করে
- এক - জরিপের প্রসঙ্গে সঠিকভাবে একজন ব্যক্তির দ্বারা একটি প্রতিক্রিয়া সরবরাহ করা হয়
এক্সপোসিটোরি IDEF1X ডায়াগ্রাম
তারপরে, আমি আইডিইএফ 1 এক্স একটি চিত্র তৈরি করেছি যা চিত্র 1 এ উপস্থাপিত হয়েছে , যা উপরের সূচিত ব্যবসায়ের নিয়মগুলিকে সংশ্লেষ করে:
একটি তথ্য মডেলিং জন্য ইন্টিগ্রেশন সংজ্ঞা ( IDEF1X ) একটি অত্যন্ত সুপারিশের মডেলিং পন্থা যা একটি প্রতিষ্ঠিত হয়েছিল মান স্ট্যান্ডার্ড মার্কিন যুক্তরাষ্ট্র ন্যাশনাল ইনস্টিটিউট ও প্রযুক্তি বিশ্ববিদ্যালয় (ডিসেম্বর 1993 সালে , NIST )। এটা তোলে দৃঢ় তাত্ত্বিক কাজের দ্বারা রচনা উপর ভিত্তি করে তৈরি একমাত্র প্রতিষ্ঠাতা এর রিলেশনাল মডেল , অর্থাত্, ডাঃ মতিন Codd উপর এবং সত্তা-সম্পর্ক দৃশ্য দ্বারা উন্নত ডঃ পিপি চেন ।
PersonSurvey সম্পর্ক
আমি এটি দেখতে পেয়েছি, পার্সনসার্ভে সম্পর্কের অনুমোদনের একটি উপায় সরবরাহ করা প্রয়োজন যাতে কোনও ব্যক্তি প্রদত্ত জরিপে অংশ নিতে পারে । এইভাবে, একবার কোনও নির্দিষ্ট ব্যক্তি কোনও নির্দিষ্ট জরিপে নিবন্ধিত হয়ে গেলে, সে সংশ্লিষ্ট জরিপকে একীভূত করে এমন প্রশ্নগুলির প্রতিক্রিয়া জানাতে অনুমোদিত হয় ।
SurveyQuestion সম্পর্ক
আমি ধরে নিয়েছি যে আপনার ডায়াগ্রামে suvy_question.question_number নামে পরিচিত সম্পত্তি (বা বৈশিষ্ট্য) নির্দিষ্ট জরিপের ক্ষেত্রে সম্মতি দিয়ে প্রদত্ত প্রশ্ন উদাহরণ উপস্থাপনের ক্রম উপস্থাপনের জন্য ব্যবহৃত হয় । যেহেতু আপনি দেখতে পারেন, আমি যেমন সম্পত্তি চিহ্নিত হয়েছে SurveyQuestion.PresentationOrder , এবং আমি মনে করি যে আপনি যে (ঝ) দুই বা ততোধিক বাধা দিতে পারে Question.QuestionNumber মান ভাগ (২) একই PresentationOrder (গ) একই মান SurveyQuestion সংঘটন।
এই প্রয়োজনটি চিত্রিত করার জন্য, আমি এই সত্তার প্রকারের প্রতিনিধিত্বকারী বাক্সে একটি যৌগিক অলটারনেট কী (একে) অন্তর্ভুক্ত করেছি, যা বৈশিষ্ট্যের সংমিশ্রণ ( সার্ভেবার্বার, প্রশ্নোত্তর, উপস্থাপনাআর্ডার ) দ্বারা গঠিত। যেমন আপনি ভাল জানেন যে, একটি বহু-কলাম অনন্য বাধার সাহায্যে যৌগিক একেকে যৌক্তিক ডিডিএল ডিজাইনে ঘোষণা করা যেতে পারে (যেমন আমি 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
ম্যাচিং মান থাকতে হবে । আমি যতটা উদ্বিগ্ন, ঘোষণামূলক উপায়ে এই শর্তটি কার্যকর করার সর্বোত্তম বিকল্প হ'ল দুটি যৌগিক বিদেশী কী (এফকে) ব্যবহার করা।
ডিডিএল ডিজাইনে যেমন দেখানো হয়েছে, প্রথম এফকে PersonSurvey
টেবিলের প্রাইমারী কে (পিকে), অর্থাৎ (PersonId, SurveyNumber)
, এবং কলামগুলি অনুসারে তৈরি করছে Response.PersonId
এবং Response.SurveyNumber
।
দ্বিতীয় এফকে SurveyQuestion
টেবিল পিকে দিকে ইঙ্গিত করছে , অর্থাত্ (SurveyNumber, QuestionNumber)
, এবং তদনুসারে, কলামগুলি তৈরি করে Response.SurveyNumber
এবং Response.QuestionNumber
।
এই উপায়ে, Response.SurveyNumber
কলামটি বেশ কার্যকর কারণ এটি দুটি পৃথক প্রতিবন্ধকতায় এফকে রেফারেন্সের অংশ হিসাবে ব্যবহৃত হয় ।
এই পদ্ধতির সাহায্যে কেউ ডেটাবেস পরিচালনার ব্যবস্থা-থেকে নিশ্চিত রেফারেন্সিয়াল অখণ্ডতা নিশ্চিত করে
- (ক) এর
Response
কাছে PersonSurvey
;
- (খ) এর
Response
কাছে SurveyQuestion
; এবং
- (গ) স্বতন্ত্র সত্তা প্রকারের জন্য দাঁড়িয়ে থাকা টেবিলগুলিতে কোনও এসোসিয়েটিভ সত্তা প্রকারের প্রতিনিধিত্ব করে এমন প্রতিটি সারণী, যথা
Person
, Survey
এবং Question
।
আপডেট ব্যতিক্রমগুলি এড়ানোর জন্য উত্সযুক্ত ডেটা
আমি আপনার ডায়াগ্রামে দুটি উপাদান উল্লেখ করেছি যেগুলি আমি সম্মান করি noticed এই উপাদান দুটি সাথে সম্পর্কিত হয় PersonSurvey
কলাম যে হতে (উচিত) করতে উদ্ভূত ।
PersonSurvey.IsStarted
সেক্ষেত্রে, যদি কোনও নির্দিষ্ট Person
ঘটনা টেবিলের মাধ্যমে একটি সংহতকে সঠিক সংহত Responses
করতে এক বা একাধিক সরবরাহ করে থাকে তবে আপনি কোয়েরি করে ডাটাম অর্জন করতে পারেন ।Questions
Survey
SurveyQuestion
এবং আপনি পেতে পারেন PersonSurvey.IsCompleted
যদি একটি প্রদত্ত নির্ধারণের দ্বারা ডাটা পয়েন্ট Person
উদাহরণস্বরূপ একটি সরবরাহকৃত হয়েছে Response
সব থেকে Questions
যে 'সত্য' 'এর একটি মান cointain IsMandatory
একটি নির্দিষ্ট কলাম SurveyQuestion
সারি।
এই মানগুলির উত্পন্নকরণের মাধ্যমে আপনি কিছু আপডেটের অসঙ্গতিগুলি আটকাচ্ছেন যা অবশেষে উত্থাপিত হত যদি আপনি এই মানগুলিকে SurveyQuestion
কলামে রেখেছিলেন তবে শেষ পর্যন্ত উদ্ভূত হত ।
গুরুত্বপূর্ণ বিবেচনা
@ ডেভ যেমনটি তাঁর মন্তব্যে যথাযথভাবে উল্লেখ করেছেন, আপনি যদি বিভিন্ন ধরণের প্রতিক্রিয়া পরিচালনার দাবিতে ভবিষ্যতের প্রয়োজনীয়তার মুখোমুখি হন যেগুলি তারিখগুলি, সংখ্যাগত মানগুলি, একাধিক পছন্দ এবং অন্য কোনও সম্ভাব্য দিকগুলি পরিচালনা করে তবে আপনি এই ডাটাবেস বিন্যাসটি প্রসারিত করতে পারেন।
ID
এবং দিয়েই শেষ হয়েছিলNumber
, তবে অন্যথায় এটি দুর্দান্ত। ধন্যবাদ.