📋 বিষয়সূচী (Table of Contents)

01

কেন Super Key দরকার?

⏱ শেখার অংশ
গল্প দিয়ে শুরু ধরো, একটা বিশ্ববিদ্যালয়ের একটা টেবিলে প্রতিটা স্টুডেন্টের এই তথ্যগুলো আছে:
  • Student_ID
  • University_Email
  • National_ID
  • Name
  • Department
এখন প্রশ্ন হলো — একজন স্টুডেন্টকে ইউনিকভাবে চেনার জন্য আমরা কোন কলাম বা কলাম-কম্বিনেশন ব্যবহার করতে পারি?
🤔 নিজেকে জিজ্ঞেস করো
  • শুধু Student_ID কি একজন স্টুডেন্টকে ইউনিকভাবে চেনাতে পারে? (হ্যাঁ)
  • শুধু University_Email কি পারে? (হ্যাঁ)
  • Student_ID + Name একসাথে কি পারে? (হ্যাঁ — কারণ Student_ID একাই যথেষ্ট, Name যোগ করলেও এখনো ইউনিক)
  • Student_ID + Department একসাথে কি পারে? (হ্যাঁ — একই কারণে)

লক্ষ্য করো — অনেকগুলো ভিন্ন ভিন্ন কম্বিনেশনই একজন স্টুডেন্টকে ইউনিকভাবে চিহ্নিত করতে পারছে। কিছু কম্বিনেশনে অতিরিক্ত, অপ্রয়োজনীয় কলামও ঢুকে আছে (যেমন Name বা Department, যেগুলো না থাকলেও Student_ID একাই কাজ চালিয়ে দিত)। এই সবগুলো কম্বিনেশনকেই বলা হয় Super Key

🔑 বাস্তব-জীবনের এনালজি ধরো, তোমাকে কেউ চিনতে চায়। তারা তোমার নাম দিয়ে চিনতে পারে, অথবা নাম + জন্মতারিখ দিয়ে, অথবা নাম + ঠিকানা + ফোন নাম্বার দিয়ে। প্রতিটাই তোমাকে চেনানোর জন্য কাজ করবে — কিন্তু কিছু কম্বিনেশনে অতিরিক্ত তথ্য আছে যেগুলো আসলে দরকারই ছিল না। এই "কাজ চালানোর মতো সব কম্বিনেশন"-ই হলো Super Key।
একজন স্টুডেন্টকে চেনার অনেক উপায় স্টুডেন্ট Student_ID (একাই) Student_ID + Name Student_ID + Department University_Email (একাই) Email + Department

প্রতিটা বক্সই একজন স্টুডেন্টকে ইউনিকভাবে চেনাতে পারে — এরা সবাই Super Key।

02

Super Key আসলে কী?

⏱ শেখার অংশ

প্রথমে বুঝি uniqueness মানে কী — একটা কলাম বা কলাম-কম্বিনেশন "ইউনিক" হয় যদি টেবিলের কোনো দুইটা সারিতে (row) সেই মানগুলো একই না হয়।

Super Key-এর সংজ্ঞা

Super Key হলো এমন যেকোনো কলাম বা কলামের সেট, যেটা টেবিলের প্রতিটা সারিকে ইউনিকভাবে শনাক্ত করতে পারে — চাই সেটাতে অতিরিক্ত (অপ্রয়োজনীয়) কলাম থাকুক বা না থাকুক।

🎒 এনালজি ধরো তোমার একটা ব্যাগ ভর্তি চাবি আছে যেগুলো দিয়ে তোমার ঘরের দরজা খোলে। একটা চাবি একাই যথেষ্ট, কিন্তু তুমি চাইলে দুইটা, তিনটা চাবি একসাথে ব্যবহার করেও দরজা খুলতে পারো (একই কাজ, বাড়তি চাবি সহ)। Super Key অনেকটা এরকম — "কাজ চলে এমন যেকোনো চাবির সেট", তাতে বাড়তি চাবি থাকলেও অসুবিধা নেই, যতক্ষণ আসল কাজ (ইউনিক শনাক্তকরণ) হচ্ছে।

