intermediate#foreign-key#referential-integrity#relationship#constraintUpdated: 2026-05-12

ফরেন কী (Foreign Key)


১. ভূমিকা — দুটি পরিবারের মধ্যে বিয়ের সম্পর্কের মতো!

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

ঠিক এভাবেই ডেটাবেজে Foreign Key দুটি টেবিলের মধ্যে সেতু তৈরি করে!

মজার তথ্য: bKash যখন কাউকে টাকা পাঠায়, তখন "Transactions" টেবিলে প্রেরকের নম্বর ও গ্রাহকের নম্বর — উভয়ই Foreign Key হিসেবে "Users" টেবিলকে নির্দেশ করে। এভাবে ডেটাবেজ নিশ্চিত করে যে অবিদ্যমান নম্বরে টাকা পাঠানো যাবে না!


২. সমস্যা — টেবিলগুলো কীভাবে পরস্পর সংযুক্ত থাকবে?

সমস্যা:
Students Table:
┌──────┬──────────────┐
│ রোল  │ নাম         │
├──────┼──────────────┤
│  101 │ রাহেলা       │
│  102 │ করিম         │
└──────┴──────────────┘

Results Table (Foreign Key ছাড়া):
┌──────┬──────────┬────────┐
│ রোল  │ বিষয়    │ নম্বর │
├──────┼──────────┼────────┤
│  101 │ গণিত    │   90   │
│  999 │ পদার্থ  │   85   │  ← রোল 999 Students এ নেই! কার রেকর্ড?
└──────┴──────────┴────────┘

এই বিসংগতি Foreign Key দিয়ে রোধ করা যায়!

৩. চিত্রের মাধ্যমে বোঝো

Foreign Key সংযোগ:

Students Table                Results Table
┌──────┬──────────────┐      ┌──────┬──────────┬────────┐
│ রোল  │ নাম         │      │ রোল  │ বিষয়    │ নম্বর │
│ (PK) │              │      │ (FK) │          │        │
├──────┼──────────────┤      ├──────┼──────────┼────────┤
│  101 │ রাহেলা       │◄─┐  │  101 │ গণিত    │   90   │
│  102 │ করিম         │◄─┼──│  101 │ পদার্থ  │   85   │
│  103 │ সুমাইয়া    │  └──│  102 │ হিসাব   │   88   │
└──────┴──────────────┘      └──────┴──────────┴────────┘

Students.রোল = Primary Key
Results.রোল  = Foreign Key → Students.রোল কে নির্দেশ করে

Rule: Results.রোল এ এমন মান থাকতে পারবে না
      যা Students.রোল এ নেই

৪. বাস্তব জীবনের সাথে মিল

উপমা: Foreign Key হলো ঠিক যেমন একটি রসিদ (Receipt) নম্বর। যখন দোকানে কিছু কেনো, রসিদে তোমার নাম না থেকে শুধু "Customer ID: 1234" লেখা থাকে। এই 1234 হলো Customers টেবিলের Primary Key — এবং রসিদ টেবিলে এটি Foreign Key। রসিদে এমন Customer ID লেখা যাবে না যা Customers টেবিলে নেই।


Module 1: Foreign Key কী? (What is a Foreign Key?)

📌 সংজ্ঞা

Foreign Key হলো একটি টেবিলে এমন একটি Field যা অন্য একটি টেবিলের Primary Key কে নির্দেশ করে। এটি দুটি টেবিলের মধ্যে সম্পর্ক (Relationship) স্থাপন করে এবং Referential Integrity নিশ্চিত করে।

Foreign Key এর বৈশিষ্ট্য

বৈশিষ্ট্যবিবরণ
Referenceঅন্য টেবিলের PK কে নির্দেশ করে
NULL হতে পারেOptional সম্পর্কে NULL থাকতে পারে
Duplicate হতে পারেএকই FK মান একাধিকবার থাকতে পারে
একাধিক FKএকটি টেবিলে অনেক FK থাকতে পারে

Module 2: Referential Integrity (রেফারেন্শিয়াল ইন্টিগ্রিটি)

📌 সংজ্ঞা

Referential Integrity হলো এমন একটি নিয়ম যা নিশ্চিত করে যে Foreign Key এর মান সর্বদা সংশ্লিষ্ট টেবিলের Primary Key তে বিদ্যমান।

Referential Integrity এর নিয়ম:

১. INSERT নিয়ম:
   Results এ রোল 999 INSERT করা যাবে না
   যদি Students এ রোল 999 না থাকে
   → ❌ ERROR: Foreign Key Constraint Violation

২. DELETE নিয়ম:
   Students থেকে রোল 101 DELETE করা যাবে না
   যদি Results এ রোল 101 এর রেকর্ড থাকে
   → ❌ ERROR: Cannot delete parent row

