আপনি কীভাবে কার্যকরভাবে একটি ডাটাবেসে উত্তরাধিকার মডেল করবেন?


131

ডেটাবেসগুলিতে উত্তরাধিকারের মডেলিংয়ের জন্য সেরা অনুশীলনগুলি কী কী?

ট্রেড-অফগুলি কী কী (যেমন উত্সাহ)?

(আমি এসকিউএল সার্ভার এবং। নেট সম্পর্কে সর্বাধিক আগ্রহী, তবে অন্যান্য প্ল্যাটফর্মগুলি কীভাবে এই সমস্যাটিকে সম্বোধন করে তাও আমি বুঝতে চাই))


14
আপনি যদি "সেরা অনুশীলনে" আগ্রহী হন তবে বেশিরভাগ উত্তর কেবল ভুল simply সেরা অনুশীলন আদেশ দেয় যে আরডিবি এবং অ্যাপ্লিকেশনটি স্বাধীন; তাদের সম্পূর্ণ ভিন্ন ডিজাইনের মানদণ্ড রয়েছে। সুতরাং একটি ডাটাবেসে "মডেলিংয়ের উত্তরাধিকার" (বা একক অ্যাপ্লিকেশন বা অ্যাপ্লিকেশন ভাষার সাথে মানিয়ে নিতে আরডিবি মডেলিং করা) খুব খারাপ অভ্যাস, অজানা, এবং বেসিক আরডিবি ডিজাইনের নিয়মগুলি ভঙ্গ করে এবং এটিকে পঙ্গু করে দেয়।
পারফরম্যান্সডিবিএ


6
@ পারফরম্যান্সডিবিএ তাই ডিবি মডেলের উত্তরাধিকার এড়ানোর জন্য আপনার পরামর্শ কী? ধরা যাক আমাদের 50 টি বিভিন্ন ধরণের শিক্ষক রয়েছে এবং আমরা সেই নির্দিষ্ট শিক্ষককে ক্লাসের সাথে সংযুক্ত করতে চাই। উত্তরাধিকার না করে আপনি কীভাবে এটি অর্জন করবেন?
সোভালদা

1
@svlada। এটি কোনও আরডিবিতে প্রয়োগের জন্য সরাসরি-এগিয়ে, সুতরাং "উত্তরাধিকার" প্রয়োজন। একটি প্রশ্ন জিজ্ঞাসা করুন, টেবিলের সংজ্ঞা এবং একটি উদাহরণ অন্তর্ভুক্ত করুন, এবং আমি এটির বিস্তারিত উত্তর দেব। আপনি যদি ওও হিসাবে এটি করেন তবে এটি একটি রাজকীয় জগাখিচুড়ি হবে।
পারফরম্যান্সডিবিএ

উত্তর:


162

ডাটাবেসে উত্তরাধিকারের মডেল করার বিভিন্ন উপায় রয়েছে। যা আপনি চয়ন আপনার প্রয়োজনের উপর নির্ভর করে। এখানে কয়েকটি বিকল্প রয়েছে:

সারণী-প্রতি-প্রকার (টিপিটি)

প্রতিটি শ্রেণীর নিজস্ব টেবিল থাকে। বেস শ্রেণীর সমস্ত বেস শ্রেণীর উপাদান রয়েছে এবং এটি থেকে প্রাপ্ত প্রতিটি শ্রেণীর নিজস্ব টেবিল রয়েছে, এটি একটি প্রাথমিক কী যা বেস ক্লাসের টেবিলে একটি বিদেশী কীও রয়েছে; উত্পন্ন টেবিলের শ্রেণিতে কেবলমাত্র বিভিন্ন উপাদান রয়েছে।

উদাহরণস্বরূপ:

class Person {
    public int ID;
    public string FirstName;
    public string LastName;
}

class Employee : Person {
    public DateTime StartDate;
}

সারণীর ফলাফল যেমন:

table Person
------------
int id (PK)
string firstname
string lastname

table Employee
--------------
int id (PK, FK)
datetime startdate

টেবিল-প্রতি-হায়ারার্কি (টিপিএইচ)