কেন Super Key-তে অপ্রয়োজনীয় কলাম থাকতে পারে? কারণ Super Key-এর একমাত্র শর্ত হলো — সেটা ইউনিক হতে হবে। এটাতে কোনো "সর্বনিম্ন (minimal)" হওয়ার শর্ত নেই। তাই Student_ID একাই যথেষ্ট হলেও, Student_ID + Name, Student_ID + Department, এমনকি Student_ID + Name + Department + Email — সবগুলোই Super Key, কারণ সবগুলোতেই Student_ID আছে যেটা একাই ইউনিক করে দেয়।

Student_ID (minimal — এটাই যথেষ্ট) + Name (অপ্রয়োজনীয়) = Super Key (কিন্তু non-minimal)

Minimal অংশের সাথে অতিরিক্ত কলাম যোগ করলেও ফলাফল থেকে যায় Super Key — শুধু আর "সর্বনিম্ন" থাকে না।

03

Super Key vs Candidate Key

⏱ শেখার অংশ

Candidate Key হলো সবচেয়ে ছোট (minimal) Super Key — মানে এমন Super Key যেখান থেকে আর কোনো কলাম বাদ দেওয়া গেলে সেটা আর ইউনিক থাকবে না।

তুলনার বিষয়Super KeyCandidate Key
কলামের সংখ্যাএক বা একাধিক, সীমাহীন কম্বিনেশনসর্বনিম্ন প্রয়োজনীয় কলাম
অতিরিক্ত attributeথাকতে পারেথাকে না
Minimality (সর্বনিম্নতা)নাহ্যাঁ
এফিশিয়েন্সিকম (বাড়তি কলাম বহন করে)বেশি (ঠিক যতটুকু দরকার)
ব্যবহারিক প্রয়োগমূলত থিওরিটিক্যাল/ডিজাইন-পর্যায়ে ব্যবহৃত হয়Primary/Alternate Key নির্বাচনের ভিত্তি
🧮 সহজ উদাহরণ Student_ID + Name + Department — এটা একটা Super Key, কারণ এটা ইউনিক। কিন্তু এটা Candidate Key না, কারণ শুধু Student_ID রাখলেও কাজ চলত — Name আর Department বাদ দেওয়া যায়। তাই Student_ID একাই Candidate Key, আর উপরের তিন-কলামের কম্বিনেশনটা শুধুই একটা Super Key (non-minimal)।
বিগিনার ভুল: ভাবা যে প্রতিটা Super Key-ই একটা Candidate Key। বাস্তবে — সব Candidate Key-ই Super Key, কিন্তু সব Super Key Candidate Key নয়।
04

Super Key vs Candidate Key vs Primary Key vs Alternate Key

⏱ শেখার অংশ
বৈশিষ্ট্যSuper KeyCandidate KeyPrimary KeyAlternate Key
ইউনিক?হ্যাঁহ্যাঁহ্যাঁহ্যাঁ
Minimal (সর্বনিম্ন)?না, বাধ্যতামূলক নয়হ্যাঁহ্যাঁহ্যাঁ
সংখ্যা / টেবিলঅনেক (সব কম্বিনেশন)এক বা একাধিকঠিক ১টা০ বা একাধিক
নির্বাচিত হয় কীভাবেস্বয়ংক্রিয়ভাবে সব সম্ভাব্য কম্বিনেশনSuper Key থেকে minimal গুলোCandidate Key থেকে ডিজাইনার বাছেনবাছাই না হওয়া বাকি Candidate Key
Super Key সর্বনিম্ন গুলো Candidate Key ১টা বাছা হয় Primary Key Alternate Key(s) বাকি Candidate Key গুলো

Super Key → (minimal করলে) Candidate Key → (একটা বাছলে) Primary Key + (বাকিগুলো) Alternate Key

05

বাস্তব-জগতের উদাহরণ

⏱ শেখার অংশ

উদাহরণ ১ — University Database

কলাম: Student_ID, Email, Name

Super Keys সব কম্বিনেশন

Student_ID • Email • Student_ID+Name • Student_ID+Email • Email+Name • Student_ID+Email+Name

Candidate Keys Minimal

Student_ID • Email

Primary Key

Student_ID PK

Alternate Key

Email AK

উদাহরণ ২ — Employee Database

কলাম: Employee_ID, Office_Email, National_ID, Name

