মাইএসকিউএলে বিদেশী কীগুলির মূল বিষয়গুলি?


91

মাইএসকিউএল এর বিদেশী কী কনস্ট্রাক্টটি কীভাবে ব্যবহার করবেন তার কোনও ভাল ব্যাখ্যা আছে?

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

এবং প্রশ্নের দ্বিতীয় অংশটি, মাইএসকিউএল এর ইনবিল্ট বিদেশী কী ব্যবহার করে কোনও উন্নতি করতে হবে?

উত্তর:


118

FOREIGN KEYS আপনার ডেটা সামঞ্জস্যপূর্ণ তা নিশ্চিত করুন।

দক্ষতার দিক থেকে তারা কোয়েরি উন্নত করে না, তারা কিছু ভুল প্রশ্ন ব্যর্থ করে।

আপনার যদি এরকম একটি সম্পর্ক থাকে:

CREATE TABLE department (id INT NOT NULL)
CREATE TABLE employee (id INT NOT NULL, dept_id INT NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id))

, তারপরে departmentযদি এর কিছু থাকে তবে আপনি মুছতে পারবেন না employee

আপনি যদি সংজ্ঞায় সরবরাহ ON DELETE CASCADEকরেন FOREIGN KEYতবে রেফারেন্সিং সারিগুলি রেফারেন্সযুক্তগুলির সাথে স্বয়ংক্রিয়ভাবে মোছা হবে।

সীমাবদ্ধতা হিসাবে, FOREIGN KEYআসলে জিজ্ঞাসাগুলি কিছুটা কমিয়ে দেয়।

রেফারেন্সিং টেবিল থেকে মোছার সময় বা কোনও রেফারেন্সিং intoোকানোর সময় অতিরিক্ত চেকিং করা দরকার performed


4
মন্দা সর্বনিম্ন, কারণ আপনি সাধারণত সূচকযুক্ত ক্ষেত্রগুলিতে এফকে করেন যা প্রাসঙ্গিক মানগুলি স্ন্যাপ করে।
সেব করুন

4
এ কারণেই আমি "সামান্য" লিখেছিলাম :) আসলে, আপনি প্রচুর সারি JOINমুছে
ফেলেন

4
ডাউন ভোটের জন্য দুঃখিত এটি দুর্ঘটনাজনক ছিল, তবে এটি আমাকে আমার ভোট পরিবর্তন করতে দিচ্ছে না।
ওয়ানড্রিকারিকেট

8
@ ওয়ানড্রিকেট: এখন কী করতে হবে তা আমি জানি না, এটি সাইটের নিয়মের ধূসর অঞ্চল। আমি মনে করি আপনি মস্কোতে থাকাকালীন আপনি আমাকে একটি বিয়ার কিনেছেন এবং আমরা এমনকি রয়েছি।
কাসনসুই

4
@ স্ট্যাক: রেফারেন্সিং সারণিতে রেফারেন্সকৃত কী ক্যাসকেডগুলিতে আপনি যে কোনও আপডেট করেন।
কাসনসুই

32

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

উদাহরণস্বরূপ, কল্পনা করুন আপনি কোনও ফোরাম প্রোগ্রাম করছেন। আপনার কাছে প্রাথমিক কী সহ একটি "বিষয়" টেবিল রয়েছে topics.topic_idএবং আপনার একটি "পোস্টস" টেবিল রয়েছে যেখানে পোস্টগুলি কলামের সাথে বিষয়গুলির সাথে সংযুক্ত রয়েছে posts.topic_id, যা বিষয় সারণীর বিদেশী কী।

এই বিদেশী কী সম্পর্কটি নিশ্চিত করে যে প্রতিটি পোস্টই একটি বৈধ বিষয়ের সাথে সংযুক্ত রয়েছে। যদি আপনার একমাত্র বিষয়ের আইডি # 1 থাকে, তবে সেখানে # 2 টপিকের সাথে সংযুক্ত ডাটাবেসে কোনও পোস্ট উপস্থিত থাকা অসম্ভব। ডাটাবেস এটি নিশ্চিত করে।

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


11

1. বিদেশী কীগুলি কেবল আপনার ডেটা সামঞ্জস্যপূর্ণ তা নিশ্চিত করে।

২. আমরা যদি বিদেশী কী সংজ্ঞায় ক্যাসকেড মুছে ফেলার জন্য প্রয়োগ করি তবে প্যারেন্ট সারি মুছে ফেলা হলে রেফারেন্সিং সারিটি স্বয়ংক্রিয়ভাবে মুছবে।

৩. আমরা যদি বিদেশী কী সংজ্ঞায় আপডেট ক্যাসকেডে আবেদন করি তবে প্যারেন্ট সারি আপডেট হওয়ার পরে চাইল্ড সারিটি স্বয়ংক্রিয়ভাবে আপডেট হবে।

ক্যোয়ারী: বিকল্প টেবিলে বাচ্চাদের বিদেশ কী (প্যারেন্ট_আইডি) যুক্ত করুন পিতামাতার (আইডি) মুছে ফেলা ক্যাসকেডের আপডেট ক্যাসকেডে;

  1. আপনি সরাসরি পিতামাতার টেবিলটি মুছতে পারবেন না, প্রথমে পিতামাতার সারণী মোছার চেয়ে শিশু টেবিল থেকে বিদেশী কী মুছুন।

7
অবশেষে বুঝতে পেরেছিলাম কী আমাকে বিদেশী মূল উদাহরণগুলি সম্পর্কে বিভ্রান্ত করেছে। চার সন্তানের বাবা হিসাবে আমি পিতামাতার খোঁজ রাখার জন্য অভ্যস্ত নই । আরও চল্লিশ বছর বা তার পরে এটি আর পেছনের দিকে না দেখায়।
বব স্টেইন

4
"শিশু" এবং "পিতামাতা" এর মতো আপনার উদাহরণ সারণির নাম দেওয়ার জন্য ধন্যবাদ ... এটি আসলে বরং সহায়ক এবং আমি আশা করি সরকারী নথিপত্র এটি করেছে!
মাইকে রডেন্ট

7

প্রধান সুবিধাটি হ'ল আপনি সারণিতে কোন মানটি প্রবেশ করতে পারবেন তা সীমাবদ্ধ করতে পারেন; যদি আপনি এমন কোনও মান প্রবেশ করার চেষ্টা করেন যা রেফারেন্স সারণীতে বিদ্যমান না থাকে তবে আপনি এটি করতে সক্ষম হবেন না।

এছাড়াও, আপনি যদি রেফারেন্স সারণীতে মানটি আপডেট বা মুছলে, আপনি মানটি স্বয়ংক্রিয়ভাবে আপডেট করতে সেট করতে পারেন বা সেই মানটি থাকা কোনও সারি ক্যাসকেডে মুছুন।

এটি সত্যই আপনার কোডটি উপকারের একটি দুর্দান্ত বৈশিষ্ট্য।

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