যৌগিক বিদেশী কীগুলির জন্য আলাদা আলাদা অনন্য বাধা দরকার?


10

এখানে একটি সাধারণ টেবিল যেখানে রেকর্ডগুলি একই টেবিলে পিতামাতার রেকর্ডগুলি উল্লেখ করতে পারে:

CREATE TABLE foo (
    id         SERIAL  PRIMARY KEY,
    parent_id  INT     NULL,
    num        INT     NOT NULL,
    txt        TEXT    NULL,
    FOREIGN KEY (parent_id) REFERENCES foo(id)
);

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

    FOREIGN KEY (parent_id, num) REFERENCES foo(id, num)

এবং ত্রুটি পেয়েছে : রেফারেন্স টেবিল "foo" এর জন্য প্রদত্ত কীগুলির সাথে কোনও অনন্য বাধা নেই

আমি সহজেই এই সীমাবদ্ধতাটি যুক্ত করতে পারি, তবে কেন রেফারেন্সযুক্ত কলামগুলির একটি ( id) ইতিমধ্যে স্বতন্ত্র হওয়ার নিশ্চয়তা দিলে এটি কেন প্রয়োজন তা আমি বুঝতে পারি না ? আমি এটি যেভাবে দেখছি, নতুন প্রতিবন্ধকতা অতিরিক্ত কাজ করবে।

উত্তর:


11

এটি ডিবিএমএস-এর একটি সীমাবদ্ধতা - আমি জানি যতদূর জানি in এবং শুধুমাত্র কলাম যুক্ত করার সময় নয় কলামগুলি পুনরায় সাজানোর সময়ও। আমরা যদি UNIQUEউপর বাধ্যতা (a1, a2), আমরা একটি যোগ করতে পারবেন না FOREIGN KEYযে REFERENCES (a2, a1), যদি না যে একটি অনন্য বাধ্যতা হয় (a2, a1)যে মূলত অপ্রয়োজনীয়।

এটি বৈশিষ্ট্য হিসাবে যুক্ত করা ভয়ানকভাবে কঠিন হবে না:

যখন কোনও UNIQUEবাধা থাকে (a)তখন কোনও (a, b, c, ..., z)বা (b,c, ...a, ...z)সংমিশ্রণেরও নিশ্চয়তা দেওয়া হয় UNIQUE

বা সাধারণীকরণ:

যখন কোনও UNIQUEবাধা থাকে (a1, a2, ..., aN)তখন কোনও (a1, a2, ..., aN, b1, b2, ..., bM)সংমিশ্রণ বা যে কোনও পুনর্বিন্যাসেরও গ্যারান্টি দেওয়া হয় UNIQUE

দেখে মনে হচ্ছে এটি জিজ্ঞাসা করা হয়নি বা এটি প্রয়োগের জন্য উচ্চ পর্যায়ে অগ্রাধিকার হিসাবে বিবেচিত হয়নি।

বৈশিষ্ট্যটি বাস্তবায়িত হওয়ার জন্য আপনি সর্বদা একটি অনুরোধ করতে পারেন - সংশ্লিষ্ট চ্যানেলে -। এমনকি ডিগ্রিএমএস পোস্টগ্রিসের মতো ওপেন সোর্স থাকলে তা নিজেও বাস্তবায়ন করুন।


আমি নিশ্চিত নই যে এটি বেশ সহজ হবে .. আংশিক সূচকগুলি বা নাল মানগুলির কী হবে? ইত্যাদি .. আপনি সন্তুষ্ট থাকলে NULL এখনও ঠিক কাজ করতে পারে NULL != NULL। যাইহোক .. :)
জোশি বদিও

@ জোশিবিডিও আমি নুলসকে কোনও সমস্যা বলে মনে করি না। অনন্য সীমাবদ্ধতা সংজ্ঞায়িত করা যেতে পারে বা কলামগুলিও ছাড়াই যায়। ডিফল্টটি হ'ল যে কোনও স্তম্ভের যদি একটি NULL থাকে তবে সীমাবদ্ধতাটি পেরিয়ে যায় এবং সারিটি গৃহীত হয়।
ypercubeᵀᴹ

দ্বিতীয়ত যদিও, যদি এ 1, এ 2, ... এএন ক্ষুদ্র হয় না এবং বি 1, বি 2, বিএম হয় তবে আমরা সমস্যার মধ্যে পড়তে পারি। তবে বৈশিষ্ট্যটি অবশ্যই অ-শর্তযুক্ত কলামগুলির জন্য প্রয়োগ করা যেতে পারে। সম্ভবত উদ্বেগজনকটি হ'ল দক্ষতা সম্পর্কিত বিষয়গুলি।
ypercubeᵀᴹ

আমি UNIQUE INDEXকলামগুলি কোথায় তা সম্পর্কে পরিচিত NULLABLEwhich তাই আমি এটি উল্লেখ করেছি। :) তবে আমি একমত - এই ক্ষেত্রে যে কোনও নুল নেই (এবং কোনও আংশিক সূচকও নয়), সম্ভবত এটি সম্ভবত মোটামুটি সোজা।
জোশি বদিও

5

বিদেশী কীগুলি সাধারণভাবে (কেবল সংমিশ্রণ নয়) অন্য সারণীতে কোনও ধরণের একটি অনন্য কীকে নির্দেশ করতে হবে। যদি তারা না করে থাকে তবে কোনও সম্পর্কিত ডেটা অখণ্ডতা থাকবে না।

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

আমি অত্যন্ত অবাক হব যদি তারা সেই কোডটি যুক্ত করে থাকেন তবে যখন সমস্যাটি সমাধানের জন্য আপনাকে দুটি কলামে আরও একটি অনন্য সূচক তৈরি করতে হবে।

কেবল স্পষ্ট করে বলতে গেলে, তাদের যে কোডটি যুক্ত করতে হবে তা কেবল এই সাধারণ ক্ষেত্রে হবে না ... এটি সমস্ত ক্ষেত্রে, এমনকি বিদেশী কী 4+ কলামে থাকা ইত্যাদিতে পরিচালনা করতে হবে I'm আমি নিশ্চিত যুক্তিটি বেশ জটিল হবে।

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