একটি একক টেবিল রয়েছে যা সমস্ত উত্তরাধিকারের স্তরক্রমকে উপস্থাপন করে, যার অর্থ বেশ কয়েকটি কলাম বিচ্ছিন্ন হবে। একটি বৈষম্যমূলক কলাম যুক্ত করা হয়েছে যা সিস্টেমটি জানায় এটি কী ধরণের সারি।

উপরের ক্লাসগুলি দেওয়া, আপনি এই টেবিলটি দিয়ে শেষ করবেন:

table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate

যে কোনও সারির জন্য সারি টাইপ 0 (ব্যক্তি), প্রারম্ভকালীন সর্বদা শূন্য থাকবে।

টেবিল-প্রতি-কংক্রিট (টিপিসি)

প্রতিটি শ্রেণীর নিজস্ব পূর্ণরূপে গঠিত টেবিল রয়েছে যা অন্য কোনও টেবিলের কোনও উল্লেখ নেই ferences

উপরের ক্লাসগুলি দেওয়া, আপনি এই টেবিলগুলি দিয়ে শেষ করবেন:

table Person
------------
int id (PK)
string firstname
string lastname

table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate

23
'আপনি যা পছন্দ করেন তা আপনার প্রয়োজনের উপর নির্ভর করে' - দয়া করে বিশদভাবে ব্যাখ্যা করুন, কারণ আমার মতে পছন্দগুলির কারণগুলি প্রশ্নের মূল বিষয় গঠন করে।
অ্যালেক্স

12
প্রশ্নে আমার মন্তব্য দেখুন। আরডিবি প্রযুক্তিগত পদগুলির জন্য মজার নতুন নাম ব্যবহার করা যা বিভ্রান্তির দিকে নিয়ে যায়। "টিপিটি" সুপার টাইপ-সাব টাইপ। "টিপিএইচ" অস্বাভাবিক, এটি একটি গুরুতর ত্রুটি। "টিপিএইচ" আরও কম সাধারণীকরণ করা হয়েছে, অন্য একটি গুরুতর ত্রুটি।
পারফরম্যান্সডিবিএ

45
কেবলমাত্র একটি ডিবিএ অনুমান করবে যে ডেনোরালাইমাইজেশন সর্বদা একটি ত্রুটি। :)
ব্র্যাড উইলসন

7
যদিও আমি স্বীকার করব যে কিছু কিছু ক্ষেত্রে ডেনরমালাইজেশন ফলাফলের পারফরম্যান্স লাভের ফলে এটি সম্পূর্ণরূপে ডিবিএমএসে ডেটার যৌক্তিক এবং শারীরিক কাঠামোর মধ্যে অসম্পূর্ণ (বা অস্তিত্বহীন) পৃথক হওয়ার কারণে ঘটে। দুর্ভাগ্যক্রমে বেশিরভাগ বাণিজ্যিক ডিবিএমএস এই সমস্যায় ভুগছে। পছন্দ করুন গতি রক্ষার জন্য তথ্যের ধারাবাহিকতা ত্যাগ করে অনন্যমনীয়করণ একটি রায় ত্রুটি। দুঃখের বিষয়, ডিবিএমএস সঠিকভাবে ডিজাইন করা থাকলে এটি কোনও ডিবিএ বা দেবের পছন্দ করার দরকার নেই। রেকর্ডের জন্য আমি ডিবিএ নই।
কেনেথ কোচরান

6
@ ব্র্যাড উইলসন কেবলমাত্র একজন বিকাশকারীই "পারফরম্যান্সের জন্য" বা অন্যথায় অস্বীকার করবে। প্রায়শই, এটি অ-সাধারণীকরণ হয় না, সত্যটি এটি অস্বাভাবিক হয়। সেই ডি-নরমালাইজেশন বা আনমনর্মিলাইজড একটি ত্রুটি, এটি একটি তত্ত্ব, সমর্থিত এবং লক্ষ লক্ষ দ্বারা অভিজ্ঞ, এটি কোনও "অনুমান" নয়।
পারফরমেন্সডিবিএ

133

সঠিক ডাটাবেস ডিজাইন সঠিক অবজেক্ট ডিজাইনের মতো কিছুই নয়।

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

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

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

