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

01

কেন নিয়ম দরকার?

⏱ শেখার অংশ
গল্প দিয়ে শুরু ধরো, একটা স্কুল কোনো নিয়ম ছাড়াই স্টুডেন্টের তথ্য রাখছে। কী কী সমস্যা হতে পারে?
  • দুইজন স্টুডেন্টের একই Student ID হয়ে যেতে পারে
  • কারো নামের ঘর খালি থেকে যেতে পারে
  • কারো নাম্বার -১৫ হয়ে যেতে পারে (যা অসম্ভব)
  • কেউ এমন একটা ক্লাসে ভর্তি দেখাতে পারে যেই ক্লাসটাই আসলে নেই
🤔 নিজেকে জিজ্ঞেস করো
  • এরকম একটা ডাটাবেসের উপর কি ভরসা করা যায়?
  • দুইজন স্টুডেন্টের কি একই Roll Number থাকা উচিত?
  • একজন স্টুডেন্টের বয়স কি -১০ হতে পারে?
🏦 আরও এনালজি একটা ব্যাংকের নিয়ম — অ্যাকাউন্ট ব্যালেন্স কখনো ঋণাত্মক (negative) হতে পারবে না, প্রতিটা অ্যাকাউন্টের নাম্বার ইউনিক হতে হবে। একটা হাসপাতালের নিয়ম — প্রতিটা রোগীর Patient ID ইউনিক হতে হবে, বয়স কখনো ০-এর কম হতে পারবে না।

উত্তর স্পষ্ট — না, এরকম ডাটাবেসের উপর ভরসা করা যায় না। প্রতিটা প্রতিষ্ঠানের যেমন নিয়ম থাকে, ডাটাবেসেরও নিয়ম দরকার, যাতে ভুল ডেটা কখনোই ঢুকতে না পারে। এই নিয়মগুলোকেই SQL-এ বলা হয় Constraints

Sequence: Keys Modules 25–29 আগে শেখা · এই Module 30 = constraint hub (NOT NULL / UNIQUE / CHECK / DEFAULT focus) · PK/FK deep = Module 25–26।

বিজনেস নিয়ম ডাটাবেস নিয়ম SQL Constraints

বিজনেস নিয়ম → ডাটাবেস নিয়ম → SQL Constraints হিসেবে বাস্তবায়ন

02

SQL Constraints আসলে কী?

⏱ শেখার অংশ

Constraint হলো একটা কলামের উপর দেওয়া বিধিনিষেধ (rule), যা নিশ্চিত করে যে সেই কলামে শুধু বৈধ (valid) ডেটাই ঢুকবে। ভুল ডেটা ঢোকানোর চেষ্টা করলে ডাটাবেস নিজে থেকেই সেটা প্রত্যাখ্যান (reject) করে দেয়।

Data Type vs Constraint — পার্থক্য কী?

বিষয়Data TypeConstraint
কাজকলামে কী ধরনের ডেটা থাকবে তা নির্ধারণ করে (সংখ্যা, লেখা, তারিখ)সেই ডেটার উপর অতিরিক্ত নিয়ম চাপায়
উদাহরণINT, VARCHAR, DATENOT NULL, UNIQUE, CHECK
প্রশ্নের ধরন"এটা কী ধরনের তথ্য?""এই তথ্য কি বৈধ?"
📦 এনালজি Data Type হলো বাক্সের আকার — বলে দেয় ভেতরে কী ধরনের জিনিস রাখা যাবে (বই, নাকি খেলনা)। Constraint হলো বাক্সের গায়ে লেখা নিয়ম — "খালি রাখা যাবে না", "একই জিনিস দুইবার রাখা যাবে না"।

Constraint কেন গুরুত্বপূর্ণ? এটা ডেটার মান (quality) বাড়ায়, ভুল প্রবেশ আটকায়, এবং ভবিষ্যতে রিপোর্ট বা সিদ্ধান্ত নেওয়ার সময় ডেটার উপর ভরসা করা যায়।

03

NOT NULL Constraint

⏱ শেখার অংশ
📝 এনালজি একটা ভর্তি ফরমে "নাম" ঘরটা কখনো খালি রাখা যায় না — পূরণ করতেই হবে। কিন্তু "মধ্যম নাম" (Middle Name) ঘরটা কেউ খালি রাখতে পারে, কারণ সবার মধ্যম নাম থাকে না।

কিছু কলাম কখনোই খালি (NULL) থাকতে পারে না — যেমন Student Name, Employee ID, Product Name। এগুলোতে NOT NULL constraint দিতে হয়।

