ডাটাবেসে একচেটিয়া আর্ক কি এবং এটি কেন খারাপ?


10

আমি স্ট্যাকওভারফ্লোতে বিকাশকারী প্রশ্নোত্তর দ্বারা তৈরি সবচেয়ে সাধারণ ডাটাবেস ডিজাইনের ভুলগুলি পড়ছিলাম । প্রথম উত্তরে একচেটিয়া তোরণ সম্পর্কে বাক্যাংশ ছিল:

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

একচেটিয়া আর্ক কেন খারাপ তা আমি সত্যিই বুঝতে পারি না। সম্ভবত আমি এর বেসিক বুঝতে পারি নি। এক্সক্লুসিভ আর্কস সম্পর্কে কোনও ভাল ব্যাখ্যা আছে?

উত্তর:


8

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

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


4
তিনটি সম্ভাব্য ট্রাক অবস্থান হ'ল একটি সুপারক্লাস, "ট্রাকের অবস্থান" এর সাবক্লাস। এমন অনেকগুলি ক্ষেত্রে রয়েছে যেখানে সাবক্লাসগুলি পারস্পরিক একচেটিয়া। চ্যালেঞ্জ হয়ে ওঠে যে কীভাবে সম্পর্কিত টেবিলগুলিতে ক্লাস এবং সাবক্লাস মডেল করা যায়।
ওয়াল্টার মিট্টি

আমি সম্মত হই যে এই ক্ষেত্রে এমন নকশাগুলি ব্যবহার করা ন্যায়সঙ্গত এমন কেস রয়েছে। আমি তবে মূল পোস্টের সাথেও একমত হতে পারি যে এই প্যাটার্নটি যতটা করা উচিত তার চেয়ে অনেক বেশি ব্যবহৃত হয়। এর কিছু খুব বড় অসুবিধাও রয়েছে ...
জেডিটি

6
চেক সীমাবদ্ধতা ব্যবহার করা যাবে না? উদাহরণস্বরূপ alter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null))। আমি একচেটিয়া আরকস পছন্দ করি না তবে সেগুলি চেক সীমাবদ্ধতার সাথে প্রয়োগ করা যেতে পারে। অবশ্যই এফকে বাধাও উপস্থিত থাকতে হবে।
তুলিনাস কর্ডোভা

1
সুতরাং উপরে বর্ণিত পোস্ট থেকে "জটিল চেক সীমাবদ্ধতা"। আপনি চেক সীমাবদ্ধতা বা হেক এমনকি ট্রিগারগুলির সাথে সত্যিকারের পরিশীলিত বৈধতা করতে সক্ষম হতে পারেন, এটি এটি একটি ভাল ধারণা বা ভাল ডিজাইনের একটি টোকেন করে না। চার বা পাঁচটি কলাম দিয়ে একচেটিয়া আরকে চেক সীমাবদ্ধতাগুলি করার চেষ্টা করুন ... এছাড়াও, আমি মোটামুটি নিশ্চিত যে সমস্ত ডাটাবেস ইঞ্জিনগুলি চেক সীমাবদ্ধতা সমর্থন করে না । মাইএসকিউএল ডকসগুলিতে স্পষ্টভাবে জানিয়েছে যে চেক ক্লজগুলি পার্স করা হয়েছে তবে তা উপেক্ষা করা হয়েছে ...
জেডিটি

এই উত্সটি এক্সক্লুসিভ অর্কের প্রস্তাব দেয়। থটস?
অ্যালেক্স মুর-নিনি

4

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


-1

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

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