নিজেকে জিজ্ঞাসা করা ভাল, আপনি কোন তথ্যগুলি সংরক্ষণ করতে চান, কোন প্রশ্নগুলির উত্তর চান, কোন প্রতিবেদন উত্পন্ন করতে চান।

একবার যথাযথ ডিবি ডিজাইন তৈরি হয়ে গেলে, তখন কোয়েরি / দৃষ্টিভঙ্গি তৈরি করা সহজ বিষয় যা আপনাকে সেই সম্পর্কগুলিতে আপনার অবজেক্টগুলিকে সিরিয়ালাইজ করতে দেয়।

উদাহরণ:

একটি হোটেল বুকিং সিস্টেমে আপনার জেন ডো এর সী ভিউ ইন-এর একটি কক্ষের জন্য 10-10 এপ্রিলের জন্য রিজার্ভেশন রয়েছে তা সত্য সংরক্ষণ করতে হবে। এটি কি গ্রাহক সত্তার একটি বৈশিষ্ট্য? এটি কি হোটেল সত্তার একটি বৈশিষ্ট্য? গ্রাহক এবং হোটেল অন্তর্ভুক্ত বৈশিষ্ট্য সহ এটি কি কোনও রিজার্ভেশন সত্তা? এটি কোনও অবজেক্ট অরিয়েন্টেড সিস্টেমের মধ্যে যে কোনও বা সমস্ত কিছু হতে পারে। একটি ডাটাবেসে, এটি things জিনিসগুলির মধ্যে কোনওটিই নয়। এটি কেবল একটি খালি সত্য।

পার্থক্যটি দেখতে, নিম্নলিখিত দুটি প্রশ্ন বিবেচনা করুন। (1) পরের বছর জেন ডো এর কতটা হোটেল রিজার্ভেশন রয়েছে? (২) সীভিউ ইন-এ 10 এপ্রিলের জন্য কতটি কক্ষ বুক করা আছে?

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

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

সুতরাং, এটি বিশ্ব সম্পর্কে তথ্য সংরক্ষণ করার চেষ্টা করে - বৈশিষ্ট্যের সাথে সত্তা সঞ্চার করার চেষ্টা করার পরিবর্তে - যে কোনও সঠিক সম্পর্কযুক্ত ডাটাবেস নির্মিত হয়। এবং একবার এটি যথাযথভাবে ডিজাইন করা হয়ে গেলে, সেই নকশার ধাপ চলাকালীন যেগুলি দরকারী অনাবৃত ছিল না সেগুলি সহজেই তৈরি করা যেতে পারে, যেহেতু এই প্রশ্নগুলি পূরণ করার জন্য প্রয়োজনীয় সমস্ত তথ্য তাদের যথাযথ জায়গায় রয়েছে।


12
+1 শেষ অবধি, অজ্ঞতার সমুদ্রে খাঁটি জ্ঞানের একটি দ্বীপ (এবং তাদের অবস্থানের বাইরে কিছু শিখতে অস্বীকৃতি জানায়)। সম্মত, এটি যাদু নয়: আরডিবি যদি আরডিবি প্রিপিস্লস ব্যবহার করে ডিজাইন করা হয় তবে এটি "মানচিত্র" বা "প্রকল্প" কোনও "শ্রেণি" প্রযোজ্য। আরডিবিকে একটি শ্রেণিভিত্তিক প্রয়োজনীয়তার জন্য বাধ্য করা কেবল ভুল simply
পারফরমেন্সডিবিএ

2
আকর্ষণীয় উত্তর। আপনি কীভাবে গৃহীত উত্তরে ব্যক্তি-কর্মচারীর উদাহরণ মডেলিংয়ের পরামর্শ দেবেন?
সেভেনফোর্স