not_null.sqlMySQL
CREATE TABLE Students (
    Student_ID INT AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL
);
✔ OUTPUT
Table 'Students' created
violate_not_null.sql
INSERT INTO Students (Name) VALUES (NULL);
✖ ERROR
ERROR 1048 (23000): Column 'Name' cannot be null

লাইন-বাই-লাইন: Name VARCHAR(100) NOT NULL — এখানে বলা হচ্ছে Name কলামে অবশ্যই টেক্সট থাকতে হবে, খালি রাখা যাবে না। NULL পাঠানোর চেষ্টা করলেই MySQL এরর দেখায়।

বিগিনার ভুল: "" (খালি স্ট্রিং) আর NULL গুলিয়ে ফেলা — খালি স্ট্রিং টেকনিক্যালি একটা মান, কিন্তু NULL মানে "কোনো মানই নেই"। NOT NULL শুধু NULL আটকায়, খালি স্ট্রিং আটকায় না।
04

UNIQUE Constraint

⏱ শেখার অংশ
🪪 এনালজি National ID, Passport Number, University Email — এগুলো কখনো দুইজনের একই হতে পারে না।
unique.sql
CREATE TABLE Students (
    Student_ID INT AUTO_INCREMENT PRIMARY KEY,
    Email VARCHAR(100) UNIQUE
);

INSERT INTO Students (Email) VALUES ('nabila@uni.edu.bd');
INSERT INTO Students (Email) VALUES ('nabila@uni.edu.bd');
✖ ERROR (দ্বিতীয় INSERT-এ)
ERROR 1062 (23000): Duplicate entry 'nabila@uni.edu.bd' for key 'Email'

UNIQUE vs PRIMARY KEY

বিষয়UNIQUEPRIMARY KEY
প্রতি টেবিলে সংখ্যাএকাধিক থাকতে পারেঠিক ১টা
NULL অনুমোদনহ্যাঁ (একাধিক NULL, MySQL-এ)না, কখনোই না
উদ্দেশ্যডুপ্লিকেট আটকানোরো-কে ইউনিকভাবে শনাক্ত করা (মূল পরিচয়)
বেস্ট প্র্যাকটিস: Email বা Registration Number-এর মতো "বাস্তব-জগতের ইউনিক তথ্য" UNIQUE দাও; Primary Key রাখো সিস্টেম-জেনারেটেড ছোট আইডির জন্য।
05

PRIMARY KEY — pointer

⏱ ২ মিনিট

Primary Key = টেবিলের মূল শনাক্তকারী · সাধারণত NOT NULL + UNIQUE

উদাহরণ স্মরণ: Order_ID INT AUTO_INCREMENT PRIMARY KEY

Deep dive ইতিমধ্যে শেখা — Module 25 · sql_primary_key_bangla.html। এই module-এ পুনরায় শেখানো হচ্ছে না।
06

FOREIGN KEY — pointer

⏱ ২ মিনিট

Foreign Key = child table-এর column parent table-এর key-কে reference করে (referential integrity)।

স্মরণ: FOREIGN KEY (Customer_ID) REFERENCES Customers(Customer_ID)

Deep dive ইতিমধ্যে শেখা — Module 26 · sql_foreign_key_bangla.html। এখানে focus = অন্য constraints (NOT NULL, UNIQUE, CHECK, DEFAULT)।
07

CHECK Constraint

⏱ শেখার অংশ
📏 এনালজি পরীক্ষার নাম্বার কখনো ০-১০০ এর বাইরে হতে পারে না। বয়স কখনো ঋণাত্মক হতে পারে না। বেতন কখনো ০ বা তার কম হতে পারে না।
check.sql
CREATE TABLE Students (
    Student_ID INT AUTO_INCREMENT PRIMARY KEY,
    Age  INT CHECK (Age >= 0),
    Marks INT CHECK (Marks BETWEEN 0 AND 100)
);

INSERT INTO Students (Age, Marks) VALUES (-5, 150);
✖ ERROR
ERROR 3819 (HY000): Check constraint 'students_chk_1' is violated

Age = -5 এবং Marks = 150 — দুইটাই বাস্তবে অসম্ভব মান, তাই CHECK constraint সেগুলো আটকে দিয়েছে।

বিগিনার ভুল: ভুল লজিক দিয়ে CHECK লেখা, যেমন CHECK (Age > 0) লিখলে বয়স ০ (নবজাতক) বাদ পড়ে যাবে — লজিকটা ব্যবসার বাস্তবতার সাথে মিলিয়ে লিখতে হবে।
08

