পরিবর্তনশীল সত্তাকে কীভাবে সম্পর্কিত টেবিলে রূপান্তর করতে হয় তা জানেন না


9

ভূমিকা এবং অনুমোদিত তথ্য:

নীচের উদাহরণটি আমার যে সমস্যার মুখোমুখি হচ্ছে তা চিত্রিত করে:

প্রাণীর একটি রেস থাকে, যা বিড়াল বা কুকুর হতে পারে । বিড়াল সিয়াম বা ফারসি হতে পারে । কুকুর একটি জার্মান রাখাল বা ল্যাব্রাডর পুনরুদ্ধারকারী হতে পারে ।

প্রাণী একটি শক্তিশালী সত্তা, অন্যদিকে এর জাতি এমন একটি বৈশিষ্ট্য যা দুটি প্রদত্ত মানের (বিড়াল বা একটি কুকুর) একটি হতে পারে। এই দুটি মানই জটিল (আমি সমস্যাটি বোঝাতে এখানে কেবল কুকুর / বিড়ালের ধরণ যোগ করেছি, তবে বিড়ালের / কুকুরের নাম এবং অন্যান্য জিনিসপত্রের গুচ্ছও থাকতে পারে)।

সমস্যাঃ

এই উদাহরণটির জন্য কীভাবে সম্পর্কিত টেবিল তৈরি করতে হয় তা আমি জানি না।

সমস্যা সমাধানের জন্য আমার প্রভাবসমূহ:

আমি চেনের স্বরলিপিটি ব্যবহার করে ইআর ডায়াগ্রাম আঁকতে চেষ্টা করেছি, যা সমস্যার প্রতিনিধিত্ব করে তবে একটি শিক্ষানবিশ হয়েও আমি জানি না আমি এটি সঠিকভাবে সম্পাদন করেছি কিনা। আমি যা পেয়েছি তা এখানে:

এখানে চিত্র বর্ণনা লিখুন

আমি যদি কিছু ভুল হয়ে যায় তবে আমি ক্ষমাপ্রার্থী, যদি এমন হয় তবে দয়া করে আমাকে সংশোধন করুন। আমি কেবল "নিখরচায় সমাধান" পেতে চাই না তবে এই সমস্যাটি কীভাবে মোকাবেলা করতে হয় তা শিখতে চাই যাতে ভবিষ্যতে আমি নিজে থেকে এটি সমাধান করতে পারি।

আমার মনে একটাই জিনিস দুটি পৃথক টেবিল তৈরি করা, একটি বিড়ালের জন্য এবং একটি কুকুরের জন্য। এছাড়াও, অ্যানিম্যাল টেবিলের রেস অ্যাট্রিবিউট কেবল বিড়াল বা কুকুরের মান সংরক্ষণ করবে। এটার মতো কিছু:

Animal< # Animal_ID, race, other attributes >
Cat < # Cat_ID, $ Animal_ID, breed >
Dog < # Dog_ID, $ Animal_ID, breed >

আমার সমাধান সম্পর্কে আমার সত্যিই খারাপ ধারণা আছে এবং আমি ভয় করি যে এটি ভুল, তাই নীচের প্রশ্নটি।

প্রশ্ন:

  • আমি কীভাবে আমার উদাহরণটি ইআর ডায়াগ্রামে রূপান্তর করতে পারি?
  • কীভাবে সেই ইআর ডায়াগ্রামকে সম্পর্কিত টেবিলগুলিতে রূপান্তর করতে?

যদি আরও তথ্যের প্রয়োজন হয় একটি মন্তব্য করুন এবং আমি যত তাড়াতাড়ি সম্ভব আমার পোস্ট আপডেট করব। আমি এখানে মোটামুটি নতুন থাকাকালীন উপযুক্ত ট্যাগ যুক্ত করতে নির্দ্বিধায়ও বোধ করি।

ধন্যবাদ.


1
টেবিলগুলিতে ইইআর ডায়াগ্রামের রূপান্তরটি এই কাগজে টিজেটিওরি, ডি.ইয়াং, জেপিফ্রির 1986 সাল থেকে পাওয়া যাবে : বর্ধিত সত্তা-সম্পর্ক মডেল ব্যবহার করে রিলেশনাল ডেটাবেসগুলির জন্য একটি লজিক্যাল ডিজাইনের পদ্ধতি । এটি সোজা এবং আমার প্রিয় একটি কাগজপত্র।
चमत्कार 173

