স্বাভাবিকীকরণ নিশ্চিত করতে দীর্ঘস্থায়ী নির্ভরতাগুলি এড়িয়ে যান
একটি ডাটাবেসে একটি সমপর্যন্ত নির্ভরতা একই টেবিলের মানগুলির মধ্যে একটি পরোক্ষ সম্পর্ক হয় যা একটি কার্যকরী নির্ভরতা তৈরি করে । তৃতীয় স্বাভাবিক ফর্ম (3 এনএফ) এর স্বাভাবিককরণের মান অর্জন করতে, আপনাকে কোনও যৌক্তিক নির্ভরতাটি অবশ্যই আবদ্ধ করতে হবে।
তার প্রকৃতির মাধ্যমে, একটি ক্রান্তীয় নির্ভরশীলতার জন্য তিন বা তার বেশি বৈশিষ্ট্য (বা ডাটাবেস কলাম) প্রয়োজন যা তাদের মধ্যে কার্যকরী নির্ভরতা থাকে, যার অর্থ হল টেবিলটিতে কলাম A কলাম B- এর উপর ভিত্তি করে একটি মধ্যবর্তী কলাম সি।
আসুন দেখি কিভাবে এই কাজ করতে পারে।
ট্রানজিট ডিপেন্ডেন্সি উদাহরণ
লেখক
Author_ID | লেখক | বই | Author_Nationality |
---|---|---|---|
Auth_001 | Orson স্কট কার্ড | Ender এর খেলা | যুক্তরাষ্ট্র |
Auth_001 | Orson স্কট কার্ড | Ender এর খেলা | যুক্তরাষ্ট্র |
Auth_002 | মার্গারেট Atwood | হ্যান্ডমাইন্ড এর টেল | কানাডা |
উপরোক্ত উপায়ে উদাহরণ:
- বই → লেখক : এখানে, বইয়ের বৈশিষ্ট্য লেখক অ্যাট্রিবিউট নির্ধারণ করে। আপনি বইয়ের নাম জানেন, আপনি লেখক এর নাম জানতে পারেন। যাইহোক, লেখক বইটি নির্ধারণ করেন না, কারণ একজন লেখক একাধিক বই লিখতে পারেন। উদাহরণস্বরূপ, আমরা লেখক এর নাম Orson স্কট কার্ড জানি ঠিক কারণ, আমরা এখনও বই নাম জানি না।
- লেখক → লেখক- জাতীয়তা : অনুরূপভাবে, লেখক অ্যাট্রিবিউট লেখক - জাতীয়তা নির্ধারণ করে, কিন্তু অন্য কোন উপায় নয়; শুধু কারণ আমরা জানি জাতীয়তা মানে না আমরা লেখক নির্ধারণ করতে পারেন।
কিন্তু এই টেবিলের একটি সঞ্চারী নির্ভরতা প্রবর্তন করে:
- বই → Author_Nationality: যদি আমরা বইয়ের নাম জানতে পারি, আমরা লেখক কলামের মাধ্যমে জাতীয়তা নির্ধারণ করতে পারি।
ট্রানজিট নির্ভরতাগুলি এড়িয়ে চলুন
তৃতীয় স্বাভাবিক ফর্মটি নিশ্চিত করতে, চলতে চলতে চলতে চলতে চলতে চলতে নির্ভরশীল নির্ভরতা।
আমরা লেখক কলাম থেকে বই কলামটি সরানোর এবং আলাদা বই টেবিল তৈরি করে শুরু করতে পারি:
বইগুলি
Book_ID | বই | Author_ID |
---|---|---|
Book_001 | Ender এর খেলা | Auth_001 |
Book_001 | মনের শিশুদের | Auth_001 |
Book_002 | হ্যান্ডমাইন্ড এর টেল | Auth_002 |
লেখক
Author_ID | লেখক | Author_Nationality |
---|---|---|
Auth_001 | Orson স্কট কার্ড | যুক্তরাষ্ট্র |
Auth_002 | মার্গারেট Atwood | কানাডা |
এটা ঠিক করেছি? এখন আমাদের নির্ভরশীলতা পরীক্ষা করা যাক:
বই টেবিল :
- Book_ID → বুক: বইটি Book_ID- এর উপর নির্ভর করে।
- এই টেবিলের অন্য কোন নির্ভরশীলতা বিদ্যমান নেই, তাই আমরা ঠিক আছে। লক্ষ্য করুন যে বিদেশী কী লেখক_আইডি এই টেবিলে তার প্রাথমিক কী author_ID এর মাধ্যমে AUTHORS সারণিতে লিঙ্ক করে । আমরা একটি ক্রমবর্ধমান নির্ভরতা, সম্পর্কীয় ডাটাবেস একটি মূল নকশা এড়ানোর জন্য একটি সম্পর্ক তৈরি করেছেন।
লেখক টেবিল :
- Author_ID → লেখক: লেখক Author_ID উপর নির্ভর করে
- লেখক → লেখক_সংযোগ: জাতীয়তা লেখক দ্বারা নির্ধারিত হতে পারে।
- Author_ID → Author_Nationality: লেখক অ্যাট্রিবিউটের মাধ্যমে Author_ID থেকে জাতীয়তা নির্ধারণ করা যায়। আমরা এখনও একটি ক্রমবর্ধমান নির্ভরতা আছে।
আমরা এই তথ্য স্বাভাবিক করার জন্য একটি তৃতীয় টেবিল যোগ করতে হবে:
দেশে
Country_ID | দেশ |
---|---|
Coun_001 | যুক্তরাষ্ট্র |
Coun_002 | কানাডা |
লেখক
Author_ID | লেখক | Country_ID |
---|---|---|
Auth_001 | Orson স্কট কার্ড | Coun_001 |
Auth_002 | মার্গারেট Atwood | Coun_002 |
এখন আমাদের তিনটি টেবিল আছে, টেবিলগুলির মধ্যে লিঙ্ক করার জন্য বিদেশী কীগুলির ব্যবহার:
- বই টেবিল এর বিদেশী কী লেখক_আইডি AUTHORS টেবিলের একটি লেখক একটি বই লিঙ্ক।
- AUTHORS টেবিল এর বিদেশী কী country_ID COUNTRIES টেবিলে একটি দেশের একটি লেখক লিঙ্ক।
- COUNTRIES টেবিল কোন বিদেশী কী আছে কারণ এই নকশা অন্য টেবিলের সাথে সংযোগ করার কোন প্রয়োজন নেই।
কেন ট্রান্সমিক নির্ভরতাগুলি খারাপ ডাটাবেস ডিজাইন রয়েছে
3 এনএফ নিশ্চিত করতে ট্রানজিটভিত্তিক নির্ভরতা এড়াতে কত কী মূল্য আছে? আসুন আবার আমাদের প্রথম টেবিলে বিবেচনা করি এবং এটি তৈরি করা বিষয়গুলি দেখুন:
লেখক
Author_ID | লেখক | বই | Author_Nationality |
---|---|---|---|
Auth_001 | Orson স্কট কার্ড | Ender এর খেলা | যুক্তরাষ্ট্র |
Auth_001 | Orson স্কট কার্ড | মাইন্ড শিশুদের শিশু | যুক্তরাষ্ট্র |
Auth_002 | মার্গারেট Atwood | হ্যান্ডমাইন্ড এর টেল | কানাডা |
এই ধরনের নকশা ডেটা বিশ্লেষণ এবং অসঙ্গতিতে অবদান রাখতে পারে, উদাহরণস্বরূপ:
- আপনি যদি দুটি বই "মাইন্ড বাচ্চাদের" এবং "ইডারস গেমস" মুছে ফেলেন, তাহলে আপনি লেখক "অরন স্কট কার্ড" এবং ডাটাবেসের সম্পূর্ণতা থেকে সম্পূর্ণরূপে জাতীয়তার মুছে ফেলবেন।
- আপনি একটি বই যোগ না করা পর্যন্ত আপনি ডাটাবেসের একটি নতুন লেখক যোগ করতে পারবেন না; যদি লেখক এখনও অপ্রকাশিত হয় বা আপনি বইটির নাম লেখেন তবে তার নাম কি জানেন না?
- যদি "অরসন স্কট কার্ড" তার নাগরিকত্ব পরিবর্তন করে, তবে সেটি যে সকল রেকর্ডে প্রদর্শিত হবে তা পরিবর্তন করতে হবে। একই লেখকের সঙ্গে একাধিক রেকর্ড থাকলে ভুল তথ্য পাওয়া যাবে: যদি ডাটা এন্ট্রি ব্যক্তির বুঝতে না পাওয়া যায় তবে তার জন্য একাধিক রেকর্ড আছে এবং শুধুমাত্র একটি রেকর্ডে তথ্য পরিবর্তন করে?
- আপনি সম্পূর্ণরূপে লেখক মুছে ফেলা ছাড়া "হাতামাড়ি এর টেল" মত একটি বই মুছে ফেলা যাবে না।
স্বাভাবিককরণের কারণেই এই কয়েকটি কারণ রয়েছে, এবং ট্রানজিটিক নির্ভরতা এড়ানো, ডেটা সুরক্ষিত করা এবং সঙ্গতি নিশ্চিত করা।