৩. UPDATE নিয়ম:
   Students এ রোল 101 → 201 UPDATE করলে
   Results এ সব রোল 101 → 201 UPDATE হওয়া উচিত
   (ON UPDATE CASCADE)

Module 3: Cascading Actions (ক্যাসকেডিং অ্যাকশন)

-- Cascade উদাহরণ:
CREATE TABLE Results (
  roll INTEGER,
  subject VARCHAR(50),
  marks INTEGER,
  FOREIGN KEY (roll) REFERENCES Students(roll)
    ON DELETE CASCADE      -- Parent মুছলে Child ও মুছবে
    ON UPDATE CASCADE      -- Parent পরিবর্তনে Child ও পরিবর্তন হবে
);

-- ON DELETE CASCADE:
-- Students থেকে রোল 101 মুছলে
-- Results থেকেও রোল 101 এর সব রেকর্ড মুছবে

-- ON DELETE SET NULL:
-- Parent মুছলে Child এ NULL বসবে (যদি NULL অনুমোদিত)

-- ON DELETE RESTRICT:
-- Child থাকলে Parent মুছতে পারবে না (Default)

CASCADE বিকল্পসমূহ

অ্যাকশনParent DELETE হলেব্যবহার
CASCADEChild ও Delete হয়সাবধানে
SET NULLChild এ NULL বসেOptional সম্পর্কে
RESTRICTError দেয়নিরাপদ
NO ACTIONError দেয়Default

Module 4: বাস্তব উদাহরণ — স্কুল ডেটাবেজ

School Database:

Students (PK: StudentID)      Subjects (PK: SubjectCode)
┌──────────┬──────────┐       ┌───────────┬────────────┐
│StudentID │ নাম     │       │SubjectCode│ বিষয়নাম  │
├──────────┼──────────┤       ├───────────┼────────────┤
│   S001   │ রাহেলা   │       │   M001    │ গণিত      │
│   S002   │ করিম     │       │   P001    │ পদার্থ    │
└──────────┴──────────┘       │   C001    │ রসায়ন    │
                              └───────────┴────────────┘

Exam_Results (FK: StudentID, FK: SubjectCode)
┌──────────┬───────────┬────────┬────────┐
│StudentID │SubjectCode│ Marks  │ Grade  │
│  (FK)    │   (FK)   │        │        │
├──────────┼───────────┼────────┼────────┤
│   S001   │   M001    │   90   │   A+   │
│   S001   │   P001    │   85   │   A    │
│   S002   │   M001    │   88   │   A+   │
└──────────┴───────────┴────────┴────────┘

Exam_Results এ দুটি Foreign Key!
→ StudentID → Students.StudentID
→ SubjectCode → Subjects.SubjectCode

Module 5: Foreign Key ও SQL

-- টেবিল তৈরি:
CREATE TABLE Students (
  roll INTEGER PRIMARY KEY,
  name VARCHAR(100) NOT NULL
);

CREATE TABLE Results (
  result_id INTEGER PRIMARY KEY AUTO_INCREMENT,
  roll INTEGER NOT NULL,
  subject VARCHAR(50),
  marks INTEGER,
  FOREIGN KEY (roll) REFERENCES Students(roll)
);

-- সঠিক INSERT:
INSERT INTO Students VALUES (101, 'রাহেলা');
INSERT INTO Results (roll, subject, marks) VALUES (101, 'গণিত', 90);
-- ✅ সফল

-- ভুল INSERT:
INSERT INTO Results (roll, subject, marks) VALUES (999, 'গণিত', 90);
-- ❌ ERROR: Cannot add or update child row:
--    a foreign key constraint fails

Module 6: বাংলাদেশের বাস্তব উদাহরণ

bKash Transaction Database:

Users Table (PK: phone_number)
┌─────────────┬──────────────┬─────────┐
│phone_number │ নাম         │ balance │
├─────────────┼──────────────┼─────────┤
│ 01711111111 │ রাহেলা       │  5000   │
│ 01822222222 │ করিম         │  3000   │
└─────────────┴──────────────┴─────────┘

Transactions Table (FK: sender, FK: receiver)
┌─────┬─────────────┬─────────────┬────────┬────────────┐
│ ID  │ sender      │ receiver    │ amount │ date       │
│     │ (FK)        │ (FK)        │        │            │
├─────┼─────────────┼─────────────┼────────┼────────────┤
│   1 │ 01711111111 │ 01822222222 │   500  │ 2026-05-12 │
│   2 │ 01822222222 │ 01711111111 │   200  │ 2026-05-12 │
└─────┴─────────────┴─────────────┴────────┴────────────┘

দুটি FK!
→ sender → Users.phone_number
→ receiver → Users.phone_number
ফলে অবিদ্যমান নম্বরে পাঠানো অসম্ভব!