🤔 নিজে বের করো
  • Candidate Key কারা? (Employee_ID, Office_Email, National_ID — তিনটাই একা একা ইউনিক)
  • Super Key কতগুলো হতে পারে? (Employee_ID, Office_Email, National_ID, এবং এদের যেকোনো কম্বিনেশন + Name যোগ করেও — অনেকগুলো)
  • কেন Name একা Candidate Key না? (কারণ দুইজন কর্মচারীর নাম একই হতে পারে — Name ইউনিক নয়)

এখানে Employee_ID-কে Primary Key বানালে, Office_Email আর National_ID হয়ে যায় Alternate Key। আর এই তিনটার যেকোনো কম্বিনেশন (যেমন Employee_ID + Name) একটা Super Key, কিন্তু Candidate Key নয় — কারণ Name বাদ দিলেও কাজ চলত।

06

SQL ডেমোনস্ট্রেশন

⏱ শেখার অংশ

একটা গুরুত্বপূর্ণ কথা — SQL-এ সরাসরি কোনো SUPER KEY কিওয়ার্ড নেই। Super Key একটা ডিজাইন-পর্যায়ের কনসেপ্ট — এটা আমরা মাথায় রেখে ডিজাইন করি, কিন্তু SQL-এ শুধু Primary Key আর UNIQUE constraint লিখি।

ধাপ ১ — ডাটাবেস ও টেবিল তৈরি

schema.sqlMySQL
CREATE DATABASE university_db;
USE university_db;

CREATE TABLE Students (
    Student_ID  INT AUTO_INCREMENT PRIMARY KEY,
    Email       VARCHAR(100) NOT NULL UNIQUE,
    Name        VARCHAR(100) NOT NULL,
    Department  VARCHAR(50)
);
✔ OUTPUT
Database created
Table 'Students' created

লাইন-বাই-লাইন: Student_ID Primary Key হওয়ায় এটা একাই একটা Candidate Key (এবং Super Key)। Email UNIQUE দেওয়ায় এটাও একটা Candidate Key। কিন্তু Student_ID + Name এর মতো Super Key SQL-এ আলাদা করে লেখার দরকার নেই — কারণ Student_ID একাই ইউনিকনেস নিশ্চিত করে দিচ্ছে।

ধাপ ২ — ডেটা ইনসার্ট করে ইউনিকনেস যাচাই

insert.sql
INSERT INTO Students (Email, Name, Department)
VALUES ('anika@uni.edu.bd', 'Anika Rahman', 'CSE');
✔ OUTPUT
1 row inserted (Student_ID = 1, auto-generated)
duplicate_email.sql
INSERT INTO Students (Email, Name, Department)
VALUES ('anika@uni.edu.bd', 'Another Anika', 'EEE');
✖ ERROR
ERROR 1062 (23000): Duplicate entry 'anika@uni.edu.bd' for key 'Email'

এই এররটা প্রমাণ করছে যে Email একাই ইউনিকনেস নিশ্চিত করছে (Candidate Key হিসেবে কাজ করছে) — তাই এটাকে অন্য কোনো কলামের সাথে জোড়া লাগানোর দরকার নেই।

বিগিনার ভুল: ভাবা যে Super Key বোঝাতে SQL-এ একসাথে একাধিক UNIQUE কলাম মিলিয়ে কম্পোজিট UNIQUE constraint বানাতে হবে। বাস্তবে Super Key শুধু ডিজাইন-পর্যায়ের বিশ্লেষণের জন্য, SQL syntax-এ এর সরাসরি প্রতিফলন নেই।
বেস্ট প্র্যাকটিস: ডিজাইন করার সময় কাগজে সব সম্ভাব্য Super Key লিস্ট করো, তারপর সেখান থেকে minimal (Candidate) গুলো বের করো, সেগুলোকেই শুধু SQL-এ PRIMARY KEY / UNIQUE হিসেবে বাস্তবায়ন করো।
07

বিজনেস কেস স্টাডি — Airline Reservation System