2
@ সেভেনফোর্স - ডিবি ডিজাইনটি সিস্টেমের প্রয়োজনীয়তার উপর নির্ভর করে যা দেওয়া হয় না। সিদ্ধান্ত নেওয়ার মতো পর্যাপ্ত তথ্য নেই isn't অনেক ক্ষেত্রে "টেবিল-প্রতি-টাইপ" ডিজাইনের অনুরূপ কিছু যথাযথ হতে পারে, যদি স্বেচ্ছায় অনুসরণ না করা হয়। উদাহরণস্বরূপ, স্টার্ট-ডেট সম্ভবত কোনও কর্মচারী অবজেক্টের জন্য একটি ভাল সম্পত্তি, তবে ডাটাবেসটিতে এটি অবশ্যই নিয়োগের টেবিলে একটি ক্ষেত্র হওয়া উচিত, যেহেতু একাধিক শুরুর তারিখের সাথে কোনও ব্যক্তিকে একাধিকবার ভাড়া নেওয়া যেতে পারে। এটি বস্তুর জন্য (যা সর্বাধিক সাম্প্রতিক ব্যবহার করবে) কোনও ব্যাপার নয়, তবে এটি ডাটাবেসে গুরুত্বপূর্ণ important
জেফ্রি এল হুইটলেজ