🧠 মূল শিক্ষা

মনে রাখো: Foreign Key দুটি টেবিলের মধ্যে সেতু তৈরি করে এবং Referential Integrity নিশ্চিত করে। FK সর্বদা অন্য টেবিলের PK কে নির্দেশ করে। FK NULL হতে পারে এবং Duplicate হতে পারে — এটাই PK থেকে পার্থক্য।


🔁 নিজে পরীক্ষা করো

প্রশ্ন ১: Foreign Key ও Primary Key এর মধ্যে প্রধান পার্থক্য কী? ✅ উত্তর: Primary Key Unique ও NOT NULL — রেকর্ড শনাক্ত করে। Foreign Key অন্য টেবিলের PK নির্দেশ করে — সম্পর্ক স্থাপন করে। FK Duplicate ও NULL হতে পারে।


প্রশ্ন ২: Referential Integrity কেন দরকার? ✅ উত্তর: Referential Integrity নিশ্চিত করে যে FK এ এমন মান থাকতে পারবে না যা Referenced টেবিলে নেই। এটি ডেটার সামঞ্জস্য ও বিশ্বাসযোগ্যতা নিশ্চিত করে।


প্রশ্ন ৩: ON DELETE CASCADE মানে কী? ✅ উত্তর: Parent টেবিল থেকে কোনো Record Delete করলে Child টেবিলে সেই FK এর সব Record ও স্বয়ংক্রিয়ভাবে Delete হয়ে যাবে।


প্রশ্ন ৪: একটি টেবিলে কতগুলো Foreign Key থাকতে পারে? ✅ উত্তর: একাধিক Foreign Key থাকতে পারে। যেমন Exam_Results টেবিলে StudentID ও SubjectCode — দুটি FK আছে।


📝 HSC পরীক্ষার প্রস্তুতি

পরীক্ষায় যা আসতে পারে

🎯 Foreign Key এর সংজ্ঞা ও উদাহরণ (৩ নম্বর) 🎯 Referential Integrity কী? (৩ নম্বর) 🎯 Primary Key ও Foreign Key এর পার্থক্য (৪ নম্বর) 🎯 Cascading Actions কী? (২ নম্বর)

সাধারণ ভুলসমূহ

⚠️ Foreign Key মানে "বিদেশি কী" — আসলে "অন্য টেবিলের কী" ⚠️ FK Unique হতে হবে মনে করা — FK Duplicate হতে পারে ⚠️ FK NULL হতে পারে না মনে করা — FK NULL হতে পারে (Optional সম্পর্কে)

মনে রাখার কৌশল

💡 FK = অন্য টেবিলের PK এর কপি — সেই PK কে নির্দেশ করে 💡 FK = সেতু — দুই টেবিলকে যোগ করে 💡 Referential Integrity = "অস্তিত্বহীন রেফারেন্স নিষিদ্ধ"


✅ সারাংশ

  • Foreign Key: অন্য টেবিলের PK নির্দেশ করে — সম্পর্ক স্থাপন করে
  • Referential Integrity: FK এ অবিদ্যমান PK মান রাখা যাবে না
  • CASCADE: Parent পরিবর্তনে Child স্বয়ংক্রিয়ভাবে পরিবর্তন হয়
  • FK পারে: NULL থাকতে, Duplicate থাকতে
  • FK পারে না: Referenced PK এ নেই এমন মান রাখতে
  • একাধিক FK: একটি টেবিলে একাধিক FK থাকতে পারে

FK ও PK তুলনা সারণি

বৈশিষ্ট্যPrimary KeyForeign Key
উদ্দেশ্যরেকর্ড শনাক্তটেবিল সংযোগ
Uniqueহ্যাঁনা (হতে পারে)
NULLনাহতে পারে
সংখ্যাপ্রতি টেবিলে ১অনেক হতে পারে
কোথায় থাকেনিজ টেবিলেঅন্য টেবিলের PK নির্দেশ করে

🎯 অনুশীলন প্রশ্ন

১. Foreign Key কী? উদাহরণসহ ব্যাখ্যা করো।

২. Referential Integrity কী এবং কেন গুরুত্বপূর্ণ?

৩. ON DELETE CASCADE ও ON DELETE RESTRICT এর মধ্যে পার্থক্য কী?

৪. একটি Library Database এ Books ও Members টেবিলের মধ্যে Foreign Key সম্পর্ক ব্যাখ্যা করো।

৫. MCQ: Foreign Key কোনটি নির্দেশ করে? (ক) নিজ টেবিলের Column (খ) অন্য টেবিলের Primary Key (গ) অন্য টেবিলের Foreign Key (ঘ) নিজ টেবিলের Primary Key উত্তর: (খ) অন্য টেবিলের Primary Key