না।
আমি বলতে চাই যে সিঙ্গল-ফিল্ড কীগুলি কমপক্ষে বিদেশী কীগুলির উদ্দেশ্যে , কমপઉન્ડ চাবিগুলির থেকে নিকৃষ্ট হয় তবে অবশ্যই এমন কিছু ঘটনা ঘটে । এর অর্থ এটি নয় যে আপনি যদি চান তবে আপনার এককক্ষেত্রের সারোগেট কীও থাকা উচিত নয়, তবে আমি ব্যক্তিগতভাবে সেই চাবিটি পছন্দ করি যা প্রায়শই একটি বিদেশী চাবি টার্গেট হিসাবে ব্যবহৃত হয় প্রাথমিক কী বলে
আমি নিম্নলিখিত উদাহরণগুলিতে আমার বক্তব্যটি তুলে ধরার চেষ্টা করব, এতে:
brand
গাড়ি মার্ক, যেমন ফোর্ড, টয়োটা ইত্যাদি
dealer
একটি শারীরিক ডিলারশিপ, একটি ব্র্যান্ডের সাথে আবদ্ধ (যেমন একটি ফোর্ড ডিলারশিপ কেবল ফোর্ড বিক্রি করে)
model
গাড়ির ধরণ যেমন ফোর্ড ফোকাস, ফোর্ড ফিয়েস্টা ইত্যাদি
stock
প্রতিটি ডিলারশিপের জন্য বর্তমান ফোরকোর্ট গাড়ি গণনা
যদি আমরা নিম্নলিখিত dealer
এবং এর জন্য একটি একক-ক্ষেত্র সারোগেট কী তৈরি করি model
:
create table brand( brand_id integer primary key );
create table dealer( dealer_id integer primary key,
brand_id integer references brand )
create table model( model_id integer primary key,
brand_id integer references brand )
create table stock( model_id integer references model,
dealer_id integer references dealer,
quantity integer,
primary key(model_id, dealer_id) )
তারপরে এটি একটি সারি সন্নিবেশ করা সম্ভব stock
যা কোনও ফোর্ডকে dealer
"টয়োটা" মডেলের সাথে সংযুক্ত করে। কেবল যুক্ত brand_id references brand
করার stock
ফলে সমস্যা আরও খারাপ হয়। অন্যদিকে, যদি আমরা নীচে প্রাথমিক কী এর অংশ হিসাবে বিদেশী কী রাখি:
create table brand( brand_id integer primary key );
create table dealer( brand_id integer references brand,
dealer_id integer,
primary key(brand_id, dealer_id) )
create table model( brand_id integer references brand,
model_id integer,
primary key(brand_id, model_id) )
create table stock( brand_id integer,
model_id integer,
dealer_id integer,
quantity integer,
primary key(brand_id, model_id, dealer_id),
foreign key(brand_id, model_id) references model,
foreign key(brand_id, dealer_id) references dealer )
এখন এই নিয়মটি যে "ফোর্ড" ব্যবসায়ীরা কেবল "ফোর্ড" গাড়িগুলি স্টক করতে পারে তা মডেল দ্বারা প্রাকৃতিকভাবে প্রয়োগ করা হয়।
নোট করুন যে 'সম্মিলিত কী' উদাহরণে dealer_id
পছন্দ অনুসারে অনন্য হতে পারে বা নাও হতে পারে। এটি অনন্য হওয়ার প্রয়োজন নেই (অর্থাত্ একটি বিকল্প কী), তবে এটি এতটা তৈরি করে খুব সামান্যই হারাতে পারে (সম্ভবত কিছুটা স্টোরেজ স্পেস) এবং এটি খুব সহজ হতে পারে তাই আমি সাধারণত এটি সেট আপ করি, যেমন:
create table dealer( brand_id integer references brand,
dealer_id serial unique,
primary key(brand_id, dealer_id) )