DEFAULT Constraint

⏱ শেখার অংশ
🌍 এনালজি একটা ফরমে যদি "দেশ" ঘরে কিছু না লেখা হয়, তাহলে সিস্টেম নিজে থেকেই "Bangladesh" বসিয়ে দিতে পারে — যদি বেশিরভাগ ইউজারই বাংলাদেশ থেকে হয়।
default.sql
CREATE TABLE Students (
    Student_ID INT AUTO_INCREMENT PRIMARY KEY,
    Country VARCHAR(50) DEFAULT 'Bangladesh',
    Status  VARCHAR(20) DEFAULT 'Active',
    Admission_Date DATE DEFAULT (CURRENT_DATE)
);

INSERT INTO Students () VALUES ();
✔ OUTPUT
+------------+-------------+--------+-----------------+
| Student_ID | Country     | Status | Admission_Date  |
+------------+-------------+--------+-----------------+
| 1          | Bangladesh  | Active | 2026-07-20      |
+------------+-------------+--------+-----------------+

কোনো মান না দিলেও DEFAULT-এ বলে দেওয়া মানগুলো নিজে থেকেই বসে গেছে।

09

AUTO_INCREMENT

⏱ শেখার অংশ
🎫 এনালজি টোকেন কাউন্টারে তুমি নিজে নাম্বার বসাও না — মেশিন নিজে থেকেই পরের নাম্বারটা দেয়। AUTO_INCREMENT ঠিক এভাবেই কাজ করে।
auto_increment.sql
CREATE TABLE Students (
    Student_ID INT AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(100)
);

INSERT INTO Students (Name) VALUES ('Nabila'), ('Tanvir');
✔ OUTPUT
+------------+---------+
| Student_ID | Name    |
+------------+---------+
| 1          | Nabila  |
| 2          | Tanvir  |
+------------+---------+

আমরা Student_ID-তে কোনো মান দিইনি, MySQL নিজে থেকেই ১, ২ বসিয়ে দিয়েছে।

10

বিজনেস কেস স্টাডি — Student Management System

⏱ শেখার অংশ

এখন সবগুলো Constraint একসাথে ব্যবহার করে একটা সম্পূর্ণ টেবিল বানাই।

student_management.sql
CREATE TABLE Departments (
    Department_ID INT AUTO_INCREMENT PRIMARY KEY,
    Dept_Name VARCHAR(50) NOT NULL UNIQUE
);

CREATE TABLE Students (
    Student_ID     INT AUTO_INCREMENT PRIMARY KEY,
    Name           VARCHAR(100) NOT NULL,
    Email          VARCHAR(100) NOT NULL UNIQUE,
    Age            INT CHECK (Age >= 0),
    Department_ID  INT,
    Admission_Date DATE DEFAULT (CURRENT_DATE),
    Status         VARCHAR(20) DEFAULT 'Active',
    FOREIGN KEY (Department_ID) REFERENCES Departments(Department_ID)
);
✔ OUTPUT
2 tables created successfully
কলামConstraintকেন?
Student_IDPRIMARY KEY AUTO_INCREMENTমূল পরিচয়, স্বয়ংক্রিয়ভাবে বাড়ে
NameNOT NULLনাম কখনো খালি থাকতে পারে না
EmailNOT NULL UNIQUEপ্রতিটা ইমেইল ভিন্ন হতে হবে
AgeCHECKঋণাত্মক বয়স অসম্ভব
Department_IDFOREIGN KEYশুধু বিদ্যমান ডিপার্টমেন্টেই ভর্তি সম্ভব
Admission_DateDEFAULTনা দিলে আজকের তারিখ বসবে
StatusDEFAULTনা দিলে 'Active' বসবে
Departments 🔑 Department_ID Students 🔑 Student_ID | Name (NN) Email (UQ) | Age (CHK) 🔗 Department_ID (FK)

ER ডায়াগ্রাম — সব Constraint এক নজরে

11

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

⏱ শেখার অংশ

ধাপ ১: বৈধ রেকর্ড ইনসার্ট করো

step1.sql
INSERT INTO Departments (Dept_Name) VALUES ('CSE');

INSERT INTO Students (Name, Email, Age, Department_ID)
VALUES ('Anika Rahman', 'anika@uni.edu.bd', 20, 1);
✔ OUTPUT
1 department, 1 student inserted successfully
Admission_Date auto-filled with today's date, Status = 'Active'