উত্তর:


11

এই দৃশ্যের যথাযথ কাঠামো একটি সাবক্লাস / উত্তরাধিকারী মডেল, এবং আমি এই উত্তরে প্রস্তাবিত ধারণার সাথে প্রায় একই রকম: ভিন্ন ভিন্ন আদেশের মূল্যের তালিকা

এই প্রশ্নের প্রস্তাবিত মডেলটি আসলে খুব কাছাকাছি যে Animalসত্তায় টাইপ (ie race) এবং সমস্ত ধরণের জুড়ে সাধারণ বৈশিষ্ট্য রয়েছে। যাইহোক, দুটি ছোটখাট পরিবর্তন প্রয়োজন যা:

  1. ক্যাট_আইডি এবং কুকুর_আইডি ক্ষেত্রগুলি তাদের নিজ নিজ সত্তা থেকে সরান:

    এখানে মূল ধারণা যে সবকিছু একটি হল Animal, নির্বিশেষে race: Cat, Dog, Elephant, ইত্যাদি। সেই সূচনা পয়েন্টটি দেওয়া, যে কোনও বিশেষের raceজন্য Animalসত্যিকার অর্থে পৃথক পরিচয়কারীর প্রয়োজন নেই:

    1. Animal_IDঅনন্য
    2. Cat, Dog, এবং অন্য কোনও অতিরিক্ত raceসত্ত্বা ভবিষ্যতে যোগ নিজেরাই, সম্পূর্ণরূপে কোন বিশেষ প্রতিনিধিত্ব করে না Animal; প্যারেন্ট সত্তায় থাকা তথ্যের সংমিশ্রণে কেবল তখনই তাদের অর্থ হয় Animal,।

    তাই, Animal_IDসম্পত্তি Cat, Dogইত্যাদি সত্ত্বা উভয় পি কে এবং এফ কে ফিরে এসেছে Animalসত্তা।

  2. এর প্রকারের মধ্যে পার্থক্য breed:

    কেবলমাত্র দুটি বৈশিষ্ট্য একই নাম ভাগ করে নেওয়ার কারণে অপরিহার্যভাবে এই বৈশিষ্ট্যগুলি একই নয়, এমনকি নাম একইরকম সম্পর্কের বোঝায় । এই ক্ষেত্রে, আপনার কাছে যা আছে তা আসলে CatBreedএবং DogBreedপৃথক "প্রকার" হিসাবে

প্রাথমিক নোট

  1. এসকিউএলটি মাইক্রোসফ্ট এসকিউএল সার্ভারের সাথে নির্দিষ্ট (যেমন টি-এসকিউএল) specific অর্থ, ডেটাটাইপগুলি সম্পর্কে সাবধান থাকুন কারণ সমস্ত আরডিবিএমএস-এ সেগুলি এক নয়। উদাহরণস্বরূপ, আমি ব্যবহার করছি VARCHARতবে আপনি যদি স্ট্যান্ডার্ড এএসসিআইআই সেট এর বাইরে কোনও কিছু সঞ্চয় করতে চান তবে আপনার সত্যই ব্যবহার করা উচিত NVARCHAR
  2. "টাইপ" টেবিলগুলির আইডি ক্ষেত্রগুলি ( Race, CatBreedএবং DogBreed) স্বয়ংক্রিয়ভাবে বর্ধনকারী নয় (যেমন টি-এসকিউএলের ক্ষেত্রে আইডেন্টিটি) কারণ তারা অ্যাপ্লিকেশন ধ্রুবক (যেমন তারা অ্যাপ্লিকেশনটির অংশ) যা স্থির দৃষ্টিকোণ মানগুলি ডাটাবেস এবং enumসি # (অথবা অন্যান্য ভাষা) এর হিসাবে প্রতিনিধিত্ব করা হয় । যদি মানগুলি যুক্ত করা হয় তবে সেগুলি নিয়ন্ত্রিত পরিস্থিতিতে যুক্ত করা হয়। আমি অ্যাপ্লিকেশন মাধ্যমে আসা ব্যবহারকারীর ডেটা জন্য স্বয়ংক্রিয় বৃদ্ধি ক্ষেত্রের ব্যবহার সংরক্ষণ করি।
  3. আমি যে নামকরণ কনভেনশনটি ব্যবহার করি তা হ'ল প্রতিটি সাবক্লাস টেবিলের নামটি মূল শ্রেণীর নাম দিয়ে শুরু করা হবে যার পরে সাবক্লাসের নাম থাকবে। এটি টেবিলগুলি সংগঠিত করতে পাশাপাশি পরিষ্কারভাবে (এফকেগুলিকে না দেখিয়ে) সাবক্লাস টেবিলের মূল সত্তার টেবিলের সম্পর্ককে নির্দেশ করে।
  4. দর্শন সম্পর্কিত একটি নোটের জন্য দয়া করে শেষে "চূড়ান্ত সম্পাদনা" বিভাগটি দেখুন।