⏱ শেখার অংশ
কেস স্টাডি একটা এয়ারলাইন্স তাদের Passenger টেবিলে রাখে: Passenger_ID, Passport_Number, Email, Name, Flight_Number
কম্বিনেশনইউনিক?Minimal?ধরন
Passenger_IDহ্যাঁহ্যাঁCandidate KeyPrimary Key
Passport_Numberহ্যাঁহ্যাঁCandidate KeyAlternate Key
Emailহ্যাঁহ্যাঁCandidate KeyAlternate Key
Passenger_ID + Nameহ্যাঁনাশুধু Super Key
Passenger_ID + Flight_Numberহ্যাঁনাশুধু Super Key
NameনাKey নয় (দুইজনের নাম একই হতে পারে)
Flight_NumberনাKey নয় (একই ফ্লাইটে বহু যাত্রী)

সিদ্ধান্ত: Passenger_ID Primary Key, Passport_Number ও Email Alternate Key। Flight_Number একা Key নয়, তবে Passenger_ID + Flight_Number দিয়ে একটা নির্দিষ্ট "বুকিং" (কোন যাত্রী কোন ফ্লাইটে) ইউনিকভাবে চেনানো যায় — এটা একটা Composite Key।

Passengers (ER) 🔑 Passenger_ID (PK) 🔷 Passport_Number (AK) 🔷 Email (AK) Name 🔗 Flight_Number (FK, Composite অংশ)

ER ডায়াগ্রাম: 🔑 Primary, 🔷 Alternate, 🔗 Foreign Key (অন্য টেবিলের রেফারেন্স)

08

প্র্যাকটিক্যাল সেশন — MySQL Workbench / Google Colab

⏱ শেখার অংশ

ধাপ ১: ডাটাবেস ও টেবিল বানাও

step1.sql
CREATE DATABASE practice_super_key;
USE practice_super_key;

CREATE TABLE Students (
    Student_ID  INT AUTO_INCREMENT PRIMARY KEY,
    Email       VARCHAR(100) NOT NULL UNIQUE,
    Name        VARCHAR(100) NOT NULL,
    Department  VARCHAR(50)
);
✔ OUTPUT
Database and table created

ধাপ ২: রেকর্ড ইনসার্ট করো

step2.sql
INSERT INTO Students (Email, Name, Department) VALUES
('nabila@uni.edu.bd', 'Nabila Islam', 'CSE'),
('tanvir@uni.edu.bd', 'Tanvir Ahmed', 'EEE');
✔ OUTPUT
+------------+---------------------+---------------+------------+
| Student_ID | Email               | Name          | Department |
+------------+---------------------+---------------+------------+
| 1          | nabila@uni.edu.bd   | Nabila Islam  | CSE        |
| 2          | tanvir@uni.edu.bd   | Tanvir Ahmed  | EEE        |
+------------+---------------------+---------------+------------+

ধাপ ৩: কনসেপচুয়ালি Super Key খুঁজে বের করো

step3.sql — শুধু বিশ্লেষণ, কোনো নতুন constraint না
-- Student_ID একাই Candidate Key (তাই Super Key ও বটে)
-- Email একাই Candidate Key (তাই Super Key ও বটে)
-- Student_ID + Name = Super Key কিন্তু Candidate Key নয় (Name বাদ দেওয়া যেত)
-- Student_ID + Department = Super Key কিন্তু Candidate Key নয়

এখানে খেয়াল করো — এই ব্যাখ্যাগুলো কোনো SQL কমান্ড না, এগুলো ডিজাইন-পর্যায়ের বিশ্লেষণ যা আমরা কমেন্ট আকারে লিখে রাখলাম বোঝার সুবিধার জন্য।

ধাপ ৪: ডুপ্লিকেট দিয়ে যাচাই করো

step4.sql
INSERT INTO Students (Email, Name, Department)
VALUES ('nabila@uni.edu.bd', 'Fake Nabila', 'BBA');
✖ ERROR
ERROR 1062: Duplicate entry 'nabila@uni.edu.bd' for key 'Email'

এই এররটাই প্রমাণ করে Email একাই (কোনো অতিরিক্ত কলাম ছাড়াই) ইউনিকনেস বজায় রাখছে — অর্থাৎ এটা Candidate Key হিসেবে সঠিক প্রমাণিত হলো।

বিগিনার ভুল: প্রতিটা সম্ভাব্য Super Key-এর জন্য আলাদা constraint বানানোর চেষ্টা করা। এটা অপ্রয়োজনীয় — শুধু Candidate Key গুলোতেই constraint দরকার।
বেস্ট প্র্যাকটিস: ডিজাইনের সময় Super Key নিয়ে ভাবো (বোঝার জন্য), কিন্তু বাস্তবায়নের সময় শুধু Candidate Key (Primary + Alternate) নিয়ে কাজ করো।
09