2
অবশ্যই, আমার প্রশ্নটি উত্তরাধিকারের মডেল করার উপায় সম্পর্কে ছিল। যথেষ্ট পরিষ্কার না হওয়ার জন্য দুঃখিত। ধন্যবাদ। যেমন আপনি উল্লেখ করেছেন, সম্ভবত একটি Employmentটেবিল থাকা উচিত , যা সমস্ত কর্মসংস্থান তাদের প্রারম্ভের তারিখগুলি সহ সংগ্রহ করে। সুতরাং যদি বর্তমানের কর্মসংস্থান শুরুর তারিখটি জেনে Employerরাখা গুরুত্বপূর্ণ, তবে এটি একটির জন্য যথাযথ ব্যবহারের ক্ষেত্রে হতে পারে View, যার মধ্যে অনুসন্ধানের মাধ্যমে সেই সম্পত্তি অন্তর্ভুক্ত রয়েছে? (দ্রষ্টব্য: বলে মনে হচ্ছে '-' ঠিক আমার
নিকের

5
এটি একটি উত্তরের বাস্তব রত্ন। এটি ডুবে যাওয়ার জন্য কিছুটা সময় প্রয়োজন হবে এবং সঠিক হওয়ার জন্য কিছু অনুশীলনের প্রয়োজন হবে, তবে এটি ইতিমধ্যে সম্পর্কিত চিন্তাধারার ডিজাইনে আমার চিন্তার প্রক্রিয়াটিকে প্রভাবিত করেছে।
মারিওডিএস

9

সংক্ষিপ্ত উত্তর: আপনি না।

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

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


3
+1 একটি ডাটাবেসে উত্তরাধিকারের মডেলটির চেষ্টা করা ভাল, সম্পর্কযুক্ত সম্পদের অপচয়।
ড্যানিয়েল স্পিওক

7

ব্র্যাড উইলসন উল্লিখিত, আপনি যেভাবে যাচ্ছেন টিপিটি, টিপিএইচ এবং টিপিসি নিদর্শনগুলি। তবে কয়েকটি নোট:

  • বেস ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত শিশু ক্লাসগুলিকে ডাটাবেসে বেস ক্লাস সংজ্ঞাতে দুর্বল সত্তা হিসাবে দেখা যেতে পারে, যার অর্থ তারা তাদের বেস-শ্রেণীর উপর নির্ভরশীল এবং এটি ছাড়া থাকতে পারে না। আমি বহুবার দেখেছি, সেই অনন্য আইডি প্রতিটি সন্তানের টেবিলে সংরক্ষণ করা হয় এবং এফকে প্যারেন্ট টেবিলে রাখার সময়। একটি এফকে কেবলমাত্র যথেষ্ট এবং অন-ডিলিট ক্যাসকেডটি শিশু এবং বেস টেবিলের মধ্যে এফকে-সম্পর্কের জন্য সক্ষম করা আরও ভাল।

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

বলুন যে আমরা একটি ডাটাবেস ডিজাইন করতে চাই যা নীচের আকারের শ্রেণীর চিত্রটি ধারণ করে:

public class Shape {
int id;
Color color;
Thickness thickness;
//other fields
}

public class Rectangle : Shape {
Point topLeft;
Point bottomRight;
}

public class Circle : Shape {
Point center;
int radius;
}

উপরের ক্লাসগুলির জন্য ডাটাবেস ডিজাইনটি এরকম হতে পারে:

table Shape
-----------
int id; (PK)
int color;
int thichkness;
int rowType; (0 = Rectangle, 1 = Circle, 2 = ...)

table Rectangle
----------
int ShapeID; (FK on delete cascade)
int topLeftX;
int topLeftY;
int bottomRightX;
int bottomRightY;

table Circle
----------
int ShapeID; (FK on delete cascade)  
int centerX;
int center;
int radius;

4

আপনি ডিবিতে দুটি প্রধান ধরণের উত্তরাধিকার সেটআপ করতে পারেন, সত্তা প্রতি সারণী এবং প্রতি স্তরক্রমের টেবিল।

প্রতি সত্তা সারণী হ'ল যেখানে আপনার কাছে একটি বেস সত্তা টেবিল রয়েছে যা সমস্ত শিশু শ্রেণীর অংশীদারি করে properties তারপরে আপনার প্রতি শিশু ক্লাসের জন্য আরও একটি সারণী রয়েছে যাতে কেবল সেই শ্রেণীর জন্য প্রযোজ্য বৈশিষ্ট্য থাকে। তারা তাদের পিকে দ্বারা 1: 1 এ লিঙ্কযুক্ত

বিকল্প পাঠ

প্রতি শ্রেণিবিন্যাস সারণি যেখানে সমস্ত শ্রেণি একটি টেবিল ভাগ করে নিয়েছিল এবং alচ্ছিক বৈশিষ্ট্যগুলি হ্রাসযোগ্য। এগুলি একটি বৈষম্যমূলক ক্ষেত্র যা এটি এমন একটি সংখ্যা যা বর্তমানে রেকর্ডটি ধারণ করে

বিকল্প পাঠ সেশনটাইপআইডি বৈষম্যমূলক

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

সম্পাদনা: আমি যে চিত্রগুলি এখানে দেখছি তা হ'ল আমি কাজ করছি এমন একটি প্রকল্পের স্ক্রিন শট। সম্পদ চিত্রটি সম্পূর্ণ নয়, সুতরাং এটির শূন্যতা, তবে এটি মূলত এটি দেখানো হয়েছিল যে এটির সেটআপ কীভাবে আপনার টেবিলের ভিতরে রাখবেন না। এটা তোমার উপর নির্ভর করে ;). সেশন টেবিলটিতে ভার্চুয়াল সহযোগিতার সেশন সম্পর্কিত তথ্য রয়েছে এবং কী ধরনের সহযোগিতা জড়িত তার উপর নির্ভর করে বিভিন্ন ধরণের সেশন হতে পারে।


আমি কংক্রিট বর্গের জন্য টার্গেটকে সত্যই উত্তরাধিকারের মডেলটি ভালভাবে না দেখে বিবেচনা করব এবং তাই আমি প্রদর্শন করিনি।
ম্যাটল্যান্ট

দৃষ্টান্তটি কোথা থেকে পাওয়া যাবে?
ক্রিসট

আপনার উত্তরের শেষে আপনি যে চিত্রগুলি সম্পর্কে কথা বলছেন তা কোথায়?
মুসা হায়দারী

1

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


2
লোকেরা কেন বিশ্বাস করে যে একটি ডাটাবেসকে স্বাভাবিক করার ফলে কর্মক্ষমতা হ্রাস পায়? লোকেরাও কি মনে করে যে ডিআরওয়াই নীতি কোড কর্মক্ষমতা হ্রাস করে? এই ভুল ধারণাটি কোথা থেকে এসেছে?
স্টিভেন এ। লো

1
সম্ভবত কারণ ডেনোরমাইজিং কার্যকারিতা উন্নত করতে পারে, তাই তুলনামূলকভাবে কথা বলার কারণে স্বাভাবিককরণ এটিকে হ্রাস করে। আমি এটির সাথে একমত বলে বলতে পারি না, তবে সম্ভবত এটি কীভাবে ঘটেছিল।
ম্যাথু শার্লে

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

1

অনুরূপ থ্রেড উত্তর পুনরাবৃত্তি

OR ম্যাপিংয়ে, প্যারেন্ট টেবিলে উত্তরাধিকারের মানচিত্র যেখানে পিতামাতার এবং সন্তানের টেবিলগুলি একই শনাক্তকারী ব্যবহার করে

উদাহরণ স্বরূপ

create table Object (
    Id int NOT NULL --primary key, auto-increment
    Name varchar(32)
)
create table SubObject (
    Id int NOT NULL  --primary key and also foreign key to Object
    Description varchar(32)
)

সাবজেক্টের সাথে অবজেক্টের একটি বিদেশী-কী সম্পর্ক রয়েছে। আপনি যখন সাবঅবজেক্ট সারি তৈরি করেন, আপনাকে অবশ্যই প্রথমে একটি অবজেক্ট সারি তৈরি করতে হবে এবং উভয় সারিতে আইডি ব্যবহার করতে হবে

সম্পাদনা করুন: আপনি যদি মডেল আচরণের দিকেও সন্ধান করেন, আপনার টাইপ টেবিলের দরকার হবে যা টেবিলের মধ্যে উত্তরাধিকারের সম্পর্ককে তালিকাভুক্ত করে, এবং সমাবেশ এবং শ্রেণীর নাম নির্দিষ্ট করে যা প্রতিটি টেবিলের আচরণকে বাস্তবায়িত করে

ওভারকিলের মতো মনে হচ্ছে, তবে এটি সমস্ত কিসের জন্য আপনি এটি ব্যবহার করতে চান তার উপর নির্ভর করে!


সেই আলোচনাটি শেষ হয়েছে প্রতিটি টেবিলে কয়েকটি কলাম যুক্ত করার বিষয়ে, মডেলিং উত্তরাধিকার সম্পর্কে নয়। আমি মনে করি যে আলোচনার শিরোনামটি প্রশ্ন এবং আলোচনার প্রকৃতির আরও ভালভাবে প্রতিবিম্বিত করতে পরিবর্তন করা উচিত।
এমনকি Mien,

1

এসকিউএল আলকেমি (পাইথন ওআরএম) ব্যবহার করে আপনি দুটি ধরণের উত্তরাধিকার করতে পারেন।

আমার যে অভিজ্ঞতা হয়েছে সে হ'ল একটি সেজ-টেবিল ব্যবহার করা এবং একটি বৈষম্যমূলক কলাম থাকা having উদাহরণস্বরূপ, একটি ভেড়া ডেটাবেস (কোনও রসিকতা নয়!) সমস্ত মেষকে এক টেবিলের মধ্যে সংরক্ষণ করে এবং সেই টেবিলে র‌্যামস এবং ইয়েস একটি লিঙ্গ কলাম ব্যবহার করে পরিচালিত হয়েছিল।

সুতরাং, আপনি সমস্ত মেষের জন্য জিজ্ঞাসা করতে পারেন এবং সমস্ত মেষ পেতে পারেন। অথবা আপনি কেবল রামের দ্বারা জিজ্ঞাসা করতে পারেন, এবং এটি কেবল রামসই পাবে। আপনি এমন কিছু কাজ করতে পারেন যেমন একটি সম্পর্ক থাকতে পারে যা কেবল রাম হতে পারে (অর্থাত্, একটি ভেড়ার সায়ার), ইত্যাদি।


1

নোট করুন যে কিছু ডেটাবেস ইঞ্জিনগুলি ইতিমধ্যে পোস্টগ্রিসের মতো স্থানীয়ভাবে উত্তরাধিকার ব্যবস্থা সরবরাহ করে । তাকান ডকুমেন্টেশন

উদাহরণস্বরূপ, আপনি উপরের প্রতিক্রিয়াতে বর্ণিত ব্যক্তি / কর্মচারী সিস্টেমটিকে জিজ্ঞাসা করবেন:

  / * এটি সমস্ত ব্যক্তি বা কর্মচারীর প্রথম নাম দেখায় * /
  ব্যক্তি থেকে প্রথম নাম নির্বাচন করুন; 

  / * এটি কেবলমাত্র সমস্ত কর্মচারীর শুরুর তারিখ দেখায় * / /
  কর্মচারী থেকে শুরু সূচনা;

এটি আপনার ডাটাবেসের পছন্দ, আপনার বিশেষ স্মার্ট হওয়ার দরকার নেই!

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