"জাতি" হিসাবে "রেস" -স্পেসিফিক অ্যাপ্রোচ

রেস-নির্দিষ্ট ডায়াগ্রাম হিসাবে বংশবৃদ্ধি
টেবিলগুলির এই প্রথম সেটটি হ'ল লুকিং / প্রকারের সারণী:

CREATE TABLE Race
(
  RaceID INT NOT NULL PRIMARY KEY
  RaceName VARCHAR(50) NOT NULL
);

CREATE TABLE CatBreed
(
  CatBreedID INT NOT NULL PRIMARY KEY,
  BreedName VARCHAR(50),
  CatBreedAttribute1 INT,
  CatBreedAttribute2 VARCHAR(10)
  -- other "CatBreed"-specific properties as needed
);

CREATE TABLE DogBreed
(
  DogBreedID INT NOT NULL PRIMARY KEY,
  BreedName VARCHAR(50),
  DogBreedAttribute1 TINYINT
  -- other "DogBreed"-specific properties as needed
);

এই দ্বিতীয় তালিকাটি হ'ল প্রধান "প্রাণী" সত্তা:

CREATE TABLE Animal
(
  AnimalID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
  RaceID INT NOT NULL, -- FK to Race
  Name VARCHAR(50)
  -- other "Animal" properties that are shared across "Race" types
);

ALTER TABLE Animal
  ADD CONSTRAINT [FK_Animal_Race]
  FOREIGN KEY (RaceID)
  REFERENCES Race (RaceID);

টেবিল এই তৃতীয় সেট প্রশংসাসূচক উপ-বর্গ সত্ত্বা প্রতিটি সংজ্ঞার সম্পন্ন হয় Raceএর Animal:

CREATE TABLE AnimalCat
(
  AnimalID INT NOT NULL PRIMARY KEY, -- FK to Animal
  CatBreedID INT NOT NULL, -- FK to CatBreed
  HairColor VARCHAR(50) NOT NULL
  -- other "Cat"-specific properties as needed
);

ALTER TABLE AnimalCat
  ADD CONSTRAINT [FK_AnimalCat_CatBreed]
  FOREIGN KEY (CatBreedID)
  REFERENCES CatBreed (CatBreedID);

ALTER TABLE AnimalCat
  ADD CONSTRAINT [FK_AnimalCat_Animal]
  FOREIGN KEY (AnimalID)
  REFERENCES Animal (AnimalID);


CREATE TABLE AnimalDog
(
  AnimalID INT NOT NULL PRIMARY KEY, -- FK to Animal
  DogBreedID INT NOT NULL, -- FK to DogBreed
  HairColor VARCHAR(50) NOT NULL
  -- other "Dog"-specific properties as needed
);

ALTER TABLE AnimalDog
  ADD CONSTRAINT [FK_AnimalDog_DogBreed]
  FOREIGN KEY (DogBreedID)
  REFERENCES DogBreed (DogBreedID);

ALTER TABLE AnimalDog
  ADD CONSTRAINT [FK_AnimalDog_Animal]
  FOREIGN KEY (AnimalID)
  REFERENCES Animal (AnimalID);

একটি ভাগ করা breedপ্রকার ব্যবহার করে মডেলটি "অতিরিক্ত নোট" বিভাগের পরে দেখানো হয়।