সাধারণ বিগিনার ভুল

⏱ শেখার অংশ
ভুল ১: প্রতিটা Super Key-কেই Candidate Key ভাবা। মনে রাখো — Candidate Key হতে হলে minimal (সর্বনিম্ন) হতে হবে।
ভুল ২: Super Key ও Composite Key গুলিয়ে ফেলা। Composite Key মানে একাধিক কলাম মিলে ইউনিক (এবং minimal); Super Key মানে যেকোনো ইউনিক কম্বিনেশন (minimal হোক বা না হোক)।
ভুল ৩: Minimality-এর ধারণা ভুলে যাওয়া — মনে না রাখা যে একটা Key থেকে কলাম বাদ দিয়ে দেখতে হবে সেটা তখনও ইউনিক থাকে কিনা।
ভুল ৪: টেবিল ডিজাইনে অকারণে অতিরিক্ত কলাম যোগ করে "নিরাপদ" Key বানানোর চেষ্টা করা।
ভুল ৫: Alternate Key আর Super Key গুলিয়ে ফেলা — Alternate Key হলো নির্দিষ্ট, বাছাই না হওয়া Candidate Key; Super Key হলো একটা বিস্তৃত ধারণা যাতে অনেক non-minimal কম্বিনেশনও পড়ে।

ব্যবহারিক সমাধান: যেকোনো Key প্রস্তাব করার পর নিজেকে জিজ্ঞেস করো — "এখান থেকে কোনো কলাম বাদ দিলে কি এখনও ইউনিক থাকবে?" যদি উত্তর হ্যাঁ হয়, তাহলে সেটা Candidate Key না, শুধুই একটা Super Key।

10

ইন্ডাস্ট্রি বেস্ট প্র্যাকটিস

⏱ শেখার অংশ

Candidate Key খুঁজে বের করা

Database Architect প্রথমে সব সম্ভাব্য Super Key চিহ্নিত করেন, তারপর সেগুলো থেকে minimal (Candidate Key) গুলো বের করেন।

Primary Key বাছাই

Candidate Key-দের মধ্যে সবচেয়ে স্থিতিশীল ও ছোট-আকারেরটাকে Primary বানানো হয়।

Alternate Key সংরক্ষণ

বাকি Candidate Key-দের UNIQUE constraint দিয়ে সুরক্ষিত রাখা হয়, যাতে বাস্তব-জগতের ডুপ্লিকেট আটকানো যায়।

Super Key কেন সরাসরি SQL-এ থাকে না

Super Key মূলত একটা তাত্ত্বিক/বিশ্লেষণী ধারণা — এটা ডিজাইনের সময় চিন্তার হাতিয়ার, কিন্তু SQL শুধু চূড়ান্ত সিদ্ধান্ত (Primary/UNIQUE) বাস্তবায়ন করে।

11

ক্লাসরুম ইন্টারঅ্যাকটিভ অ্যাক্টিভিটি

⏱ শেখার অংশ

অ্যাক্টিভিটি ১ — সব Super Key খুঁজে বের করো

একটা "Book" টেবিলে কলাম আছে: ISBN, Book_ID, Title, Author। এখান থেকে যতগুলো সম্ভব Super Key লিস্ট করো।

অ্যাক্টিভিটি ২ — Candidate Key চিহ্নিত করো

উপরের Super Key তালিকা থেকে কোনগুলো আসলে minimal (Candidate Key), তা আলাদা করো।

অ্যাক্টিভিটি ৩ — সেরা Primary Key বাছো

Candidate Key গুলোর মধ্যে কোনটা Primary Key হওয়া উচিত এবং কেন, গ্রুপে আলোচনা করো।

অ্যাক্টিভিটি ৪ — অপ্রয়োজনীয় কলাম বাদ দাও

একটা non-minimal Super Key দেওয়া থাকবে (যেমন ISBN + Title + Author) — সেখান থেকে কোন কলামগুলো বাদ দিলে এটা Candidate Key হয়ে যাবে, বের করো।

