জরিপ, প্রশ্ন এবং প্রতিক্রিয়া সম্পর্কে একটি ডেটাবেজে রিডানড্যান্ট বিদেশী কীগুলি পরিচালনা করার জন্য সেরা ডেটা মডেলিং পদ্ধতির


13

আমি জরিপ, প্রশ্ন এবং প্রতিক্রিয়া সঞ্চয় করার জন্য সর্বোত্তম রিলেশনাল মডেলিং পদ্ধতির পরামর্শ খুঁজছি।

নীচের দুটি পদ্ধতির মধ্যে কোনটি দেখতে সেরা বা অন্য কোনও বিকল্পের জন্য আমি সন্ধান করছি।

আমার অন্তত এই সত্ত্বা রয়েছে:

  • প্রশ্ন
  • জরিপ
  • ব্যক্তি

এবং অন্তত এই সম্পর্কগুলি:

  • প্রতিটি সমীক্ষায় 1 বা একাধিক প্রশ্ন রয়েছে।
  • প্রতিটি প্রশ্ন 0 বা ততোধিক জরিপে ব্যবহৃত হতে পারে।
  • প্রতিটি ব্যক্তি 0 বা তার বেশি জরিপ নিতে পারে।

এখানেই আমি সমস্যায় পড়েছি: কোনও ব্যক্তির তৈরি জরিপের প্রশ্নের প্রতিক্রিয়াগুলি কীভাবে মডেল করবেন।

আমি দু'টি পদ্ধতি বিবেচনা করেছি যা আমি বিবেচনা করেছি, যার মধ্যে দুটিও আমার কাছে খুব ভাল লাগেনি। সমস্যাটি বর্ণনা করার জন্য এখানে চিত্রগুলি ব্যাপকভাবে সরল করা হয়েছে।

পন্থা 1: পদ্ধতির ঘ

এই পদ্ধতির বিষয়ে আমি যা পছন্দ করি না:

  • survey_person_question_responseটেবিল দুটি ভিন্ন কলাম যে একটি জরিপ পড়ুন রয়েছে: survey_question_survey_idএবংsurvey_person_survey_id
    • survey_idএই দুটি কলামের জন্য এক সারিতে আলাদা আলাদা উল্লেখ করা ত্রুটি হবে । জরিপ_উক্তিটি অবশ্যই সমীক্ষা থেকে একই ব্যক্তির হওয়া উচিত survey আমি এটি প্রয়োগ করার জন্য ভাল উপায় দেখতে পাচ্ছি না।
  • মনে হচ্ছে এখানে আমি যা করছি তা দুটি সম্পর্কের মধ্যে সম্পর্ক তৈরি করছে। এটি কোনও কারণে আমার কাছে খারাপ লাগছে।

পদ্ধতির 2:

1 টি পদ্ধতির থেকে দুটি এফকে এড়ানোর চেষ্টা করুন যা একই মানকে বোঝায় ... এখানে চিত্র বর্ণনা লিখুন

এই পদ্ধতির বিষয়ে আমি যা পছন্দ করি না:

  • কোনও কার্যকর প্রয়োগ নেই যে question_idএবং survey_idএফকে বৈধ survey_questionজুটি থেকে এসেছে
  • কোনও কার্যকর প্রয়োগ নেই যে survey_idএবং person_idএফকে বৈধ survey_personজুটি থেকে এসেছে

এর জন্য কোনও পরামর্শ:

  • এই পদ্ধতির কোনও একটি সাধারণ পদ্ধতির কিনা
  • এগুলির মধ্যে একটির উপকারিতা এবং বিপরীতে অপরটি ব্যবহার করা
  • পুরোপুরি এই ডেটা সাজানোর একটি ভাল উপায়

প্রশংসা হবে!

উত্তর:


12

আপনার স্পেসিফিকেশন সম্পর্কে আমার বোঝার হিসাবে, আপনার ব্যবসায়ের পরিবেশের একটি ধারণাগত-স্তরের ত্রৈমাসিক সম্পর্ক জড়িত । এই ক্ষেত্রে, আপনি সংজ্ঞায়িত করা প্রয়োজন:

  1. ব্যক্তি বা সমীক্ষার প্রকারের মধ্যে সম্পর্ক (বা সমিতি ) প্রকার ;
  2. জরিপ এবং প্রশ্নের মধ্যে সম্পর্কের ধরন ;
  3. সম্পর্কের ধরণ যা পূর্বোক্ত উভয় সম্পর্কের প্রকারের মধ্যে এবং এর ফলে ব্যক্তি , জরিপ এবং প্রশ্নের মধ্যে অর্থাত্ প্রতিক্রিয়া (সংক্ষিপ্ত নাম যা আমার দৃষ্টিকোণ থেকে ব্যাখ্যা সহজ করে) সংযোগ স্থাপন করে ।

সুতরাং, আমি বিবেচনা করি যে আপনি আপনার পন্থা 1 এর সাথে সঠিক পথে রয়েছেন , যদিও এটি আরও সঠিক করার জন্য কিছু ছোট (এখনও গুরুত্বপূর্ণ) পরিশোধন প্রয়োজন requires আমি নিম্নলিখিত বিভাগগুলিতে এই জাতীয় পরিশোধন এবং অন্যান্য প্রাসঙ্গিক বিবেচনাগুলি বিশদ করব।

ব্যবসার নীতি