অতিরিক্ত নোট

  1. ধারণাটি breedবিভ্রান্তির কেন্দ্রবিন্দু বলে মনে হচ্ছে। এটি jcolebrand দ্বারা প্রস্তাব করা হয়েছিল (প্রশ্নের মন্তব্যে) যা breedবিভিন্ন সম্পত্তি জুড়ে ভাগ করা সম্পত্তি race, এবং অন্য দুটি উত্তর এটি যেমন তাদের মডেলগুলিতে সংহত করেছে। এটি একটি ভুল, তবে এর মানগুলি breedবিভিন্ন মানগুলির মধ্যে ভাগ হয় না race। হ্যাঁ, আমি সচেতন যে আরও দুটি প্রস্তাবিত মডেল raceএকটি পিতামাতা তৈরি করে এই সমস্যাটি সমাধান করার চেষ্টা করেছেন breed। যদিও এটি প্রযুক্তিগতভাবে সম্পর্কের সমস্যার সমাধান করে, অ-সাধারণ বৈশিষ্ট্যগুলি সম্পর্কে কী করা উচিত এবং কীভাবে একটি raceনেই তার পরিচালনা কীভাবে করা যায় তার সামগ্রিক মডেলিংয়ের প্রশ্নটি সমাধান করতে এটি সহায়তা করে না breed। তবে, এই ক্ষেত্রে যে এই জাতীয় সম্পত্তি সবার মধ্যে বিদ্যমান থাকার গ্যারান্টিযুক্ত ছিলAnimals, আমি সেই জন্য একটি বিকল্পও অন্তর্ভুক্ত করব (নীচে)।
  2. বিজয়প এবং ডেভিডএন প্রস্তাবিত মডেলগুলি (যা দেখতে দেখতে অভিন্ন বলে মনে হচ্ছে) কাজ করে না কারণ:
    1. তারা হয়
      1. অ-সাধারণ সম্পত্তিগুলি সংরক্ষণ করার অনুমতি দেবেন না (কমপক্ষে কোনও ব্যক্তির স্বতন্ত্র উদাহরণের জন্য নয় Animal), বা
      2. সকলের জন্য সমস্ত সম্পত্তি সত্তায় raceসংরক্ষণ করা দরকার Animalযা এই ডেটা উপস্থাপনের জন্য খুব সমতল (এবং প্রায় অ-সম্পর্কযুক্ত) উপায়। হ্যাঁ, লোকেরা এই সময়টি সব সময় করে তবে তার অর্থ হল সেই বৈশিষ্ট্যের জন্য সারিতে প্রতি অনেকগুলি নূতন ক্ষেত্র রয়েছে এবং সেই সারণীর নির্দিষ্ট raceক্ষেত্রগুলির সাথে সারি প্রতি কোন ক্ষেত্র যুক্ত raceknowing
    2. তারা একটি যোগ করার জন্য অনুমতি দেয় না raceএর Animalভবিষ্যৎ নেই যে breedএকটি সম্পত্তি হিসেবে। এবং সমস্ত এমনকি যদি Animalগুলি একটি আছে breed, যে কি পূর্বে সম্পর্কে উল্লেখ করা হয়েছে কারণে কাঠামো পরিবর্তন করবে না breedযে: breedউপর নির্ভরশীল race(অর্থাত breedজন্য Catহিসাবে একই জিনিস না breedজন্য Dog)।

প্রচলিত / ভাগ করা - সম্পত্তি পদ্ধতির হিসাবে "ব্রিড"

