সম্পর্কিত পরিস্থিতি পুরোপুরি পরিচালনা করার জন্য সম্পর্কিত ডেটাবেসগুলি নির্মিত হয় না। আপনার পক্ষে কোনটি সর্বাধিক গুরুত্বপূর্ণ তা আপনাকে সিদ্ধান্ত নিতে হবে এবং তারপরে আপনার বাণিজ্য বন্ধ করতে হবে। আপনার কয়েকটি লক্ষ্য রয়েছে:
- তৃতীয় স্বাভাবিক ফর্ম বজায় রাখুন
- রেফারেন্সিয়াল অখণ্ডতা বজায় রাখা
- প্রতিটি অ্যাকাউন্ট কর্পোরেশন বা কোনও প্রাকৃতিক ব্যক্তির অন্তর্গত বাধা বজায় রাখুন।
- সহজভাবে এবং সরাসরি ডেটা পুনরুদ্ধার করার ক্ষমতা সংরক্ষণ করুন
সমস্যাটি হ'ল এই লক্ষ্যগুলির মধ্যে কয়েকটি একে অপরের সাথে প্রতিযোগিতা করে।
সাব-টাইপিং সমাধান
আপনি একটি উপ-টাইপিং সমাধান বেছে নিতে পারেন যেখানে আপনি একটি সুপার-টাইপ তৈরি করেন যা কর্পোরেশন এবং ব্যক্তি উভয়কেই অন্তর্ভুক্ত করে। এই সুপার-টাইপের সম্ভবত উপ-প্রকারের প্রাকৃতিক কী এবং একটি বিভাজন বৈশিষ্ট্য (উদাহরণস্বরূপ customer_type) এর যৌগিক কী থাকবে । এটি স্বাভাবিক হিসাবে যতদূর যায় ঠিক আছে এবং এটি আপনাকে রেফারেনশিয়াল অখণ্ডতা প্রয়োগের পাশাপাশি কর্পোরেশন এবং ব্যক্তিদের পারস্পরিক একচেটিয়া করার প্রতিবন্ধকতাও প্রয়োগ করতে দেয়। সমস্যাটি হ'ল এটি ডেটা পুনরুদ্ধারকে আরও কঠিন করে তোলে, কারণ আপনি customer_typeযখন অ্যাকাউন্টধারীর সাথে অ্যাকাউন্টে যোগদান করবেন তখন তার ভিত্তিতে আপনাকে সর্বদা শাখা করতে হবে। এর অর্থ সম্ভবত UNIONআপনার ক্যোয়ারীতে প্রচুর পুনরাবৃত্ত এসকিউএল ব্যবহার এবং থাকা।
দুটি বিদেশী কী সমাধান
আপনি আপনার অ্যাকাউন্ট টেবিলে দুটি বিদেশী কী রাখবেন এমন একটি সমাধান বেছে নিতে পারেন, একটি কর্পোরেশনে এবং একটিতে ব্যক্তি। এই সমাধান আপনাকে রেফারেন্সিয়াল অখণ্ডতা, স্বাভাবিককরণ এবং পারস্পরিক এক্সক্লুসিভিটি বজায় রাখতেও সহায়তা করে। এটিতে উপ-টাইপিং সমাধানের মতো একই ডেটা পুনরুদ্ধার অপূর্ণতা রয়েছে। প্রকৃতপক্ষে, এই সমাধানটি কেবল আপনার সাব-টাইপিং সমাধানের মতো, আপনি "যুক্তিযুক্ত" যুক্ত হওয়ার যুক্তিকে যুক্ত করার সমস্যাটি পেয়ে যান।
তবুও, প্রচুর ডেটা মডেলাররা এই সমাধানটিকে উপ-টাইপিং সমাধানের চেয়ে নিকৃষ্ট বিবেচনা করবেন কারণ যেভাবে পারস্পরিক এক্সক্লুসিভিটি সীমাবদ্ধতা প্রয়োগ করা হয়। উপ-টাইপিং সমাধানে আপনি পারস্পরিক এক্সক্লুসিভিটি প্রয়োগ করতে কীগুলি ব্যবহার করেন। দুটি বিদেশী কী সমাধানে আপনি একটি CHECKসীমাবদ্ধতা ব্যবহার করেন । আমি এমন কিছু লোককে জানি যাঁদের চেক সীমাবদ্ধতার বিরুদ্ধে অযৌক্তিক পক্ষপাত রয়েছে। এই লোকেরা এমন সমাধানটিকে পছন্দ করবে যা কীগুলিতে বাধা রাখে।
"অস্বীকৃত" পার্টিশনযুক্ত বৈশিষ্ট্য সমাধানের
আরেকটি বিকল্প রয়েছে যেখানে আপনি চেকিং অ্যাকাউন্টের টেবিলের উপরে একটি একক বিদেশী কী কলামটি রেখেছেন এবং কীভাবে বিদেশী কী কলামটি ব্যাখ্যা করতে পারেন তা জানতে আপনাকে অন্য কলাম ব্যবহার করা হয় (রোকে এরOwnerTypeIDকলাম)। এটি চাইল্ড টেবিলের পার্টিশন বৈশিষ্ট্যটিকে অস্বীকৃত করে সাব-টাইপিং সমাধানে সুপার-টাইপ সারণীকে মূলত সরিয়ে দেয়। (দ্রষ্টব্য যে এটি প্রথাগত সংজ্ঞা অনুযায়ী কঠোরভাবে "অস্বীকৃতি" নয়, কারণ পার্টিশন বৈশিষ্ট্যটি একটি প্রাথমিক কীটির অংশ)) এই সমাধানটি বেশ সহজ বলে মনে হয় কারণ এটি আরও কম-বেশি একই জিনিস করার জন্য অতিরিক্ত টেবিল থাকা এড়ায় এবং এটি বিদেশী কী কলামগুলির সংখ্যা একটিকে হ্রাস করে। এই সমাধানটির সাথে সমস্যাটি হ'ল এটি পুনরুদ্ধার যুক্তির শাখা প্রশাখা এড়ায় না এবং আরও কী, এটি আপনাকে ঘোষিত রেফারেন্সিয়াল অখণ্ডতা বজায় রাখতে দেয় না । এসকিউএল ডাটাবেসে একক বিদেশী কী কলামটি একাধিক পিতামাতার সারণীর জন্য পরিচালিত করার ক্ষমতা রাখে না।
শেয়ার করা প্রাথমিক কী ডোমেন সমাধান
লোকেদের মাঝে মাঝে এই সমস্যাটি মোকাবেলা করার এক উপায় হ'ল আইডিগুলির একটি একক পুল ব্যবহার করা যাতে কোনও প্রদত্ত আইডির জন্য কোনও বিভ্রান্তি না ঘটে সেগুলি একটি সাব-টাইপ বা অন্য কোনওর সাথে সম্পর্কিত। এটি সম্ভবত কোনও ব্যাংকিং দৃশ্যে বেশ প্রাকৃতিকভাবে কাজ করবে, যেহেতু আপনি কর্পোরেশন এবং একজন প্রাকৃতিক ব্যক্তিকে উভয়কে একই ব্যাংক অ্যাকাউন্ট নম্বর প্রদান করবেন না। পার্টিশন বৈশিষ্ট্যের প্রয়োজন এড়ানোর সুবিধা রয়েছে This আপনি এটি সুপার টাইপের টেবিলের সাথে বা না করেই করতে পারেন। একটি সুপার-টাইপ টেবিল ব্যবহার আপনাকে স্বতন্ত্রতা প্রয়োগের জন্য ঘোষণামূলক বাধা ব্যবহার করতে দেয়। অন্যথায় এটি প্রক্রিয়াগতভাবে প্রয়োগ করতে হবে। এই সমাধানটি স্বাভাবিক করা হয়েছে তবে আপনি সুপার-টাইপ টেবিল না রাখলে এটি আপনাকে ঘোষিত রেফারেন্সিয়াল অখণ্ডতা বজায় রাখতে দেয় না। জটিল পুনরুদ্ধার যুক্তি এড়াতে এটি এখনও কিছুই করে না।
সুতরাং আপনি একই সাথে আপনার ডেটা পুনরুদ্ধারকে সরল রাখার সময় সমস্ত নিয়ম অনুসরণ করে এমন একটি পরিষ্কার নকশা তৈরি করা সত্যিই সম্ভব নয়। আপনার ট্রেড-অফ কোথায় হবে তা আপনাকে সিদ্ধান্ত নিতে হবে।
OwnerTypeIDমধ্যেChecquingAccountটেবিলের সঙ্গে1=Corporationএবং2=NaturalPerson? এইভাবে আপনার কেবল টেবিলেরOwnerIDমধ্যে একটি প্রয়োজনChecquingAccount, যা আপনি বরাবর সূচক করতে পারেনOwnerTypeID।