সম্পর্কগুলির সাথে আপনার কোনও সমস্যা আছে বলে আমি মনে করি না। আমি মনে করি পরিবর্তে সমস্যাটি হ'ল প্রতিটি টেবিলের জন্য সার্গেট কীগুলি (অর্থাত্ আইডি) ব্যবহার করে ফলাফল ডেটাবেস ওয়ার্কার্সকে whoseোকানো থেকে বিরত করতে পারে না যার বিভাগ একটি কোম্পানির এবং শ্রেণিবিন্যাস অন্যটির থেকে বিপরীতে। এটি বোঝার একটি ভাল উপায় হ'ল ইআর ডায়াগ্রামিং সরঞ্জামটি ব্যবহার করে স্কিমাটি কল্পনা করা। আমি ওরাকল ডেটা মডেলার সরঞ্জামটি ব্যবহার করব যা একটি ফ্রি ডাউনলোড।
ইআর ডায়াগ্রাম
এটি যেমন দাঁড়িয়েছে, আপনার 2 টি সংস্থা থাকতে পারে - বলুন IBM
এবং Microsoft
। IBM
বিভাগ থাকতে পারে Software Development
এবং মাইক্রোসফ্টের একটি Desktop Software
বিভাগ থাকতে পারে। আইবিএমের একটি Software Engineer
শ্রেণিবিন্যাস থাকতে পারে এবং মাইক্রোসফ্টের একটি Software Developer
শ্রেণিবিন্যাস থাকতে পারে। এখন, কারণ আপনার জন্য একটি ভাড়াটে কী আছে Department
এবং Classification
যে, আসলে Software Development
একটি হয় IBM
বিভাগের এবং Desktop Software
একটি হয় Microsoft
বিভাগের ভবিষ্যৎ সন্তানের সম্পর্ক হারিয়ে গেছে। এই ক্ষেত্রেও এটি হয় Classification
। সুতরাং দুর্ঘটনাক্রমে নির্ধারিত হওয়া সহজ Harlan Mills
, বিভাগের একজন IBM
কর্মচারী কে Software Development
, এর একটি শ্রেণিবিন্যাস Software Developer
কMicrosoft
শ্রেণীবিন্যাস! তেমনিভাবে, কর্মীকে সঠিক শ্রেণিবদ্ধকরণ এবং ভুল বিভাগ দেওয়া যেতে পারে! এখানে প্রথম চিত্র দেখানো একটি চিত্র রয়েছে:
1 টি আইডি উপস্থাপন করে IBM
এবং 2 টি আইডি উপস্থাপন করে Microsoft
। আমি লাল দৃশ্যকল্প মধ্যে হাইলাইট করেছি যেখানে Harlan Mills
এবং Bill Gates
ভুল বিভাগ, যা 10 বিভাগের 200 শ্রেণীবিন্যাস আইডি এবং তদ্বিপরীত যুক্ত Id দ্বারা ভিজ্যুয়ালাইজ করা হয় হস্তান্তর করা হয়েছে।
সমাধানের বিকল্পসমূহ
তাহলে তাকে ঘটতে বাধা দেওয়ার বিকল্পগুলি কী কী? দুটি তাত্ক্ষণিক বিকল্প রয়েছে। প্রথমটি বুঝতে হবে যে প্রতিটি টেবিলের জন্য একটি সার্গেট কী ব্যবহার করে এই সমস্যাটি উপস্থিত রয়েছে এবং এটি ঘটে না তা যাচাই করতে অতিরিক্ত প্রোগ্রামিং চালু করে। এটি অ্যাপ্লিকেশনটিতে করা যেতে পারে, তবে যদি অ্যাপ্লিকেশনের বাইরে সন্নিবেশ এবং আপডেট হতে পারে তবে ভুল সংঘটন এখনও ঘটতে পারে। আরও ভাল পন্থা হ'ল একটি ট্রিগার তৈরি করা হবে যা কোনও কর্মীর সন্নিবেশ এবং আপডেটে আগুন দেয় যা নিশ্চিত করা হয় যে নির্ধারিত বিভাগটি নির্ধারিত শ্রেণিবিন্যাসের মতো একই সংস্থায় রয়েছে এবং যদি সন্নিবেশ বা আপডেটটি ব্যর্থ হয়।
দ্বিতীয় বিকল্পটি হ'ল প্রতিটি টেবিলের জন্য সারোগেট কীগুলি ব্যবহার না করা । পরিবর্তে, কেবল Company
টেবিলের জন্য সরোগেট কীগুলি ব্যবহার করুন , এটি মৌলিক এবং এর কোনও বাবা-মা নেই এবং তারপরে এবং শিশু টেবিলগুলির সাথে সনাক্তকারী সম্পর্ক তৈরি করুন। এবং টেবিল এখন একটি পি কে আছে প্লাস একটি সিকোয়েন্স নম্বর বা নাম সেগুলির পার্থক্য নির্ণয় করার। তারপর, থেকে সম্পর্ক এবং করতে আরো পরিণত এবং এইভাবে এর পি কে হয়ে , প্লাস (আমি এই উদাহরণে একটি ক্রম সংখ্যা ব্যবহার করছি), প্লাস । ফলাফল কেবল টেবিলের মধ্যে রয়েছে। এখন এটি নির্ধারণ করা অসম্ভবDepartment
Classification
Department
Classification
Company Id
Department
Classification
Worker
identifying
Worker
Company Id
Department Number
Classification Number
one
Company Id
Worker
Worker
একটি থেকে Department
এক Company
এবং একটি টু Classification
অন্য Company
।
কেন এটা অসম্ভব? এটি অসম্ভব কারণ স্কিমা Worker
এবং Department
এবং এর মধ্যে উল্লেখযোগ্য অখণ্ডতা প্রয়োগ করে Classification
। যদি একটিতে এবং অন্যটির Worker
জন্য একটি সন্নিবেশ করার চেষ্টা করা হয় তবে সংশ্লিষ্ট প্যারেন্ট টেবিলের মধ্যে যে সংমিশ্রণটি বিদ্যমান নেই তা একটি রেফারেন্সিয়াল অখণ্ডতা লঙ্ঘন ঘটায় এবং সন্নিবেশটি কাজ করবে না।Department
Company
Classification
দ্বিতীয় বিকল্পটির প্রয়োগের একটি আপডেট চিত্র এখানে রয়েছে:
পছন্দসই বিকল্প
দুটি কারণের মধ্যে, আমি একেবারে দ্বিতীয়টি পছন্দ করি - দুটি কারণের জন্য সনাক্তকারী সম্পর্ক এবং ক্যাসকেডিং কীগুলি ব্যবহার করে। প্রথমত, এই বিকল্পটি কোনও অতিরিক্ত প্রোগ্রামিং ছাড়াই পছন্দসই নিয়ম অর্জন করে। ট্রিগার বিকাশ তুচ্ছ নয়। এটি কোডিং, পরীক্ষা করা এবং বজায় রাখতে হবে। ট্রিগার যুক্তি সুনিশ্চিত করা সর্বোত্তম যাতে পারফরম্যান্সের উপর প্রভাব ফেলবে না তা তুচ্ছও নয়। ডেটাবেস পেশাদারদের জন্য প্রয়োগিত গণিত বইটি এ জাতীয় সমাধানের জটিলতার উপর অনেক বিশদ সরবরাহ করে। দ্বিতীয়ত, বিধিগুলি সূচিত করে যে কোনও বিভাগ এবং শ্রেণিবিন্যাসের প্রেক্ষাপটের বাইরে থাকতে পারে নাCompany
এবং তাই স্কিমাটি আরও সঠিকভাবে বাস্তব বিশ্বের প্রতিফলিত করে।
এটি একটি দুর্দান্ত প্রশ্ন কারণ এটি কেবল দেখায় যে কেবল প্রতিটি টেবিলকে একটি সারোগেট কী প্রয়োজন বলে ধরে নেওয়া কেন একটি খারাপ ধারণা। ফ্যাবিয়ান পাসকালের কেবলমাত্র এই বিষয়টিতে একটি দুর্দান্ত ব্লগ পোস্ট রয়েছে যা দেখায় যে কেবলমাত্র কোনও সার্গেট কী-ই ডেটা অখণ্ডতার দিক থেকে খারাপ ধারণা হতে পারে না ফলে এটি কিছু পুনরুদ্ধারকে ধীর করে তুলতে পারেশারীরিক স্তরে স্পষ্টভাবে কারণ যোগদানের প্রয়োজন হয় যে, কীগুলি সঠিকভাবে ক্যাসকেড করা হত অপ্রয়োজনীয়। এই প্রশ্নটি প্রকাশ করে এমন আরও একটি আকর্ষণীয় বিষয় হ'ল কোনও ডাটাবেস এটি নিশ্চিত করতে পারে না যে এতে প্রবেশ করা সমস্ত ডেটা বাস্তব বিশ্বের ক্ষেত্রে যথাযথ। পরিবর্তে, এটি কেবলমাত্র নিশ্চিত করতে পারে যে এতে প্রবেশ করা ডেটা এটি ঘোষিত নিয়মের সাথে সামঞ্জস্যপূর্ণ। এই ক্ষেত্রে আমরা ক্যাসকেডিং কী পদ্ধতির ব্যবহার করে সম্ভাব্য সর্বোত্তম করতে পারি না তা নিশ্চিত DBMS ডেটা আছে যা একটি নিয়ম সম্মান সঙ্গে সামঞ্জস্যপূর্ণ রাখতে পারবেন না Worker
একটি প্রদত্ত এর Company
চাহিদা একটি সংযুক্ত করার উদ্দেশ্যে প্রয়োজনীয় Classification
এবং Department
যে একই Company
। তবে, যদি সত্যিকারের বিশ্বে Microsoft
একটি বিভাগ বলা হয় Desktop Software
তবে ডাটাবেসের ব্যবহারকারীর দাবী ডিপার্টমেন্টের পরিবর্তে হয়Software Development
এটি একটি সত্য ঘটনা দেওয়া হয়েছে বলে ধরে নেওয়া ছাড়া ডিবিএমএস কিছুই করতে পারে না।