অ্যাক্টিভিটি ৫ — Super Key vs Composite Key তুলনা

একটা "Enrollment" টেবিলে (Student_ID + Course_ID) কেন Composite Key, আর কেন এটা একইসাথে একটা Super Key ও — ব্যাখ্যা করো।

12

রিভিশন ও কুইজ

⏱ শেখার অংশ

দ্রুত রিভিশন নোট

  • Super Key = যেকোনো ইউনিক কলাম/কলাম-কম্বিনেশন (অতিরিক্ত কলাম সহ হতে পারে)
  • Candidate Key = সবচেয়ে ছোট (minimal) Super Key
  • Primary Key = Candidate Key থেকে বাছাই করা একমাত্র প্রধান কলাম
  • Alternate Key = বাছাই না হওয়া বাকি Candidate Key গুলো
  • সব Candidate Key-ই Super Key, কিন্তু সব Super Key Candidate Key নয়
  • SQL-এ সরাসরি "SUPER KEY" syntax নেই — এটা ডিজাইন-পর্যায়ের চিন্তার হাতিয়ার

ইন্টারঅ্যাকটিভ কুইজ

প্রশ্ন ১: নিচের কোনটা Super Key-এর সঠিক সংজ্ঞা?
(ক) শুধুমাত্র Primary Key (খ) শুধুমাত্র সবচেয়ে ছোট ইউনিক কলাম (গ) যেকোনো ইউনিক কলাম/কম্বিনেশন, অতিরিক্ত কলাম সহ হতে পারে (ঘ) শুধু Foreign Key
উত্তর: (গ) যেকোনো ইউনিক কলাম/কম্বিনেশন, অতিরিক্ত কলাম সহ হতে পারে
প্রশ্ন ২: Candidate Key কীভাবে Super Key থেকে আলাদা?
(ক) Candidate Key ইউনিক নয় (খ) Candidate Key হলো সবচেয়ে ছোট (minimal) Super Key (গ) Candidate Key সবসময় দুইটা কলাম নিয়ে গঠিত (ঘ) কোনো পার্থক্য নেই
উত্তর: (খ) Candidate Key হলো সবচেয়ে ছোট (minimal) Super Key
প্রশ্ন ৩: Student_ID + Name — এটা যদি Student_ID একাই ইউনিক হয়, তাহলে এটা কী?
(ক) Super Key, কিন্তু Candidate Key নয় (খ) Candidate Key (গ) Primary Key (ঘ) কোনো Key-ই না
উত্তর: (ক) Super Key, কিন্তু Candidate Key নয়
প্রশ্ন ৪: SQL-এ Super Key বাস্তবায়ন করার জন্য কোন কিওয়ার্ড ব্যবহার হয়?
(ক) SUPER KEY (খ) MULTI KEY (গ) কোনো সরাসরি কিওয়ার্ড নেই — এটা ডিজাইন-পর্যায়ের ধারণা (ঘ) COMBO KEY
উত্তর: (গ) কোনো সরাসরি কিওয়ার্ড নেই — এটা ডিজাইন-পর্যায়ের ধারণা
13

বোনাস ১ সম্পূর্ণ Database Key হায়ারার্কি

⏱ শেখার অংশ

নিচে সব ধরনের Key একসাথে দেখানো হলো, যাতে সম্পর্কটা স্পষ্ট বোঝা যায়:

Super Key Candidate Key Primary Key Alternate Key Foreign Key অন্য টেবিলে Primary Key রেফার করে Composite Key একাধিক কলাম মিলে minimal ইউনিক Composite Key নিজেও একটা Candidate Key হতে পারে, যদি সেটা minimal হয়

Super Key সবচেয়ে বড় সেট, তার ভেতরে Candidate Key, তার থেকেই Primary + Alternate; Foreign Key ও Composite Key পাশাপাশি ধারণা

কী নির্বাচনের সম্পূর্ণ ওয়ার্কফ্লো

সব সম্ভাব্য ইউনিক কম্বিনেশন = Super Keys Minimal গুলো বাছাই = Candidate Keys একটা বাছাই = Primary Key বাকিগুলো = Alternate Keys

সব ইউনিক কম্বিনেশন → minimal বাছাই → একটা Primary → বাকিরা Alternate

14

