৬.৪ ডেটাবেজ রিলেশন (Database Relation)
এইচএসসি আইসিটি অধ্যায় ৬ এর টপিক: ডেটাবেজ রিলেশন ও ই-আর ডায়াগ্রাম। One-to-One, One-to-Many, Many-to-Many রিলেশনশিপ এবং ER Diagram এর প্রতীক নিয়ে আলোচনা।
৬.৪ ডেটাবেজ রিলেশন (Database Relation)
- ৬.৪ ডেটাবেজ রিলেশন (Database Relation)
- ফেসবুকের রিলেশনশিপ!
- ডেটাবেজ রিলেশনশিপ কী?
- রিলেশনশিপের প্রকারভেদ
- ১. ওয়ান-টু-ওয়ান (One-to-One) রিলেশনশিপ
- One-to-One ডায়াগ্রাম
- ২. ওয়ান-টু-মেনি (One-to-Many) রিলেশনশিপ
- One-to-Many ডায়াগ্রাম
- ৩. মেনি-টু-মেনি (Many-to-Many) রিলেশনশিপ
- Many-to-Many রিলেশন বাস্তবায়ন
- ই-আর ডায়াগ্রাম (ER Diagram)
- ER ডায়াগ্রামের প্রতীকসমূহ
- একটি পূর্ণাঙ্গ ER ডায়াগ্রাম উদাহরণ
- রিলেশনাল মডেল ও নরমালাইজেশন
- নিজেকে যাচাই করো
- সারসংক্ষেপ
অধ্যায় ৬.৪: ডেটাবেজ রিলেশন (Database Relation) ও ই-আর মডেল
লেকচারে আমরা ফেসবুকের উদাহরণের মাধ্যমে ডেটাবেজ রিলেশনশিপের প্রাথমিক ধারণা পেয়েছি। এই রিডিং ম্যাটেরিয়ালে আমরা দেখব কীভাবে লজিক্যালি এই সম্পর্কগুলো তৈরি করা হয়। ডেটাবেজ রিলেশনশিপ হলো রিলেশনাল ডেটাবেজ ম্যানেজমেন্ট সিস্টেমের (RDBMS) মূল ভিত্তি। যখন ডেটাবেজের দুটি টেবিলের মধ্যে একটি সাধারণ ফিল্ডের (Common Field) উপর ভিত্তি করে তথ্যের আদান-প্রদানের সম্পর্ক তৈরি করা হয়, তাকে ডেটাবেজ রিলেশনশিপ বলে। এটি ছাড়া ডেটা ইন্টিগ্রিটি বা তথ্যের সত্যতা ও নির্ভরযোগ্যতা রক্ষা করা অসম্ভব।
ডেটাবেজ রিলেশনশিপ কী?
সহজ কথায়, ডেটাবেজের বিভিন্ন টেবিলের মধ্যে লজিক্যাল সংযোগ স্থাপন করাই হলো রিলেশনশিপ। এর ফলে ব্যবহারকারী খুব সহজে একাধিক টেবিল থেকে প্রয়োজনীয় তথ্য খুঁজে বের করতে পারে।
সংজ্ঞা (Definition): ডেটাবেজের দুটি বা ততোধিক টেবিলের ডেটার মধ্যে একটি কমন ফিল্ডের (Common Field) মাধ্যমে লজিক্যাল সম্পর্ক স্থাপন করাকে ডেটাবেজ রিলেশনশিপ বলে। এর প্রধান উদ্দেশ্য হলো ডেটা ডুপ্লিকেশন বা পুনরাবৃত্তি কমানো এবং ডেটা ইন্টিগ্রিটি বজায় রাখা।
রিলেশনশিপ তৈরি করার জন্য কিছু নির্দিষ্ট শর্ত পূরণ করতে হয়। এই শর্তগুলো পূরণ না হলে রিলেশনাল ডেটাবেজ সঠিকভাবে কাজ করবে না।
রিলেশনশিপ তৈরির শর্তসমূহ (Conditions):
- অন্তত দুটি টেবিল থাকতে হবে।
- টেবিলগুলোর মধ্যে একটি কমন ফিল্ড (Common Field) থাকতে হবে।
- কমন ফিল্ডের ডেটা টাইপ (Data Type) এবং ফিল্ড সাইজ (Field Size) উভয় টেবিলে হুবহু একই হতে হবে।
- অন্তত একটি টেবিলে ওই কমন ফিল্ডটি প্রাইমারি কি (Primary Key) হিসেবে থাকতে হবে।
রিলেশনশিপের প্রকারভেদ ও প্রায়োগিক বিশ্লেষণ
ডেটাবেজ ডিজাইনের সময় ডেটার ধরন ও ব্যবহারের ওপর ভিত্তি করে রিলেশনশিপ নির্ধারণ করা হয়। প্রধানত তিন ধরনের রিলেশনশিপ রয়েছে:
- ওয়ান-টু-ওয়ান (One-to-One / 1:1)
- ওয়ান-টু-মেনি (One-to-Many / 1:N)
- মেনি-টু-মেনি (Many-to-Many / M:N)
পরীক্ষার টিপস (Exam Tip): উদ্দীপক দেখে রিলেশনশিপ শনাক্ত করার উপায়:
- যদি সম্পর্কটি 'একজন-একটি' হয় (যেমন: একজন ব্যক্তির একটিই পাসপোর্ট) -> One-to-One
- যদি সম্পর্কটি 'একজন-অনেক' হয় (যেমন: একজন কাস্টমার অনেকগুলো পণ্য কিনছেন) -> One-to-Many
- যদি সম্পর্কটি 'অনেক-অনেক' হয় (যেমন: অনেক ছাত্র অনেক বিষয়ে ভর্তি হয়েছে) -> Many-to-Many
উদ্দীপকের টেবিলগুলোর ডেটা দেখে বা বর্ণনা পড়ে এই 'ম্যাপিং' বুঝতে হবে।
১. ওয়ান-টু-ওয়ান (One-to-One / 1:1) রিলেশনশিপ
যখন কোনো ডেটাবেজের একটি টেবিলের একটি রেকর্ডের সাথে অন্য একটি টেবিলের শুধুমাত্র একটি রেকর্ডের সম্পর্ক থাকে, এবং একইভাবে দ্বিতীয় টেবিলের একটি রেকর্ডের সাথে প্রথম টেবিলের শুধুমাত্র একটি রেকর্ডের সম্পর্ক থাকে, তখন তাকে ওয়ান-টু-ওয়ান রিলেশনশিপ বলে।
বাস্তব জীবনে এটি খুব কম ব্যবহৃত হয়। সাধারণত টেবিল স্প্লিটিং (Table Splitting) বা নিরাপত্তার জন্য এটি লাগে। যেমন: একজন এমপ্লোয়ি এবং তার কনফিডেন্সিয়াল স্যালারি ডিটেইলস যদি আলাদা টেবিলে রাখা হয়।
উদাহরণ (Example): Person এবং Passport টেবিল।
টেবিল-১: Person
| NID (PK) | Name | Age |
|---|---|---|
| 101 | Rahim | 30 |
| 102 | Karim | 35 |
টেবিল-২: Passport
| Passport_No (PK) | Issue_Date | NID (FK + Unique) |
|---|---|---|
| P-550 | 01-01-2023 | 101 |
| P-551 | 15-02-2023 | 102 |
ব্যাখ্যা: এখানে Person টেবিলের NID হলো প্রাইমারি কি। Passport টেবিলে NID হলো ফরেন কি। যেহেতু একজন ব্যক্তির একটিই পাসপোর্ট, তাই Passport টেবিলে NID ফিল্ডটি অবশ্যই 'Unique' হতে হবে (রিপিট হতে পারবে না)।
২. ওয়ান-টু-মেনি (One-to-Many / 1:N) রিলেশনশিপ
এটি রিলেশনাল ডেটাবেজের সবচেয়ে জনপ্রিয় ও বহুল ব্যবহৃত রিলেশনশিপ। যখন কোনো একটি টেবিলের (প্যারেন্ট টেবিল) একটি রেকর্ডের সাথে অন্য একটি টেবিলের (চাইল্ড টেবিল) একাধিক রেকর্ডের সম্পর্ক থাকে, কিন্তু বিপরীতভাবে দ্বিতীয় টেবিলের একটি রেকর্ডের সাথে প্রথম টেবিলের মাত্র একটি রেকর্ডের সম্পর্ক থাকে, তখন তাকে ওয়ান-টু-মেনি রিলেশনশিপ বলে।
গুরুত্বপূর্ণ (Important): ফরেন কি বসানোর নিয়ম
One-to-Many রিলেশনে সবসময় 'Many' বা 'অনেক' এর দিকে ফরেন কি বসাতে হয়। যেমন- বাবা ও সন্তানের সম্পর্কে, সন্তানের টেবিলে বাবার আইডি থাকবে। কারণ একজন বাবার অনেক সন্তান হতে পারে, কিন্তু সন্তানের একজনই বাবা।
উদাহরণ (Example): Customer এবং Order টেবিল।
Customer টেবিল (Parent):
| Customer_ID (PK) | Name | Phone |
|---|---|---|
| C-01 | Jamal | 017... |
| C-02 | Kamal | 018... |
Order টেবিল (Child):
| Order_ID (PK) | Date | Amount | Customer_ID (FK) |
|---|---|---|---|
| O-501 | 10-05-2023 | 500 | C-01 |
| O-502 | 12-05-2023 | 700 | C-01 |
| O-503 | 12-05-2023 | 200 | C-02 |
ব্যাখ্যা: এখানে Customer_ID হলো ফরেন কি। লক্ষ্য করো, Order টেবিলে C-01 দুইবার এসেছে। অর্থাৎ জামাল সাহেব দুটি অর্ডার দিয়েছেন। এটিই 1:N রিলেশন।
৩. মেনি-টু-মেনি (Many-to-Many / M:N) রিলেশনশিপ ও জংশন টেবিল
যখন দুটি টেবিলের উভয়ের একটি রেকর্ডের সাথে অপর টেবিলের একাধিক রেকর্ডের সম্পর্ক থাকে, তখন তাকে মেনি-টু-মেনি রিলেশনশিপ বলে।
সমস্যা: রিলেশনাল ডেটাবেজে সরাসরি দুটি টেবিলের মধ্যে মেনি-টু-মেনি রিলেশনশিপ তৈরি করা যায় না। এটি করতে গেলে ডেটা ডুপ্লিকেশন ও অসামঞ্জস্যতা তৈরি হয়।
সমাধান: এই সমস্যা সমাধানের জন্য একটি তৃতীয় বা সহযোগী টেবিল ব্যবহার করা হয়, যাকে জংশন টেবিল (Junction Table) বা লিংকিং টেবিল বলে। এই টেবিলটি মূল দুটি টেবিলের প্রাইমারি কি-কে নিজের মধ্যে ধারণ করে এবং দুটি আলাদা 1:N রিলেশনশিপ তৈরি করে।
জংশন টেবিল (Junction Table): যে তৃতীয় টেবিল ব্যবহার করে দুটি টেবিলের মধ্যে Many-to-Many রিলেশনশিপকে ভেঙে দুটি One-to-Many রিলেশনশিপে রূপান্তর করা হয়, তাকে জংশন টেবিল বলে। এতে সাধারণত কম্পোজিট প্রাইমারি কি (Composite Primary Key) থাকে।
বাস্তবায়ন কৌশল (Student & Course):
ধরি, একজন ছাত্র অনেকগুলো কোর্স নিতে পারে, আবার একটি কোর্সে অনেক ছাত্র ভর্তি হতে পারে।
- Student টেবিল:
Roll(PK),Name - Course টেবিল:
Course_Code(PK),Title - Registration (Junction) টেবিল:
Roll(FK),Course_Code(FK),Reg_Date
Registration টেবিলের ডেটা:
| Roll (FK) | Course_Code (FK) | Reg_Date |
|---|---|---|
| 101 | ICT-101 | 01-01-24 |
| 101 | MAT-102 | 02-01-24 |
| 102 | ICT-101 | 01-01-24 |
এখানে Roll এবং Course_Code মিলে একটি কম্পোজিট প্রাইমারি কি তৈরি করেছে। এটি নিশ্চিত করে যে একই ছাত্র একই কোর্সে দুবার রেজিস্ট্রেশন করতে পারবে না।
রিলেশনশিপের ডিগ্রি (Degree of Relationship)
রিলেশনশিপে কতটি এনটিটি বা টেবিল অংশগ্রহণ করছে তার ওপর ভিত্তি করে ডিগ্রিকে ৩ ভাগে ভাগ করা যায়। এটি এমসিকিউ (MCQ) এর জন্য খুবই গুরুত্বপূর্ণ।
- ইউনারি (Unary): যখন একটি এনটিটি নিজের সাথেই রিলেশন তৈরি করে। একে 'Recursive Relationship'-ও বলা হয়।
- উদাহরণ: একজন এমপ্লোয়ি অন্য এমপ্লোয়ির ম্যানেজার। এখানে
Employeeটেবিলটি নিজের সাথেই সম্পর্কিত।
- উদাহরণ: একজন এমপ্লোয়ি অন্য এমপ্লোয়ির ম্যানেজার। এখানে
- বাইনারি (Binary): যখন দুটি ভিন্ন এনটিটির মধ্যে রিলেশন হয়। এটি সবচেয়ে সাধারণ।
- উদাহরণ: ছাত্র ও শিক্ষক, ক্রেতা ও বিক্রেতা।
- টারনারি (Ternary): যখন তিনটি ভিন্ন এনটিটি বা টেবিল একসাথে যুক্ত থাকে।
- উদাহরণ: ডাক্তার, রোগী এবং ঔষধ (Prescription)।
সংক্ষিপ্ত সারাংশ (Summary of Degrees):
- Unary: ১টি এনটিটি (Self-referencing)
- Binary: ২টি এনটিটি (Most Common)
- Ternary: ৩টি এনটিটি (Complex relationships)
ই-আর (ER) মডেল ও ডায়াগ্রামের প্রতীক পরিচিতি
এনটিটি রিলেশনশিপ (ER) ডায়াগ্রাম হলো ডেটাবেজের ব্লু-প্রিন্ট বা নকশা। লেকচারে আমরা বেসিক প্রতীকগুলো দেখেছি। কিন্তু পরীক্ষার খাতায় ভালো নম্বর পাওয়ার জন্য অ্যাট্রিবিউটের বিস্তারিত প্রকারভেদ জানা প্রয়োজন।
অ্যাট্রিবিউটের প্রকারভেদ ও প্রতীক
- সাধারণ অ্যাট্রিবিউট (Simple Attribute): যা আর ভাঙা যায় না।
- প্রতীক: সাধারণ উপবৃত্ত (Oval)।
- উদাহরণ:
Roll,Age.
- কম্পোজিট অ্যাট্রিবিউট (Composite Attribute): যা কয়েকটি সাব-অ্যাট্রিবিউটে ভাগ করা যায়।
- প্রতীক: একটি ওভাল থেকে শাখা বের হয়ে অন্য ওভালে যায়।
- উদাহরণ:
Address(একে Street, City, Zip-এ ভাগ করা যায়)।
- মাল্টিভ্যালুড অ্যাট্রিবিউট (Multivalued Attribute): যার একাধিক মান থাকতে পারে।
- প্রতীক: ডাবল উপবৃত্ত (Double Oval)।
- উদাহরণ:
Phone_Number(একজন ব্যক্তির একাধিক মোবাইল নম্বর থাকতে পারে),Degree(একাধিক ডিগ্রি থাকতে পারে)।
- ডিরাইভড অ্যাট্রিবিউট (Derived Attribute): যা অন্য কোনো অ্যাট্রিবিউট থেকে গণনা করে বের করা হয়, সরাসরি ডেটাবেজে সেভ করা হয় না।
- প্রতীক: ড্যাশ বা ডটেড উপবৃত্ত (Dashed Oval)।
- উদাহরণ:
Date_of_BirthথেকেAgeবের করা। এখানেAgeহলো ডিরাইভড অ্যাট্রিবিউট।
উইক এনটিটি (Weak Entity):
যে এনটিটির নিজস্ব কোনো প্রাইমারি কি থাকে না এবং অস্তিত্বের জন্য অন্য কোনো শক্তিশালী এনটিটির (Strong Entity) ওপর নির্ভর করতে হয়, তাকে উইক এনটিটি বলে।
- প্রতীক: ডাবল আয়তক্ষেত্র (Double Rectangle)।
- উদাহরণ: ব্যাংকের লোনের নমিনি (Nominee)। একাউন্ট হোল্ডার ছাড়া নমিনির কোনো অস্তিত্ব নেই।
সারাংশ ও পরীক্ষার প্রস্তুতি
পুরো অধ্যায়ের মূল বিষয়গুলোর সারসংক্ষেপ নিচে দেওয়া হলো যা পরীক্ষার আগের রাতে রিভিশনের জন্য কার্যকর।
রিভিশন চেকলিস্ট (Quick Revision):
- শর্ত: রিলেশনশিপের জন্য কমন ফিল্ড ও প্রাইমারি কি থাকতেই হবে।
- ফরেন কি: 1:N রিলেশনে ফরেন কি সবসময় 'Many' বা চাইল্ড টেবিলে বসে।
- M:N সমাধান: মেনি-টু-মেনি রিলেশন ভাঙতে 'জংশন টেবিল' লাগে, যাতে কম্পোজিট প্রাইমারি কি থাকে।
- ER ডায়াগ্রাম: মাল্টিভ্যালুড অ্যাট্রিবিউট = ডাবল ওভাল; ডিরাইভড = ড্যাশড ওভাল; উইক এনটিটি = ডাবল রেকটেঙ্গল।
পরিভাষা (Glossary)
| পরিভাষা (Term) | সংজ্ঞা (Definition) |
|---|---|
| এনটিটি (Entity) | বাস্তব বা কাল্পনিক বস্তু যার সম্পর্কে ডেটাবেজে তথ্য রাখা হয় (যেমন: ছাত্র, গাড়ি)। |
| অ্যাট্রিবিউট (Attribute) | এনটিটির বৈশিষ্ট্য বা গুণাবলি (যেমন: ছাত্রের নাম, রোল)। |
| ই-আর ডায়াগ্রাম (ER Diagram) | এনটিটি-রিলেশনশিপ ডায়াগ্রাম, যা ডেটাবেজের লজিক্যাল স্ট্রাকচার চিত্রাকারে প্রকাশ করে। |
| ফরেন কি (Foreign Key) | একটি টেবিলের ফিল্ড যা অন্য টেবিলের প্রাইমারি কি-কে নির্দেশ করে রিলেশন তৈরি করে। |
| জংশন টেবিল (Junction Table) | Many-to-Many রিলেশনশিপ বাস্তবায়নের জন্য ব্যবহৃত মধ্যবর্তী টেবিল। |
| কম্পোজিট কি (Composite Key) | একাধিক ফিল্ডের সমন্বয়ে গঠিত প্রাইমারি কি। |
| কার্ডিনালিটি (Cardinality) | এনটিটির মধ্যে সম্পর্কের সংখ্যাসূচক প্রকাশ (যেমন: ১:১, ১:N)। |