এখানে চিত্র বর্ণনা লিখুন
দয়া করে নোট করুন:

  1. নীচের এসকিউএল উপরে উপস্থাপিত মডেল হিসাবে একই ডাটাবেস চালানো যেতে পারে:

    1. Raceটেবিল একই
    2. Breedটেবিল নতুন
    3. তিনটি Animalটেবিল a এর সাথে সংযুক্ত করা হয়েছে2
  2. এমনকি Breedএখন একটি সাধারণ সম্পত্তি হওয়ার পরেও Raceমূল / পিতামাতার সত্তায় এটি উল্লেখ করা ঠিক হবে না (যদিও এটি প্রযুক্তিগতভাবে সম্পর্কযুক্ত সঠিক)। সুতরাং, উভয় RaceIDএবং BreedIDপ্রতিনিধিত্ব করা হয় Animal2। অর্ডার মধ্যে একটি মেলেনি প্রতিরোধ করার জন্য RaceIDউল্লেখ করা Animal2হবে এবং একটি BreedIDএকটি ভিন্ন হয় যে RaceID, আমি উভয় একটি এফ কে যোগ করেছেন RaceID, BreedIDযে রেফারেন্স সেই ক্ষেত্র একটি অনন্য বাধ্যতা Breedটেবিল। আমি সাধারণত একটি অনন্য চুক্তির দিকে এফকে নির্দেশ করা তুচ্ছ করি, তবে এটি করার কয়েকটি বৈধ কারণের মধ্যে এখানে একটি। একটি অনন্য চুক্তিটি যুক্তিযুক্তভাবে একটি "বিকল্প কী", যা এটিকে ব্যবহারের জন্য বৈধ করে তোলে। দয়া করে নোট করুন যে Breedটেবিলটিতে এখনও ঠিক একটি পিকে রয়েছে BreedID
    1. সম্মিলিত ক্ষেত্রগুলিতে কেবলমাত্র একজন পিকে সঙ্গে না যাওয়ার কারণ এবং কোনও অনন্য চুক্তিটি হ'ল এটি একই BreedIDসাথে বিভিন্ন মানকে পুনরাবৃত্তি করার অনুমতি দেয় RaceID
    2. যে চারদিকে পিকে এবং ইউনিক কনট্রন্টটি স্যুইচ না করার কারণ হ'ল এটিই কেবল ব্যবহারের জন্য না হতে পারে BreedID, তাই এটি উপলব্ধ Breedনা করেই কোনও নির্দিষ্ট মান উল্লেখ করা সম্ভব RaceID
  3. নিম্নলিখিত মডেলটি কাজ করার সময় এটিতে একটি ভাগ করে নেওয়া ধারণা সম্পর্কে দুটি সম্ভাব্য ত্রুটি রয়েছে Breed(এবং এজন্যেই আমি- Raceবিশিষ্ট Breedসারণীগুলিই বেশি পছন্দ করি )।
    1. একটি অন্তর্নিহিত অনুমান যে সমস্ত মানের মান Breedএকই বৈশিষ্ট্য আছে। Dog"বংশবৃদ্ধি" এবং Elephant"শাবক" এর মধ্যে পৃথক বৈশিষ্ট্য থাকার এই মডেলের কোনও সহজ উপায় নেই । তবে এটি করার এখনও একটি উপায় রয়েছে যা "চূড়ান্ত সম্পাদনা" বিভাগে উল্লিখিত হয়েছে।
    2. Breedএকের অধিক জাতিকে ভাগ করে নেওয়ার কোনও উপায় নেই । আমি নিশ্চিত নই যে এটি করতে ইচ্ছুক কিনা (বা সম্ভবত প্রাণী ধারণায় নয় তবে সম্ভবত অন্যান্য পরিস্থিতিতে এই ধরণের মডেল ব্যবহার করা হবে) তবে এটি এখানে সম্ভব নয়।
CREATE TABLE Race
(
  RaceID INT NOT NULL PRIMARY KEY,
  RaceName VARCHAR(50) NOT NULL
);

CREATE TABLE Breed
(
  BreedID INT NOT NULL PRIMARY KEY,
  RaceID INT NOT NULL, -- FK to Race
  BreedName VARCHAR(50)
);

ALTER TABLE Breed
  ADD CONSTRAINT [UQ_Breed]
  UNIQUE (RaceID, BreedID);

ALTER TABLE Breed
  ADD CONSTRAINT [FK_Breed_Race]
  FOREIGN KEY (RaceID)
  REFERENCES Race (RaceID);

CREATE TABLE Animal2
(
  AnimalID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
  RaceID INT NOT NULL, -- FK to Race, FK to Breed
  BreedID INT NOT NULL, -- FK to Breed
  Name VARCHAR(50)
  -- other properties common to all "Animal" types
);

ALTER TABLE Animal2
  ADD CONSTRAINT [FK_Animal2_Race]
  FOREIGN KEY (RaceID)
  REFERENCES Race (RaceID);

-- This FK points to the UNIQUE CONSTRAINT on Breed, _not_ to the PK!
ALTER TABLE Animal2
  ADD CONSTRAINT [FK_Animal2_Breed]
  FOREIGN KEY (RaceID, BreedID)
  REFERENCES Breed (RaceID, BreedID);