ধাপ ২: অবৈধ রেকর্ড দিয়ে চেষ্টা করো

step2.sql
INSERT INTO Students (Name, Email, Age, Department_ID)
VALUES (NULL, 'anika@uni.edu.bd', -5, 99);
✖ ERROR
ERROR 1048: Column 'Name' cannot be null

এখানে একসাথে তিনটা ভুল আছে — NULL Name, ডুপ্লিকেট Email, ঋণাত্মক Age, এবং অস্তিত্বহীন Department_ID। MySQL প্রথম যেটা পায় সেই এররটা আগে দেখায়।

ধাপ ৩: ভুল ঠিক করো

step3.sql
INSERT INTO Students (Name, Email, Age, Department_ID)
VALUES ('Karim Hossain', 'karim@uni.edu.bd', 21, 1);
✔ OUTPUT
1 row inserted successfully
বিগিনার ভুল: Foreign Key যোগ করার আগে Parent টেবিলে ডেটা না থাকা — Department_ID = 1 কাজ করার আগে Departments টেবিলে অন্তত একটা রেকর্ড থাকতে হবে।
বেস্ট প্র্যাকটিস: সবসময় Parent Table আগে তৈরি করো এবং তাতে ডেটা ঢোকাও, তারপর Child Table-এ Foreign Key দিয়ে রেফারেন্স দাও।
12

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

⏱ শেখার অংশ
ভুল ১: UNIQUE আর PRIMARY KEY গুলিয়ে ফেলা — মনে রাখো, Primary Key কখনো NULL হয় না আর একটাই থাকে।
ভুল ২: NOT NULL দিতে ভুলে যাওয়া — ফলে গুরুত্বপূর্ণ কলাম খালি থেকে যায়।
ভুল ৩: ভুল CHECK কন্ডিশন লেখা — যেমন Marks-এর জন্য CHECK (Marks > 100) লিখলে উল্টো লজিক হয়ে যায়।
ভুল ৪: DEFAULT ভুলভাবে ব্যবহার করা — যেমন এমন কলামে DEFAULT দেওয়া যেটাতে আসলে প্রতিবার আলাদা মান দরকার।
ভুল ৫: Parent Table তৈরির আগেই Foreign Key দিয়ে Child Table বানানোর চেষ্টা।
ভুল ৬: ডেটা টাইপ না মেলানো — যেমন Foreign Key কলাম INT আর Parent-এর Primary Key VARCHAR হলে এরর হবে।
ভুল ৭: Constraint এরর দেখে সেটা উপেক্ষা করা, কারণটা না বুঝেই এড়িয়ে যাওয়া।
13

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

⏱ শেখার অংশ

Data Validation

Constraint দিয়ে অ্যাপ্লিকেশন-লেভেলের ভুলের আগেই ডাটাবেস-লেভেলে ডেটা যাচাই করা হয়।

Data Integrity

সঠিক Constraint নিশ্চিত করে ডেটা সবসময় নির্ভরযোগ্য (trustworthy) থাকে।

Referential Integrity

Foreign Key নিশ্চিত করে দুই টেবিলের মধ্যে সম্পর্ক সবসময় বৈধ থাকে।

নামকরণ ও ডকুমেন্টেশন

প্রতিটা Constraint-এর একটা স্পষ্ট নাম দেওয়া ভালো (যেমন chk_age_positive), যাতে এরর মেসেজেও বোঝা যায় কোন নিয়ম ভাঙা হয়েছে।

পারফরম্যান্স বিবেচনা: প্রতিটা Constraint (বিশেষ করে UNIQUE, FOREIGN KEY) ইনডেক্স তৈরি করে, যা যাচাই করতে সামান্য সময় নেয় — কিন্তু ডেটা সঠিকতার জন্য এই খরচ মূল্যবান।

14

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

⏱ শেখার অংশ

অ্যাক্টিভিটি ১ — সঠিক Constraint বাছো

"বয়স কখনো ০-এর কম হতে পারবে না" — এটা কোন Constraint দিয়ে বাস্তবায়ন হবে?

অ্যাক্টিভিটি ২ — ভুল খুঁজে বের করো

একটা CREATE TABLE কোয়েরি দেওয়া থাকবে যেখানে ইচ্ছাকৃত ভুল আছে (যেমন দুইটা PRIMARY KEY) — সেটা খুঁজে বের করো।

অ্যাক্টিভিটি ৩ — ফলাফল অনুমান করো

