আজকে আমাদের আলোচনার বিষয় – ইন্টিগ্রিটি কন্সট্রেইন্ট যা অধ্যায়-৬ এর ডাটাবেস ম্যানেজমেন্ট সিস্টেম এ অন্তর্ভুক্ত। এটি চার বছর মেয়াদি কোর্সের আলোকে লেখা হয়েছে। ডাটাবেস ম্যানেজমেন্ট সিস্টেমের বিভিন্ন ইংরেজি বই অনুসরণ করেই রচনা করা হয়েছে। ইঞ্জিনিয়ারিং বিষয়ের যে-কোন বই সম্পূর্ণরূপে বাংলা ভাষায় রচনা করা সম্ভব নয়। এজন্যে কিছু কিছু ইংরেজি শব্দকে বাংলায় অনুবাদ করা হয়নি। ফলে ছাত্রছাত্রীদের হয়ত কিছুটা অসুবিধা হতে পারে।
Table of Contents
ইন্টিগ্রিটি কন্সট্রেইন্ট
ইন্টিগ্রিটি কন্সট্রেইন্ট
ডাটাবেসের সঠিক, বৈধ এবং সঙ্গতিপূর্ণ ডাটাকে প্রবেশ, পরিবর্তন, পারস্পরিক সম্পর্কযুক্ত অবস্থায় সংরক্ষণ করাকে ইন্টিগ্রিটি কন্সট্রেনট বলে। অর্থাৎ এর নিয়ম বা রুলস্ অনুসরণ করতে হয়।
তিন ধরনের ইন্টিগ্রিটি কন্সট্রেইন্ট রয়েছে:
১। এন্টিটি ইন্টিগ্রিটি কন্সট্রেইন্ট
২। ডোমেইন ইন্টিগ্রিটি কন্সট্রেইন্ট বা ডোমেইন কন্সট্রেইন্ট
৩। রেফারেন্সিয়াল ইন্টিগ্রিটি।
রেফারেন্সিয়াল ইন্টিগ্রিটি
চিত্রে দু’টি টেবিল রয়েছে, একটি হল- artist এবং অন্যটি হল album। এ দু’টি টেবিলের মধ্যে artist টেবিলে artist_id কলামটি primery key অর্থাৎ উক্ত কলামের ভ্যালুগুলো এক ও অদ্বিতীয়, যা অন্যান্য টেবিলেও রেফারেন্স হিসাবে ব্যবহৃত হয়। উক্ত উদাহরণে album টেবিলে artist_id টি foreign key অর্থাৎ এখানে উক্ত কলামের ভ্যালুগুলো Master টেবিল artist এর artist_id থেকে এসেছে এক ও অদ্বিতীয়ভাবে।
চিত্রে আরো দেখা যাচ্ছে যে, album টেবিলে artist_id নামক কলামের ভ্যালু ‘4’ বা artist টেবিলের artist_id এর অ্যাট্রিবিউট বা কলাম থেকে আসে না, যাকে চিত্রে delete চিহ্ন দ্বারা বুঝানো হয়েছে। সুতরাং আমরা বলতে পারি- artist টেবিলের artist_id কলামে ‘4’ রেকর্ডটি Reference নয়।
অতএব, রেফারেন্সিয়াল ইন্টিগ্রিটি হল ডাটার একটি বৈশিষ্ট বা property, যা কোন একটি রিলেশন ডাটাবেসের (টেবিলের) একটি অ্যাট্রিবিউট (কলাম) এর প্রত্যেকটি ভ্যালুকে যাচাই-বাছাই (satisfied and requires) করে অন্য আরেকটি ভিন্ন কিংবা একই রিলেশনের অ্যাট্রিবিউটের ভ্যালুতে অবস্থান করে। অর্থাৎ যে নিয়মের কারণে দুই বা ততোধিক রিলেশনশীপের টেবিলের মধ্যকার রেকর্ডসমূহ যৌগপদিকরণ অবস্থায় অবস্থান করে, তাকে রেফারেন্সিয়াল ইন্টিগ্রিটি বা রেফারেন্সিয়াল ইন্টিগ্রিটি কন্সট্রেইন্ট বলে।
রেফারেন্সসিয়াল ইন্টিগ্রিটিতে দু’টি key-এর কমবিনেশন থাকবে, একটি হল Primary key যেটি অবস্থান করবে Master বা মেইন টেবিলে আর অন্যটি হল Foreign key, যা annex বা সংযোজিত টেবিলে অবস্থান করবে।
রেফারেন্সিয়াল ইন্টিগ্রিটিতে একটি রিলেশনে প্রদত্ত একটি নির্দিষ্ট অ্যাট্রিবিউট সেটের ভ্যালু অপর একটি রিলেশনে একই ধরনে একটি নির্দিষ্ট অ্যাট্রিবিউট সেটের ভ্যালু হিসেবে প্রদর্শিত হয়। কিন্তু রেফারেন্সিয়াল ইন্টিগ্রিটি যদি ভঙ্গ হয়, তাহলে নরমাল প্রসিডিয় অপারেশন পরিচালনা ব্যাহত হয়। এজন্য ডাটাবেস মডিফিকেশনের সময় রেফারেন্সিয়াল ইন্টিগ্রিটি যাতে ভঙ্গ না হয়, সে বাং নিতে হবে।
উদাহরণ: একটি Customer নামক টেবিল তৈরি করি, যেখানে cname কে primary key হিসাবে declare করিঃ
create | table | customer |
(cname | char(20) | not null, |
street | char(30), | |
city | char(30), | |
primary | key | (cname)) |
Branch নামক আরো একটি টেবিল তৈরি করি, যেখানে bname কে primary key হিসাবে declare করি।
create | table | branch |
(bname | char(15) | not null, |
bcity | char(30). | |
assets | integer, | |
primary | key | (bname) |
check | (assets >= 0)) |
account নামক আরো একটি টেবিল তৈরি করি, যেখানে account# কে primary key হিসাবে declare করি এবং bname Branch টেবিল থেকে রেফারেন্স হিসাবে Foreign key হিসাবে declare করিঃ
create | table | account |
(account# | char(10) | not null, |
(bname | char(15), | |
balance | integer, | |
primary | key | (account#) |
foreign | key (bname) | references |
branch, |
check (balance >= 0))
|
depositor নামক আরো একটি টেবিল তৈরি করি যেখানে customer এবং account টেবিল থেকে cname এবং account# যে Foreign key হিসাবে রেফারেন্স করি:
create | table | depositor |
(cname | char(20) | not null, |
account# | char(10) | not null, |
primary | key |
(cname, account#)
|
foreign | key |
(cname) references customer,
|
foreign key | (account#) |
references account)
|
DBMS এর Assertion বর্ণনা
DBMS এর ক্ষেত্রে Assertion হল একটি predicate যা একটি শর্ত (Condition) কে express বা বর্ণনা করে এবং ঐ শর্তাটিকে Database সর্বদা satisfy করবে। Domain constraint ও referential-integrity constraint হল বিশেষ ধরনের Assertion| তবে এটি ছাড়াও বহু ধরনের Assertion database system-ও রয়েছে।
SQL এর ক্ষেত্রে Assertion এর একটি রূপ নিম্নে দেওয়া হল-
Create assertion <assertion-name> check <predicate>.
যখন কোন assertion তৈরি করা হয় তখন System উহার Validity পরীক্ষা করে দেখে। যদি assertion টি valid হয় শুধুমার তখন Database এর modification অনুমোদন পায়। অন্যথায় database modification এর অনুমোদন পায় না। কোন জটিল Assertion testing এর ক্ষেত্রে প্রচুর পরিমাণ Overhead বা খরচ বৃদ্ধি পায়। এজন্য Assertion তৈরির সময় খুবই যত্নশীল হতে হবে।
আরও দেখুনঃ