CREATE TABLE AnimalCat2
(
  AnimalID INT NOT NULL PRIMARY KEY, -- FK to Animal
  HairColor VARCHAR(50) NOT NULL
);

ALTER TABLE AnimalCat2
  ADD CONSTRAINT [FK_AnimalCat2_Animal2]
  FOREIGN KEY (AnimalID)
  REFERENCES Animal2 (AnimalID);

CREATE TABLE AnimalDog2
(
  AnimalID INT NOT NULL PRIMARY KEY,
  HairColor VARCHAR(50) NOT NULL
);

ALTER TABLE AnimalDog2
  ADD CONSTRAINT [FK_AnimalDog2_Animal2]
  FOREIGN KEY (AnimalID)
  REFERENCES Animal2 (AnimalID);


চূড়ান্ত সম্পাদনা (আশা করি ;-)

  1. ধরনের মধ্যে অসম বৈশিষ্ট্য পরিচালনার সম্ভাবনা (এবং তারপর অসুবিধা) সংক্রান্ত Breed, এটা হল একই উপশ্রেণী / উত্তরাধিকার ধারণা কিন্তু চাকরী সম্ভব Breedপ্রধান সত্তা হিসেবে। এই সেট-আপে Breedটেবিল বৈশিষ্ট্য সব ধরনের সাধারণ হবে Breed(ঠিক মত Animalটেবিল) এবং RaceIDধরণ উপস্থাপনের Breed(একই যেমন মধ্যে আছে Animalটেবিল)। তারপরে আপনার কাছে সাবক্লাস টেবিল থাকবে যেমন BreedCat, BreedDogইত্যাদি। ছোট প্রকল্পগুলির জন্য এটিকে "ওভার ইঞ্জিনিয়ারিং" হিসাবে বিবেচনা করা যেতে পারে তবে এটির দ্বারা উপকৃত হওয়া পরিস্থিতিগুলির বিকল্প হিসাবে এটি উল্লেখ করা হচ্ছে।
  2. উভয় পদ্ধতির জন্য, এটি কখনও কখনও সম্পূর্ণ সংস্থাগুলির শর্ট-কাট হিসাবে ভিউ তৈরি করতে সহায়তা করে। উদাহরণস্বরূপ, বিবেচনা করুন:

    CREATE VIEW Cats AS
       SELECT  an.AnimalID,
               an.RaceID,
               an.Name,
               -- other "Animal" properties that are shared across "Race" types
               cat.CatBreedID,
               cat.HairColor
               -- other "Cat"-specific properties as needed
       FROM    Animal an
       INNER JOIN  AnimalCat cat
               ON  cat.AnimalID = an.AnimalID
       -- maybe add in JOIN(s) and field(s) for "Race" and/or "Breed"
  3. লজিক্যাল সত্তাগুলির অংশ না হয়েও, কমপক্ষে রেকর্ডগুলি সন্নিবেশ করা ও আপডেট করা হয় তখন তা কমপক্ষে উপলব্ধি করার জন্য টেবিলগুলিতে নিরীক্ষণের ক্ষেত্রগুলি রাখা মোটামুটি সাধারণ। ব্যবহারিক ক্ষেত্রে তাই:
    1. টেবিলে একটি CreatedDateক্ষেত্র যুক্ত করা হবে AnimalAnimalCatউভয় টেবিলের জন্য সারি সন্নিবেশ করা হওয়ায় একটি লেনদেনের মধ্যে একই সময় করা উচিত বলে এই ক্ষেত্রটি কোনও সাবক্লাস টেবিলের (যেমন ) কোনও প্রয়োজন নেই ।
    2. একটি LastModifiedDateক্ষেত্র Animalটেবিল এবং সমস্ত সাবক্লাসের টেবিলগুলিতে যুক্ত হবে। এই ক্ষেত্রটি কেবলমাত্র সেই নির্দিষ্ট টেবিলটি আপডেট হলেই আপডেট হয়: যদি কোনও আপডেটের মধ্যে উপস্থিত হয় AnimalCatতবে Animalকোনও নির্দিষ্টটির জন্য না থাকে AnimalIDতবে কেবলমাত্র LastModifiedDateক্ষেত্রটি AnimalCatসেট করা হবে।