একটা INSERT স্টেটমেন্ট দেওয়া হবে — বলো এটা সফল হবে নাকি এরর দেবে, এবং কেন।

অ্যাক্টিভিটি ৪ — বিজনেস নিয়ম ম্যাচ করো

"প্রতিটা বইয়ের ISBN আলাদা হতে হবে" — এই নিয়মের সাথে কোন Constraint মেলে?

অ্যাক্টিভিটি ৫ — নিজে ডিজাইন করো

একটা Library বা Hospital ডাটাবেসের জন্য সবগুলো Constraint সহ একটা টেবিল ডিজাইন করো।

15

রিভিশন ও কুইজ

⏱ শেখার অংশ

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

  • NOT NULL — কলাম খালি রাখা যাবে না
  • UNIQUE — ডুপ্লিকেট মান নিষিদ্ধ, একাধিক UNIQUE কলাম থাকতে পারে
  • PRIMARY KEY — NOT NULL + UNIQUE, প্রতি টেবিলে একটাই
  • FOREIGN KEY — অন্য টেবিলের Primary Key-কে রেফার করে, সম্পর্ক বৈধ রাখে
  • CHECK — নির্দিষ্ট শর্ত পূরণ না করলে মান প্রত্যাখ্যাত হয়
  • DEFAULT — মান না দিলে স্বয়ংক্রিয়ভাবে একটা পূর্বনির্ধারিত মান বসে
  • AUTO_INCREMENT — নাম্বার নিজে থেকেই বাড়ে, সাধারণত Primary Key-এর সাথে ব্যবহৃত হয়

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

প্রশ্ন ১: কোন Constraint নিশ্চিত করে যে একটা কলাম কখনো খালি থাকবে না?
(ক) UNIQUE (খ) CHECK (গ) NOT NULL (ঘ) DEFAULT
উত্তর: (গ) NOT NULL
প্রশ্ন ২: একটা টেবিলে সর্বোচ্চ কয়টা PRIMARY KEY থাকতে পারে?
(ক) যত ইচ্ছা (খ) ১টা (গ) ২টা (ঘ) ০টা
উত্তর: (খ) ১টা
প্রশ্ন ৩: Marks সবসময় ০ থেকে ১০০-এর মধ্যে রাখতে কোন Constraint ব্যবহার হবে?
(ক) UNIQUE (খ) DEFAULT (গ) FOREIGN KEY (ঘ) CHECK
উত্তর: (ঘ) CHECK
প্রশ্ন ৪: Orders টেবিলের Customer_ID, Customers টেবিলের Customer_ID-কে রেফার করছে — এটা কোন Constraint?
(ক) FOREIGN KEY (খ) PRIMARY KEY (গ) CHECK (ঘ) NOT NULL
উত্তর: (ক) FOREIGN KEY
16

বোনাস ১ SQL Constraints-এর সংক্ষিপ্ত ইতিহাস

⏱ শেখার অংশ
১৯৭০ — E.F. Codd রিলেশনাল মডেল প্রস্তাব করেন, যেখানে ডেটা ইন্টেগ্রিটির ধারণা প্রথম আসে।
১৯৭০-এর দশক — প্রথমদিকের ডাটাবেসগুলো শুধু কাঁচা ডেটা (raw data) সংরক্ষণ করত, কোনো ভ্যালিডেশন ছাড়াই।
১৯৮০-এর দশক — বাণিজ্যিক RDBMS-এ PRIMARY KEY, UNIQUE, NOT NULL constraint যুক্ত হয়।
১৯৮৯ — SQL-89 স্ট্যান্ডার্ডে প্রথমবার Constraint ধারণা আনুষ্ঠানিকভাবে অন্তর্ভুক্ত হয়।
১৯৯২ — SQL-92 স্ট্যান্ডার্ডে CHECK, FOREIGN KEY, REFERENTIAL INTEGRITY সম্পূর্ণভাবে সংজ্ঞায়িত হয়।
বর্তমান — MySQL, PostgreSQL সহ সব আধুনিক ডাটাবেসে এই Constraint গুলো ডেটা কোয়ালিটি নিশ্চিতের মূল হাতিয়ার।
17

বোনাস ২ Constraint মাইন্ড ম্যাপ

⏱ শেখার অংশ
Constraints NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT AUTO_INCREMENT

সাতটা মূল Constraint এক নজরে

তুলনা টেবিলসমূহ