বোনাস ২ মিনি প্রজেক্ট — Airline Reservation System

⏱ শেখার অংশ

একসাথে সব ধরনের Key সহ একটা সম্পূর্ণ সিস্টেম বানাই।

airline_system.sql
CREATE TABLE Passengers (
    Passenger_ID     INT AUTO_INCREMENT PRIMARY KEY,
    Passport_Number  VARCHAR(20)  NOT NULL UNIQUE,
    Email            VARCHAR(100) NOT NULL UNIQUE,
    Name             VARCHAR(100) NOT NULL
);

CREATE TABLE Flights (
    Flight_Number    VARCHAR(10) PRIMARY KEY,
    Origin           VARCHAR(50),
    Destination      VARCHAR(50)
);

CREATE TABLE Bookings (
    Passenger_ID  INT,
    Flight_Number VARCHAR(10),
    Seat_Number   VARCHAR(5),
    PRIMARY KEY (Passenger_ID, Flight_Number),
    FOREIGN KEY (Passenger_ID) REFERENCES Passengers(Passenger_ID),
    FOREIGN KEY (Flight_Number) REFERENCES Flights(Flight_Number)
);
✔ OUTPUT
3 tables created: Passengers, Flights, Bookings

বিশ্লেষণ: Bookings টেবিলে (Passenger_ID, Flight_Number) একটা Composite Primary Key — এটাও একটা Candidate Key (minimal), এবং তাই একটা Super Key-ও বটে। আলাদাভাবে Passenger_ID একাই Bookings টেবিলে ইউনিক নয় (একজন যাত্রী একাধিক ফ্লাইট বুক করতে পারে), তাই এখানে দুইটা কলাম একসাথে দরকার।

15

বোনাস ৩ প্রফেশনাল ওয়ার্কফ্লো

⏱ শেখার অংশ

ধাপ ১ — বিজনেস রিকোয়ারমেন্ট বিশ্লেষণ

Database Architect বিজনেসের সব ডেটা এন্টিটি ও তাদের বৈশিষ্ট্য চিহ্নিত করেন।

ধাপ ২ — সব Super Key লিস্ট করা

যত কম্বিনেশন ইউনিকভাবে একটা রেকর্ড চেনাতে পারে, সবগুলো কাগজে/ডকুমেন্টে লিস্ট করা হয়।

ধাপ ৩ — Minimal করে Candidate Key বের করা

প্রতিটা Super Key থেকে অপ্রয়োজনীয় কলাম বাদ দিয়ে minimal সেট বের করা হয়।

ধাপ ৪ — Primary Key চূড়ান্ত করা

DBA ও Architect মিলে সবচেয়ে স্থিতিশীল, ছোট Candidate Key-কে Primary হিসেবে বাছেন এবং SQL-এ বাস্তবায়ন করেন।

16

বোনাস ৪ শীর্ষ ৩০টি বিগিনার ইন্টারভিউ প্রশ্ন

⏱ শেখার অংশ
17

শেষ ক্লাস এক্সারসাইজ ও হোমওয়ার্ক

⏱ হোমওয়ার্ক

ক্লাসরুম এক্সারসাইজ

একটা "Hospital" ডাটাবেসে Patient টেবিলের জন্য (Patient_ID, National_ID, Health_Card_Number, Phone_Number, Name) কলাম দেওয়া থাকলে — সব সম্ভাব্য Super Key, তার থেকে Candidate Key, এবং শেষে Primary+Alternate Key বের করে টেবিল আকারে জমা দাও।

হোমওয়ার্ক অ্যাসাইনমেন্ট

১. একটা "E-commerce Order System"-এর জন্য কমপক্ষে ৫টা Super Key, তার মধ্যে থেকে Candidate Key, এবং শেষে Primary ও Alternate Key নির্ধারণ করো।

২. একটা Composite Primary Key সহ একটা টেবিল ডিজাইন করো (যেমন Enrollment বা Booking), এবং ব্যাখ্যা করো কেন এটা Composite দরকার হলো।

৩. লিখে ব্যাখ্যা করো — Super Key আর Candidate Key-এর মধ্যে পার্থক্য নিজের ভাষায়, একটা নতুন (ক্লাসে ব্যবহার না হওয়া) উদাহরণ দিয়ে।