2
আমার সমস্যাটি হ'ল কোনওভাবেই আপনি অনুভূতিটি পেয়েছেন। আমি আপনার লিঙ্কিত উত্তরটি এক চেহারা দেব এবং এটি সাবধানে অধ্যয়ন করব। সারণীর একটি সাধারণ সংজ্ঞা পাশাপাশি দুর্দান্ত হবে (যদি এসকিউএল কোয়েরিগুলি আপনার কাছে এই মুহুর্তে লেখার জন্য খুব বেশি হয়)। আপনি যদি এসকিউএল কোয়েরি বা সারণী সংজ্ঞা সহ আপনার পোস্টটি আপডেট করার সিদ্ধান্ত নেন তবে দয়া করে আমাকে একটি মন্তব্য দিন। আবার আপনাকে ধন্যবাদ. শুভেচ্ছান্তে.
সর্বদা লার্নিং নিউ স্টাফ

1
আমি আপনার উত্তরটি আমার বাস্তব জীবনের ক্ষেত্রে প্রয়োগ করার চেষ্টা করছি। আমি যদি আপনার নির্দেশাবলী অন্ধভাবে অনুসরণ করি তবে আমার বিশ্বাস যে আমি আমার নকশাটিকে আরও অনুকূলিত করার সুযোগটি হাতছাড়া করতে পারি। আপনি চাইলে আমার সর্বশেষ প্রশ্নটি একবার দেখে নিই যেহেতু আপনি আমার প্রশ্নগুলি নিখুঁতভাবে বুঝতে সক্ষম হয়েছেন এবং দুর্দান্ত উত্তর সরবরাহ করতে পেরেছেন। ভবিষ্যতের পাঠকদেরও উপযোগী করার জন্য জেনেরিক ডেটা মডেলটি ব্যবহার করার জন্য আমি প্রশ্নটি রচনা করেছি। এটি খুঁজে পেতে আপনার যদি সমস্যা হয় তবে আমাকে একটি মন্তব্য করুন। আপনাকে ধন্যবাদ এবং বিরক্তির জন্য দুঃখিত ...
সর্বদা লার্নিং নিউস্টফ

নিবন্ধন করুন এই বার্তাটি আগে পেয়েছেন তবে এখনই এটিতে পৌঁছানোর সময় নেই। উপরে আপনার নামের উপর ক্লিক করে আমি নতুন প্রশ্নটি সন্ধান করতে সক্ষম হয়েছি এবং এটি আপনার সমস্ত প্রশ্ন দেখায় :-)।
সলোমন রুটজকি

আমি এই প্রশ্নের উল্লেখ ছিল । সংক্ষেপে: আমার 3 টি সত্ত্বা রয়েছে সাধারণ গুণাবলী সহ D, সুতরাং আমি আপনার উত্তর থেকে পদ্ধতিটি প্রয়োগ করতে চেয়েছিলাম। দুটি সত্তার সাধারণ বৈশিষ্ট্য রয়েছে Eযা তৃতীয় সত্তায় উপস্থিত নেই। আমার কি এই সত্যটি উপেক্ষা করা উচিত এবং স্ট্যান্ডার্ড সমাধান প্রয়োগ করা উচিত, বা আমার নকশাটিকে আরও অনুকূল করার কোনও উপায় আছে?
সর্বদা লার্নিং নিউ স্টাফ

4

প্রথমত, আপনি ইআর মডেলিং এবং রিলেশনাল মডেলিংয়ের মধ্যে পার্থক্য করতে ভাল করছেন। অনেক newbies না।

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

আপনার কেস ক্লাস / সাবক্লাসের ক্লাসিক কেস বা, যদি আপনার পছন্দ হয় তবে টাইপ করুন / সাব টাইপ করুন।

ইআর মডেলিংয়ে ব্যবহৃত বাক্যাংশটি হ'ল "জেনারালাইজেশন / স্পেশালাইজেশন"। এবং নিবন্ধগুলির অনেকগুলি এইআর (বর্ধিত সত্তা-সম্পর্ক) মডেলিং নামক কিছুতে এটি দেখায়। এটি পিআর চেনের ইআর মডেলিংয়ের মূল উপস্থাপনায় ছিল না। এটি পরে যুক্ত করা হয়েছিল। পিডিএফ আকারে জেন / স্পেকের বেশ ভাল সংক্ষিপ্তসার জন্য, এখানে ক্লিক করুন

