এসকিউএল সার্ভারে একই কলামে একাধিক বিদেশী কী ব্যবহার


10

এসকিউএল সার্ভার আমাকে একটি কলামে একাধিক বিদেশী কী তৈরি করতে অনুমতি দেয় এবং প্রতিবার ঠিক ভিন্ন নাম ব্যবহার করে আমি একই অবজেক্টটিতে আরও একটি কী তৈরি করতে পারি। মূলত সমস্ত কী একই সম্পর্কের সংজ্ঞা দিচ্ছে। আমি জানতে চাইছি একাধিক বিদেশী কী থাকার কী ব্যবহার যা একই কলামে সংজ্ঞায়িত করা হয় এবং অন্য টেবিলে একই কলামের রেফারেন্স। এর সুবিধা কী হবে যে এসকিউএল সার্ভার আমাদের মতো একটি কাজ করতে দেয়?

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


12

কেবল নাম অনুসারে অপ্রয়োজনীয় বাধা থাকার কোনও সুবিধা নেই। একইভাবে, অপ্রয়োজনীয় সূচকগুলি কেবল কোনও নাম অনুসারে পৃথক হওয়ার কোনও সুবিধা নেই। উভয়ই মান ছাড়াই ওভারহেড যুক্ত করে।

এসকিউএল সার্ভার ডাটাবেস ইঞ্জিন আপনাকে এটি করতে বাধা দেয় না। ভাল বাধা নামকরণ সীমাবদ্ধকরণ নামকরণ কনভেনশন (যেমন এফ কে_রেফারেন্সিং টেবিল_রেফারেন্সড টেবিল) এ জাতীয় ভুলগুলির বিরুদ্ধে রক্ষা করতে সহায়তা করতে পারে।


17

এসকিউএল সার্ভার আপনাকে প্রচুর নির্বোধ কাজ করার অনুমতি দেয়।

এমনকি আপনি নিজেই একটি কলামে একটি বিদেশী কী তৈরি করতে পারেন - এই সত্যটি সত্ত্বেও যে কোনও লঙ্ঘন করা যায় না কারণ প্রতিটি সারি নিজেই এই সীমাবদ্ধতা পূরণ করবে।

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

(নীচের উদাহরণ হিসাবে)

CREATE TABLE T1(
    T1_Id INT PRIMARY KEY CLUSTERED  NOT NULL,
    Filler CHAR(4000) NULL,
) 

INSERT INTO T1 VALUES (1, '');

CREATE TABLE T2(
    T2_Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
    T1_Id INT NOT NULL CONSTRAINT FK REFERENCES T1 (T1_Id), 
    Filler CHAR(4000) NULL,
)


ALTER TABLE T1 ADD CONSTRAINT
    UQ_T1 UNIQUE NONCLUSTERED(T1_Id) 


/*Execution Plan uses clustered index*/ 
INSERT INTO T2 VALUES (1,1) 

ALTER TABLE T2  WITH CHECK ADD  CONSTRAINT FK2 FOREIGN KEY(T1_Id)
REFERENCES T1 (T1_Id)    

ALTER TABLE T2 DROP CONSTRAINT FK

/*Now Execution Plan now uses non clustered index*/    
INSERT INTO T2 VALUES (1,1)    

DROP TABLE  T2, T1;

অন্তর্বর্তীকালীন সময়ের জন্য আলাদা হিসাবে উভয় সীমাবদ্ধতা উপস্থিত থাকলে উভয় সূচকের বিপরীতে কোনও সন্নিবেশ বৈধ হয়ে যায়।


একই ফাঁকবিহীন সীমাবদ্ধতার আপডেটটি নিশ্চিত করতে কোনও লেনদেন ব্যবহার করা যেতে পারে? কম লকিংয়ের কারণে এই অ-লেনদেনের পদ্ধতিটি কি আরও ভাল, সম্ভবত?
বিনকি

13

অভিন্ন বিদেশী কী বাধা থাকার জন্য কোনও ব্যবহার নেই, এটি একই কলামগুলিতে এবং একই টেবিল এবং কলামগুলি উল্লেখ করে।

এটি একই চেক 2 বা তার বেশি বার থাকার মতো।


-একমত না. প্রাথমিক টেবিলের জন্য দুটি পৃথক চেক প্রয়োজন হতে পারে chance উদাহরণস্বরূপ প্রেরক এবং রিসিভার নিচে দেখুন সম্পূর্ণই ভিন্ন - stackoverflow.com/questions/40400483/...
trex

@ ট্রেক্স আপনি কিছুটা ভিন্ন কথা বলছেন ign এখানে প্রশ্নটি বলে: "আমি জানতে চাই যে একাধিক বিদেশী কী রয়েছে যা একই কলামে সংজ্ঞায়িত হয়েছে এবং অন্য সারণীতে একই কলামের উল্লেখ রয়েছে " "
ypercubeᵀᴹ

@ ইয়পারক्यूबᵀᴹ - বুঝেছি। এটি পরিষ্কার করার জন্য ধন্যবাদ
ট্রেক্স

6

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


2

নীল-সবুজ জিনিসের মতো শোনাচ্ছে।

আপনি যখন নীল থেকে সবুজতে কাটা ওঠা শুরু করেন, আপনাকে অস্থায়ীভাবে অতিরিক্ত অতিরিক্ত কপি তৈরি করতে হবে।

আমরা যা করতে চাই তা সাময়িকভাবে একটি অতিরিক্ত বিদেশী কী তৈরি করা CHECK WITH NOCHECKএবং ON UPDATE CASCADE ON DELETE SET NULL; এটি কী করে তা হ'ল এটি একটি কার্যকারী বিদেশী কী তবে কীটি তৈরি করার সময় বিদ্যমান সারিগুলি পরীক্ষা করা হয় না।

পরে সমস্ত সারি মিলে যাওয়া পরিষ্কার করার পরে আমরা কোনও কমান্ড বিকল্প ছাড়াই নতুন বিদেশী কী তৈরি করব (ডিফল্টটি হ'ল CHECK WITH CHECKযা আপনি সাধারণত চান) এবং অস্থায়ী বিদেশী কীটি ফেলে দিন।

লক্ষ্য করুন যে আপনি যদি সবেমাত্র বিদেশী কীটি ফেলে এবং পুনরায় তৈরি করেন তবে কিছু আবর্জনার সারি আপনার দ্বারা পিছলে যেতে পারে।

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