আসুন আমরা প্রযোজ্য ব্যবসায়ের বিধিগুলি কিছুটা প্রসারিত করি এবং নিম্নলিখিত পদ্ধতিতে সেগুলি সংশোধন করি:

  • একজন ব্যক্তি শূন্য-এক-বা একাধিক সমীক্ষায় নিবন্ধন করে
  • একটি জরিপ শূন্য-এক-বা একাধিক ব্যক্তির নিবন্ধন পায়
  • একটি জরিপ এক থেকে একাধিক প্রশ্নের দ্বারা একীভূত হয়
  • একটি প্রশ্ন শূন্য-এক-বা একাধিক সমীক্ষাকে সংহত করে
  • একটি প্রশ্ন শূন্য-এক বা একাধিক প্রতিক্রিয়া প্রাপ্ত করে
  • এক - জরিপের প্রসঙ্গে সঠিকভাবে একজন ব্যক্তির দ্বারা একটি প্রতিক্রিয়া সরবরাহ করা হয়

এক্সপোসিটোরি IDEF1X ডায়াগ্রাম

তারপরে, আমি আইডিইএফ 1 এক্স একটি চিত্র তৈরি করেছি যা চিত্র 1 এ উপস্থাপিত হয়েছে , যা উপরের সূচিত ব্যবসায়ের নিয়মগুলিকে সংশ্লেষ করে:

চিত্র 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রেখা থেকে তৈরি রেফারেন্সগুলি

  1. SurveyQuestion.SurveyNumber, এবং
  2. 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করতে এক বা একাধিক সরবরাহ করে থাকে তবে আপনি কোয়েরি করে ডাটাম অর্জন করতে পারেন ।QuestionsSurveySurveyQuestion

এবং আপনি পেতে পারেন PersonSurvey.IsCompletedযদি একটি প্রদত্ত নির্ধারণের দ্বারা ডাটা পয়েন্ট Personউদাহরণস্বরূপ একটি সরবরাহকৃত হয়েছে Responseসব থেকে Questionsযে 'সত্য' 'এর একটি মান cointain IsMandatoryএকটি নির্দিষ্ট কলাম SurveyQuestionসারি।

এই মানগুলির উত্পন্নকরণের মাধ্যমে আপনি কিছু আপডেটের অসঙ্গতিগুলি আটকাচ্ছেন যা অবশেষে উত্থাপিত হত যদি আপনি এই মানগুলিকে SurveyQuestionকলামে রেখেছিলেন তবে শেষ পর্যন্ত উদ্ভূত হত ।

গুরুত্বপূর্ণ বিবেচনা

@ ডেভ যেমনটি তাঁর মন্তব্যে যথাযথভাবে উল্লেখ করেছেন, আপনি যদি বিভিন্ন ধরণের প্রতিক্রিয়া পরিচালনার দাবিতে ভবিষ্যতের প্রয়োজনীয়তার মুখোমুখি হন যেগুলি তারিখগুলি, সংখ্যাগত মানগুলি, একাধিক পছন্দ এবং অন্য কোনও সম্ভাব্য দিকগুলি পরিচালনা করে তবে আপনি এই ডাটাবেস বিন্যাসটি প্রসারিত করতে পারেন।


1
বাহ, এটি আমার মাথায় প্রশ্নের পুরোপুরি উত্তর দিয়েছে এবং তারপরে আমাকে আরও শিখিয়েছে! যেহেতু মন্তব্যে উন্নতির পরামর্শ দেওয়া উচিত: এটি কিছুটা বিভ্রান্তিকর ছিল যে কীগুলি উভয় IDএবং দিয়েই শেষ হয়েছিল Number, তবে অন্যথায় এটি দুর্দান্ত। ধন্যবাদ.
Zach Mierzejewski

@ জ্যাচ আপনি সর্বাধিক স্বাগত, পোস্টটি আপনাকে সহায়তা করেছে বলে আমি আনন্দিত। প্রতিক্রিয়ার জন্য ধন্যবাদ, কিছু পরিমার্জন স্থিরভাবে ডেকে আনা হয়েছে।
এমডিসিএল

1

বিদেশী কী হিসাবে কলামগুলি স্থানান্তরিত করার সময় আমি কলামগুলি উপ-পছন্দ করতে পছন্দ করি না কেন এটি একটি কারণ। আপনার প্রথম ক্ষেত্রে, মডেলিং সরঞ্জামটি আপনাকে টেবিলের একটি survey_idকলামকে উপসর্গ করতে বাধ্য করতে পারে survey_person_question_response। সম্পর্ক তৈরি হওয়ার পরে আপনি এটি সামঞ্জস্য করতে সক্ষম হতে পারেন।

আপনি যদি ভৌত ​​মডেলটি তৈরি করেন যেখানে ডুপ্লিকেট কলামের প্রয়োজন নেই তখন অপ্রয়োজনীয় জরিপ আইডি ক্ষেত্রটি অপরিহার্যভাবে সরিয়ে ফেলুন। আপনি যেমন সনাক্ত করেছেন, আপনার দুটি মডেলেরই সমস্যা আছে তবে আমি বিশ্বাস করি প্রথম মডেল সামগ্রিকভাবে ভাল।


অন্তর্দৃষ্টিটির জন্য ধন্যবাদ - আমি শারীরিক মডেলটিতে 1 টি কলামে পতিত হয়েছি যা আমার যা চেয়েছিল সবকিছু প্রয়োগ করে।
ডেডকোড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.