এর পরে, কোনও ক্লাস / সাবক্লাস কেসটি যখন আপনি টেবিলগুলি ডিজাইনের করে তুলনামূলক মডেলিংয়ে রূপান্তর করেন। একাধিক পদ্ধতি আছে। দুটি প্রধান পদ্ধতির একক টেবিল উত্তরাধিকার এবং শ্রেণি টেবিল উত্তরাধিকার বলা হয়। প্রত্যেকের সুবিধাগুলি এবং ঘাটতি রয়েছে। এই দুটি ডিজাইনের সেরা উপস্থাপনাটি এসেছে মার্টিন ফাউলারের কাছ থেকে। আপনি এখানে এবং এখানে তার রূপরেখা দেখতে পারেন ।

একক টেবিল উত্তরাধিকারের বড় সুবিধা হ'ল সরলতা। এটি সবই একটি টেবিলের মধ্যে সঞ্চিত। বড় অসুবিধাটি অনেকটা NULLS। এটি স্থান এবং সময় নষ্ট করতে পারে এবং বিভ্রান্তিকর যুক্তি তৈরি করতে পারে।

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

শেষ অবধি, এই অঞ্চলে একটি ট্যাগ রয়েছে যা আপনার মত প্রশ্নগুলি একসাথে সংগ্রহ করে।
এটা এখানে:


1
+1 যা আমাকে বিভ্রান্ত করছে তা হ'ল টেবিলের চিত্রগুলিতে প্রাথমিক কীগুলির অভাব। বিশেষত "classTableInheritance" এ আমি দেখতে পাচ্ছি না যে এই সমস্ত টেবিল একই প্রাথমিক কী দ্বারা সংযুক্ত রয়েছে।
चमत्कार 173

@ चमत्कार 173 একটি বৈধ পয়েন্ট। কিছু কারণে, ফোলার চিত্রের মধ্যে পিকে এবং এফকে অন্তর্ভুক্ত করে না। ক্লাস টেবিল উত্তরাধিকারের অধীনে অন্যান্য নিবন্ধগুলি রয়েছে যা এই বিবরণটি সরবরাহ করে। শ্রেণি সারণীর উত্তরাধিকারের সমস্ত বাস্তবায়ন এটিকে ভাগ করা প্রাথমিক কী সহ একত্রিত করে না। আমি এটি সুপারিশ। সন্নিবেশের সময় এটি আরও কিছুটা কাজ, তবে যোগদানের পুনরুদ্ধারের সময় সহজ এবং দ্রুত।
ওয়াল্টার মিট্টি

3

আমি সম্ভাব্য নকশা হিসাবে দেখতে

টেবিল Race

RaceId- PK- Int
RaceName - Varchar(50)

টেবিল Breed

BreedId - PK- Int
RaceId - FK - Int
BreedName - varchar(50)

টেবিল Animal

AnimalId - PK- Int
BreedId - FK - Int
Other Columns....

উপরের এই পিকেগুলি অটো-ইনক্রিমেন্টিং কলাম হবে। Animalসারণীতে থাকা অন্যান্য কলামগুলির নাম অনুসারে নামকরণ করা যেতে পারে।

এখানে চিত্র বর্ণনা লিখুন


গতির উন্নতির জন্য পরবর্তী সূচীগুলির সুবিধার্থে আমি অ্যানিম্যাল টেবিলটিতে রেস এবং টাইপের কীগুলি (ট্রিগার হতে পারে) কীগুলির সাথে একটি ক্ষেত্র যুক্ত করব।
ফিলিপ আলকাসিবার

0

আপনার বর্তমান পদ্ধতিটি খারাপ নয়। তবে, আপনি যদি পরে আরও ঘোড়দৌড় যোগ করতে যাচ্ছেন (পাখি, মাছ ইত্যাদি) তবে প্রতিটিটির জন্য একটি পৃথক টেবিল তৈরি করা জটিল হতে পারে। আমি নিম্নলিখিত মত কিছু সুপারিশ করব:

Animal < # Animal_ID, Breed_ID, other attributes >
Breed < # Breed_ID, Race_ID >
Race < # Race_ID >

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

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