ডাটাবেসে সীমাবদ্ধতা রাখতে দ্বিধা করবেন না। আপনার একটি সামঞ্জস্যপূর্ণ ডাটাবেস রয়েছে তা নিশ্চিত হবেন এবং এটি একটি ডাটাবেস ব্যবহারের অন্যতম ভাল কারণ। বিশেষত যদি আপনার কাছে বেশ কয়েকটি অ্যাপ্লিকেশন এর জন্য অনুরোধ করে (বা কেবল একটি অ্যাপ্লিকেশন তবে প্রত্যক্ষ মোড এবং বিভিন্ন উত্স ব্যবহার করে একটি ব্যাচ মোড সহ)।
মাইএসকিউএল সহ আপনার পোস্টগ্রিএসকিউএল এর মতো উন্নত বাধা নেই তবে কমপক্ষে বিদেশী কী সীমাবদ্ধতাগুলি বেশ উন্নত।
আমরা একটি উদাহরণ নেব, এমন একটি সংস্থার টেবিল যা ব্যবহারকারীর টেবিল সহ থিসি সংস্থার লোক রয়েছে
CREATE TABLE COMPANY (
company_id INT NOT NULL,
company_name VARCHAR(50),
PRIMARY KEY (company_id)
) ENGINE=INNODB;
CREATE TABLE USER (
user_id INT,
user_name VARCHAR(50),
company_id INT,
INDEX company_id_idx (company_id),
FOREIGN KEY (company_id) REFERENCES COMPANY (company_id) ON...
) ENGINE=INNODB;
চলুন ওপেন আপডেট আপডেটটি দেখুন:
- আপডেট সীমিত : ডিফল্ট : আপনি টেবিল কোম্পানির company_id আপডেট করার চেষ্টা ইঞ্জিন অপারেশন প্রত্যাখ্যান করবে যদি এই কোম্পানির উপর অন্তত লিঙ্ক এ একটি ব্যবহারকারী।
- কোনও পদক্ষেপ আপডেট করুন : নিষিদ্ধ হিসাবে একই।
- আপডেট CASCADE : সাধারণত সেরা এক : যদি আপনি টেবিল কোম্পানির একটি সারিতে একটি company_id আপডেট ইঞ্জিন এই কোম্পানির উল্লেখ সমস্ত ব্যবহারকারী সারি করে (কিন্তু কোন ট্রিগার USER কে টেবিলের উপর সক্রিয় সতর্কবাণী) এ সেই অনুযায়ী এটা আপডেট করা হবে। ইঞ্জিনটি আপনার জন্য পরিবর্তনগুলি ট্র্যাক করবে, এটি ভাল।
- আপডেট সেট নাল : আপনি যদি একটি কোম্পানী_আইডিকে এক সারি টেবিলের কোম্পানিতে আপডেট করেন তবে ইঞ্জিনটি সম্পর্কিত ইউএসআই কোম্পানী_আইডিতে ন্যূনাল সেট করবে (ইউএসএইচ কোম্পানী_ আইডি ক্ষেত্রে পাওয়া উচিত)। আপডেটে এটি করার জন্য আমি কোনও আকর্ষণীয় জিনিস দেখতে পাচ্ছি না তবে আমি ভুল হতে পারি।
এবং এখন মুছে ফেলার দিকে:
- অন সীমিত DELETE : ডিফল্ট : আপনি টেবিল কোম্পানির company_id আইডি মুছে ফেলতে ইঞ্জিন অপারেশন প্রত্যাখ্যান করবে যদি একজন ব্যবহারকারী এই কোম্পানির উপর অন্তত সংযোগগুলি, আপনার জীবন রক্ষা করতে পারে চেষ্টা করুন।
- কোনও পদক্ষেপ মুছে ফেলুন : নিষিদ্ধের মতোই
- মুছে দিন CASCADE অন : বিপজ্জনক : আপনি টেবিল কোম্পানিতে একটি কোম্পানী সারি মুছতে ইঞ্জিন হিসাবে ভাল সংশ্লিষ্ট ব্যবহারকারীদের মুছে ফেলবে। এটি বিপজ্জনক তবে মাধ্যমিক টেবিলগুলিতে স্বয়ংক্রিয় ক্লিনআপগুলি ব্যবহার করতে ব্যবহার করা যেতে পারে (যাতে এটি আপনি চান এমন কিছু হতে পারে তবে অবশ্যই কোনও সংস্থার পক্ষে নয় <-> ব্যবহারকারী উদাহরণ)
- মুছে ফেলুন সেটটি বাতিল করুন : মুষ্টিমেয় : আপনি যদি কোনও সংখ্যক সারি মুছে ফেলেন তবে সংশ্লিষ্ট ব্যবহারকারীরা স্বয়ংক্রিয়ভাবে নুলের সাথে সম্পর্ক স্থাপন করবেন। নাল যদি কোনও সংস্থার ব্যবহারকারীদের জন্য আপনার মূল্য হয় তবে এটি একটি ভাল আচরণ হতে পারে, উদাহরণস্বরূপ হতে পারে আপনাকে ব্যবহারকারীদের কিছু সামগ্রীর লেখক হিসাবে আপনার অ্যাপ্লিকেশনটিতে রাখতে হবে, তবে সংস্থাটি অপসারণ আপনার পক্ষে সমস্যা নয়।
সাধারণত আমার ডিফল্ট হল: মুছে সীমিত আপডেট CASCADE । ON DELETE CASCADE
ট্র্যাক টেবিলের জন্য কিছু সহ (লগ - সমস্ত লগ নয় - এই জাতীয় জিনিস) এবং ON DELETE SET NULL
যখন মাস্টার টেবিলটি বিদেশী কীযুক্ত টেবিলের জন্য 'সরল বৈশিষ্ট্য' হয়, যেমন ব্যবহারকারীর টেবিলের জন্য একটি জওবি টেবিল।
সম্পাদন করা
আমি এটি লেখার পরে অনেক দিন হয়ে গেল। এখন আমি মনে করি আমার একটি গুরুত্বপূর্ণ সতর্কতা যুক্ত করা উচিত। মাইএসকিউএলে ক্যাসকেডগুলির সাথে একটি বড় ডকুমেন্টেড সীমাবদ্ধতা রয়েছে। ক্যাসকেডগুলি ট্রিগার চালাচ্ছে না । সুতরাং যদি আপনি সেই ইঞ্জিনটিতে ট্রিগারগুলি ব্যবহার করতে যথেষ্ট আত্মবিশ্বাসী হন তবে আপনার ক্যাসকেডের সীমাবদ্ধতা এড়ানো উচিত।
মাইএসকিউএল কেবল এসকিউএল বিবৃতি দ্বারা সারণিতে পরিবর্তনগুলির জন্য সক্রিয় করে। এগুলি ভিউ-র পরিবর্তনের জন্য সক্রিয় করে না বা মাইএসকিউএল সার্ভারে এসকিউএল বিবৃতি প্রেরণ করে না এমন APIs দ্বারা তৈরি টেবিলগুলিতে পরিবর্তন করেও সক্রিয় করে না
==> শেষ সম্পাদনার নীচে দেখুন, জিনিসগুলি এই ডোমেনে চলছে
ট্রিগারগুলি বিদেশী কী ক্রিয়া দ্বারা সক্রিয় হয় না।
এবং আমি মনে করি না এটি একদিন স্থির হয়ে যাবে। বিদেশী কী সীমাবদ্ধতাগুলি InnoDb স্টোরেজ দ্বারা পরিচালিত হয় এবং ট্রিগারগুলি মাইএসকিউএল এসকিউএল ইঞ্জিন দ্বারা পরিচালিত হয়। দুজনেই আলাদা হয়ে গেছে। ইনোডব হ'ল সীমাবদ্ধতা ব্যবস্থাপনার একমাত্র স্টোরেজ, সম্ভবত তারা একদিন সরাসরি স্টোরেজ ইঞ্জিনে ট্রিগার যুক্ত করবে, সম্ভবত না।
দুর্বল ট্রিগার বাস্তবায়ন এবং খুব দরকারী বিদেশী কীগুলির সীমাবদ্ধতার সমর্থনের মধ্যে আপনার কোন উপাদানটি বেছে নেওয়া উচিত সে সম্পর্কে আমার নিজস্ব মতামত রয়েছে। এবং একবার আপনি ডাটাবেস ধারাবাহিকতায় অভ্যস্ত হয়ে উঠলে আপনি পোস্টগ্র্রেএসকিউএল পছন্দ করবেন।
12/2017-মাইএসকিউএল সম্পর্কে এই সম্পাদনা আপডেট করা:
@ ইসতিয়াক আহমেদ মন্তব্যগুলিতে যেমন বলেছিলেন, পরিস্থিতি এই বিষয়টিতে পরিবর্তিত হয়েছে। সুতরাং লিঙ্কটি অনুসরণ করুন এবং আসল আপ-টু-ডেট পরিস্থিতি পরীক্ষা করুন (যা ভবিষ্যতে আবার পরিবর্তন হতে পারে)।
ON DELETE CASCADE : dangerous
- এক চিমটি নুন দিয়ে নিন।