PRIMARY KEYUNIQUE
১টা মাত্র, NULL অনুমোদন নেইএকাধিক থাকতে পারে, NULL অনুমোদিত হতে পারে
PRIMARY KEYFOREIGN KEY
নিজের টেবিলের রো ইউনিকভাবে চেনায়অন্য টেবিলের Primary Key-কে রেফার করে সম্পর্ক তৈরি করে
NOT NULLCHECK
শুধু "খালি না থাকা" নিশ্চিত করেনির্দিষ্ট শর্ত (যেমন রেঞ্জ) মেনে চলা নিশ্চিত করে
DEFAULTAUTO_INCREMENT
মান না দিলে একটা নির্দিষ্ট (fixed) মান বসায়মান না দিলে ক্রমবর্ধমান (increasing) সংখ্যা বসায়
Data TypeConstraint
ডেটার ধরন ঠিক করে (INT, VARCHAR)ডেটার বৈধতা (validity) ঠিক করে (NOT NULL, CHECK)
18

বোনাস ৩ মিনি প্রজেক্ট — Hospital Management System

⏱ শেখার অংশ
hospital.sql
CREATE TABLE Doctors (
    Doctor_ID INT AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL
);

CREATE TABLE Patients (
    Patient_ID    INT AUTO_INCREMENT PRIMARY KEY,
    Name          VARCHAR(100) NOT NULL,
    Age           INT CHECK (Age >= 0),
    National_ID   VARCHAR(20) NOT NULL UNIQUE,
    Doctor_ID     INT,
    Admit_Date    DATE DEFAULT (CURRENT_DATE),
    Status        VARCHAR(20) DEFAULT 'Admitted',
    FOREIGN KEY (Doctor_ID) REFERENCES Doctors(Doctor_ID)
);

INSERT INTO Doctors (Name) VALUES ('Dr. Fahmida');

INSERT INTO Patients (Name, Age, National_ID, Doctor_ID)
VALUES ('Rahim Uddin', 45, '19800012345', 1);
✔ OUTPUT
Doctors: 1 row | Patients: 1 row
Admit_Date auto-filled, Status = 'Admitted'
invalid_patient.sql
INSERT INTO Patients (Name, Age, National_ID, Doctor_ID)
VALUES ('Fake Patient', -3, '19800012345', 1);
✖ ERROR
ERROR 3819: Check constraint violated (Age >= 0)
-- এমনকি Age ঠিক করলেও, National_ID ডুপ্লিকেট হওয়ায় পরের এরর আসবে:
ERROR 1062: Duplicate entry '19800012345' for key 'National_ID'

ফলাফল: একই সাথে CHECK (বয়স) ও UNIQUE (National_ID) constraint কাজ করে ভুল ডেটা আটকে দিয়েছে — এটাই Constraint-ভিত্তিক ডিজাইনের আসল শক্তি।

19

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

⏱ শেখার অংশ

Database Administrator (DBA)

প্রোডাকশন ডাটাবেসে Constraint প্রয়োগ ও মনিটর করেন, যাতে ডেটা কোয়ালিটি বজায় থাকে।

Database Architect

বিজনেস রুল বিশ্লেষণ করে কোন কলামে কোন Constraint দরকার তা ডিজাইন করেন।

Data Engineer

ডেটা পাইপলাইনে Constraint লঙ্ঘনকারী রেকর্ড চিহ্নিত করে ক্লিন করেন।

Data Analyst

Constraint-সুরক্ষিত ডেটার উপর ভরসা করে নির্ভুল রিপোর্ট তৈরি করেন।

20

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

⏱ শেখার অংশ
21

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

⏱ হোমওয়ার্ক

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

একটা "Library" ডাটাবেসে Books ও Members টেবিল বানাও, যেখানে Book_ID Primary Key, ISBN UNIQUE, Member_Age CHECK দিয়ে সুরক্ষিত থাকবে, এবং Borrow_Date DEFAULT দিয়ে আজকের তারিখ বসবে।

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

১. একটা "E-commerce" সিস্টেমের জন্য Products ও Orders টেবিল ডিজাইন করো, যেখানে সাতটা Constraint-ই (NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK, DEFAULT, AUTO_INCREMENT) অন্তত একবার ব্যবহৃত হয়।

২. ইচ্ছাকৃতভাবে প্রতিটা Constraint ভাঙার চেষ্টা করে ৭টা ভিন্ন এরর মেসেজ সংগ্রহ করো এবং প্রতিটার ব্যাখ্যা লেখো।

৩. লিখে ব্যাখ্যা করো — কেন Data Type যথেষ্ট না, কেন আলাদাভাবে Constraint দরকার।