কেন 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।
Super Key আসলে কী?
প্রথমে বুঝি uniqueness মানে কী — একটা কলাম বা কলাম-কম্বিনেশন "ইউনিক" হয় যদি টেবিলের কোনো দুইটা সারিতে (row) সেই মানগুলো একই না হয়।
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 আছে যেটা একাই ইউনিক করে দেয়।
Minimal অংশের সাথে অতিরিক্ত কলাম যোগ করলেও ফলাফল থেকে যায় Super Key — শুধু আর "সর্বনিম্ন" থাকে না।
Super Key vs Candidate Key
Candidate Key হলো সবচেয়ে ছোট (minimal) Super Key — মানে এমন Super Key যেখান থেকে আর কোনো কলাম বাদ দেওয়া গেলে সেটা আর ইউনিক থাকবে না।
| তুলনার বিষয় | Super Key | Candidate Key |
|---|---|---|
| কলামের সংখ্যা | এক বা একাধিক, সীমাহীন কম্বিনেশন | সর্বনিম্ন প্রয়োজনীয় কলাম |
| অতিরিক্ত attribute | থাকতে পারে | থাকে না |
| Minimality (সর্বনিম্নতা) | না | হ্যাঁ |
| এফিশিয়েন্সি | কম (বাড়তি কলাম বহন করে) | বেশি (ঠিক যতটুকু দরকার) |
| ব্যবহারিক প্রয়োগ | মূলত থিওরিটিক্যাল/ডিজাইন-পর্যায়ে ব্যবহৃত হয় | Primary/Alternate Key নির্বাচনের ভিত্তি |
Super Key vs Candidate Key vs Primary Key vs Alternate Key
| বৈশিষ্ট্য | Super Key | Candidate Key | Primary Key | Alternate Key |
|---|---|---|---|---|
| ইউনিক? | হ্যাঁ | হ্যাঁ | হ্যাঁ | হ্যাঁ |
| Minimal (সর্বনিম্ন)? | না, বাধ্যতামূলক নয় | হ্যাঁ | হ্যাঁ | হ্যাঁ |
| সংখ্যা / টেবিল | অনেক (সব কম্বিনেশন) | এক বা একাধিক | ঠিক ১টা | ০ বা একাধিক |
| নির্বাচিত হয় কীভাবে | স্বয়ংক্রিয়ভাবে সব সম্ভাব্য কম্বিনেশন | Super Key থেকে minimal গুলো | Candidate Key থেকে ডিজাইনার বাছেন | বাছাই না হওয়া বাকি Candidate Key |
Super Key → (minimal করলে) Candidate Key → (একটা বাছলে) Primary Key + (বাকিগুলো) Alternate Key
বাস্তব-জগতের উদাহরণ
উদাহরণ ১ — 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 বাদ দিলেও কাজ চলত।
SQL ডেমোনস্ট্রেশন
একটা গুরুত্বপূর্ণ কথা — SQL-এ সরাসরি কোনো SUPER KEY কিওয়ার্ড নেই। Super Key একটা ডিজাইন-পর্যায়ের কনসেপ্ট — এটা আমরা মাথায় রেখে ডিজাইন করি, কিন্তু SQL-এ শুধু Primary Key আর UNIQUE constraint লিখি।
ধাপ ১ — ডাটাবেস ও টেবিল তৈরি
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) );
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 INTO Students (Email, Name, Department) VALUES ('anika@uni.edu.bd', 'Anika Rahman', 'CSE');
1 row inserted (Student_ID = 1, auto-generated)
INSERT INTO Students (Email, Name, Department) VALUES ('anika@uni.edu.bd', 'Another Anika', 'EEE');
ERROR 1062 (23000): Duplicate entry 'anika@uni.edu.bd' for key 'Email'
এই এররটা প্রমাণ করছে যে Email একাই ইউনিকনেস নিশ্চিত করছে (Candidate Key হিসেবে কাজ করছে) — তাই এটাকে অন্য কোনো কলামের সাথে জোড়া লাগানোর দরকার নেই।
বিজনেস কেস স্টাডি — Airline Reservation System
Passenger_ID, Passport_Number, Email, Name, Flight_Number।
| কম্বিনেশন | ইউনিক? | Minimal? | ধরন |
|---|---|---|---|
| Passenger_ID | হ্যাঁ | হ্যাঁ | Candidate Key → Primary Key |
| Passport_Number | হ্যাঁ | হ্যাঁ | Candidate Key → Alternate Key |
| হ্যাঁ | হ্যাঁ | Candidate Key → Alternate 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।
ER ডায়াগ্রাম: 🔑 Primary, 🔷 Alternate, 🔗 Foreign Key (অন্য টেবিলের রেফারেন্স)
প্র্যাকটিক্যাল সেশন — MySQL Workbench / Google Colab
ধাপ ১: ডাটাবেস ও টেবিল বানাও
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) );
Database and table created
ধাপ ২: রেকর্ড ইনসার্ট করো
INSERT INTO Students (Email, Name, Department) VALUES ('nabila@uni.edu.bd', 'Nabila Islam', 'CSE'), ('tanvir@uni.edu.bd', 'Tanvir Ahmed', 'EEE');
+------------+---------------------+---------------+------------+ | Student_ID | Email | Name | Department | +------------+---------------------+---------------+------------+ | 1 | nabila@uni.edu.bd | Nabila Islam | CSE | | 2 | tanvir@uni.edu.bd | Tanvir Ahmed | EEE | +------------+---------------------+---------------+------------+
ধাপ ৩: কনসেপচুয়ালি Super Key খুঁজে বের করো
-- 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 কমান্ড না, এগুলো ডিজাইন-পর্যায়ের বিশ্লেষণ যা আমরা কমেন্ট আকারে লিখে রাখলাম বোঝার সুবিধার জন্য।
ধাপ ৪: ডুপ্লিকেট দিয়ে যাচাই করো
INSERT INTO Students (Email, Name, Department) VALUES ('nabila@uni.edu.bd', 'Fake Nabila', 'BBA');
ERROR 1062: Duplicate entry 'nabila@uni.edu.bd' for key 'Email'
এই এররটাই প্রমাণ করে Email একাই (কোনো অতিরিক্ত কলাম ছাড়াই) ইউনিকনেস বজায় রাখছে — অর্থাৎ এটা Candidate Key হিসেবে সঠিক প্রমাণিত হলো।
সাধারণ বিগিনার ভুল
ব্যবহারিক সমাধান: যেকোনো Key প্রস্তাব করার পর নিজেকে জিজ্ঞেস করো — "এখান থেকে কোনো কলাম বাদ দিলে কি এখনও ইউনিক থাকবে?" যদি উত্তর হ্যাঁ হয়, তাহলে সেটা Candidate Key না, শুধুই একটা Super Key।
ইন্ডাস্ট্রি বেস্ট প্র্যাকটিস
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) বাস্তবায়ন করে।
ক্লাসরুম ইন্টারঅ্যাকটিভ অ্যাক্টিভিটি
অ্যাক্টিভিটি ১ — সব 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 ও — ব্যাখ্যা করো।
রিভিশন ও কুইজ
দ্রুত রিভিশন নোট
- 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 নেই — এটা ডিজাইন-পর্যায়ের চিন্তার হাতিয়ার
ইন্টারঅ্যাকটিভ কুইজ
(ক) শুধুমাত্র Primary Key (খ) শুধুমাত্র সবচেয়ে ছোট ইউনিক কলাম (গ) যেকোনো ইউনিক কলাম/কম্বিনেশন, অতিরিক্ত কলাম সহ হতে পারে (ঘ) শুধু Foreign Key
(ক) Candidate Key ইউনিক নয় (খ) Candidate Key হলো সবচেয়ে ছোট (minimal) Super Key (গ) Candidate Key সবসময় দুইটা কলাম নিয়ে গঠিত (ঘ) কোনো পার্থক্য নেই
(ক) Super Key, কিন্তু Candidate Key নয় (খ) Candidate Key (গ) Primary Key (ঘ) কোনো Key-ই না
(ক) SUPER KEY (খ) MULTI KEY (গ) কোনো সরাসরি কিওয়ার্ড নেই — এটা ডিজাইন-পর্যায়ের ধারণা (ঘ) COMBO KEY
বোনাস ১ সম্পূর্ণ Database Key হায়ারার্কি
নিচে সব ধরনের Key একসাথে দেখানো হলো, যাতে সম্পর্কটা স্পষ্ট বোঝা যায়:
Super Key সবচেয়ে বড় সেট, তার ভেতরে Candidate Key, তার থেকেই Primary + Alternate; Foreign Key ও Composite Key পাশাপাশি ধারণা
কী নির্বাচনের সম্পূর্ণ ওয়ার্কফ্লো
সব ইউনিক কম্বিনেশন → minimal বাছাই → একটা Primary → বাকিরা Alternate
বোনাস ২ মিনি প্রজেক্ট — Airline Reservation System
একসাথে সব ধরনের Key সহ একটা সম্পূর্ণ সিস্টেম বানাই।
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) );
3 tables created: Passengers, Flights, Bookings
বিশ্লেষণ: Bookings টেবিলে (Passenger_ID, Flight_Number) একটা Composite Primary Key — এটাও একটা Candidate Key (minimal), এবং তাই একটা Super Key-ও বটে। আলাদাভাবে Passenger_ID একাই Bookings টেবিলে ইউনিক নয় (একজন যাত্রী একাধিক ফ্লাইট বুক করতে পারে), তাই এখানে দুইটা কলাম একসাথে দরকার।
বোনাস ৩ প্রফেশনাল ওয়ার্কফ্লো
ধাপ ১ — বিজনেস রিকোয়ারমেন্ট বিশ্লেষণ
Database Architect বিজনেসের সব ডেটা এন্টিটি ও তাদের বৈশিষ্ট্য চিহ্নিত করেন।
ধাপ ২ — সব Super Key লিস্ট করা
যত কম্বিনেশন ইউনিকভাবে একটা রেকর্ড চেনাতে পারে, সবগুলো কাগজে/ডকুমেন্টে লিস্ট করা হয়।
ধাপ ৩ — Minimal করে Candidate Key বের করা
প্রতিটা Super Key থেকে অপ্রয়োজনীয় কলাম বাদ দিয়ে minimal সেট বের করা হয়।
ধাপ ৪ — Primary Key চূড়ান্ত করা
DBA ও Architect মিলে সবচেয়ে স্থিতিশীল, ছোট Candidate Key-কে Primary হিসেবে বাছেন এবং SQL-এ বাস্তবায়ন করেন।
বোনাস ৪ শীর্ষ ৩০টি বিগিনার ইন্টারভিউ প্রশ্ন
শেষ ক্লাস এক্সারসাইজ ও হোমওয়ার্ক
ক্লাসরুম এক্সারসাইজ
একটা "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-এর মধ্যে পার্থক্য নিজের ভাষায়, একটা নতুন (ক্লাসে ব্যবহার না হওয়া) উদাহরণ দিয়ে।