ডেটাবেজ শব্দটি বিশ্লেষণ করলে দুইটি ইংরেজি শব্দ Data ও Base পাওয়া যায়, যার অর্থ যথাক্রমে উপাত্ত ও ঘাঁটি। তাহলে বলা যায়, Database হচ্ছে ডেটা বা উপাত্তের ঘাঁটি যেখানে অনেক পরিমান ডেটা সুন্দরভাবে সাজিয়ে রাখা হয়, যাতে পরে সহজে ডেটা খুঁজে পাওয়া, পরিবর্তন করা বা ব্যবহার করা যায়।
রিলেশনাল ডেটাবেজ হলো এমন ডেটাবেজ যেখানে তথ্য টেবিল (Table) আকারে রাখা হয় এবং একাধিক টেবিলের মধ্যে সম্পর্ক (Relation) থাকে।
টেবিল হলো ডেটাবেজের মূল অংশ, যেখানে তথ্য সারি (Row) ও কলাম (Column) আকারে থাকে।
Row (Record): একটি সম্পূর্ণ তথ্য
Column (Field): একটি নির্দিষ্ট ধরনের তথ্য
প্রাইমারি কি হলো এমন একটি ফিল্ড, যা দিয়ে একটি রেকর্ডকে আলাদা করে শনাক্ত করা যায়।
ফরেন কি হলো এমন একটি কি, যা এক টেবিলের সাথে আরেক টেবিলের সম্পর্ক তৈরি করে।
ফরেন কি হলো এমন একটি কি, যা এক টেবিলের সাথে আরেক টেবিলের সম্পর্ক তৈরি করে। SQL–এর কাজগুলোকে সহজভাবে দুই ভাগে ভাগ করা যায়—
| ডাটা টাইপ | ব্যবহার |
|---|---|
| INT | পূর্ণসংখ্যা সংরক্ষণের জন্য ব্যবহৃত হয় |
| FLOAT | দশমিক সংখ্যা সংরক্ষণের জন্য ব্যবহৃত হয় |
| DOUBLE | বড় দশমিক সংখ্যা সংরক্ষণের জন্য ব্যবহৃত হয় |
| CHAR | নির্দিষ্ট দৈর্ঘ্যের টেক্সট সংরক্ষণের জন্য ব্যবহৃত হয় |
| VARCHAR | পরিবর্তনশীল দৈর্ঘ্যের টেক্সট সংরক্ষণের জন্য ব্যবহৃত হয় |
| TEXT | দীর্ঘ লেখা সংরক্ষণের জন্য ব্যবহৃত হয় |
| DATE | তারিখ সংরক্ষণের জন্য ব্যবহৃত হয় |
| TIME | সময় সংরক্ষণের জন্য ব্যবহৃত হয় |
| DATETIME | তারিখ ও সময় একসাথে সংরক্ষণের জন্য ব্যবহৃত হয় |
| BOOLEAN | সত্য বা মিথ্যা মান সংরক্ষণের জন্য ব্যবহৃত হয় |
ডেটাবেজের ভেতরে ডেটাগুলো টেবিল আকারে সাজানো থাকে। কিভাবে তা তৈরি ও ব্যবহার করে চলো দেখি। সহজে বোঝার জন্য উদাহরণ হিসেবে আমরা কলেজ শিক্ষার্থীদের ডেটাবেজ ব্যবহার করবো। নিচের টেবিলটি লক্ষ্য করো। আমরা ঠিক এমনই একটি টেবিল তৈরি করে দেখবো যেখানে roll, name, class, section, group_name এই পাঁচটি কলাম থাকবে।
| roll | name | class | section | group_name |
|---|---|---|---|---|
| 1 | Rudra | 11 | A | Science |
| 2 | Habib | 12 | A | Commerce |
| 3 | Pappu | 11 | B | Arts |
| 4 | Anik | 12 | B | Science |
| 5 | Priya | 11 | A | Commerce |
টেবিল তৈরি করার জন্য CREATE TABLE কমান্ড লেখার পর প্রথমা বন্ধনীর “( )” ভেতরে টেবিল কলামের নামগুলো ডেটাটাইপসহ পর্যায়ক্রমে লিখে দিতে হবে। সবশেষে সেমিকোলন লিখবো। নিচে আমরা সিনট্যাক্স দেখে নেই।
উপরের সিনট্যাক্স অনুযায়ী কোড লিখলে টেবিলের শুধু কাঠামো তৈরি হবে। অর্থাৎ ডেটা বিহীন একটা টেবিল তৈরি হবে।
তৈরী টেবিলের ভেতরে ডেটা প্রবেশের জন্য INSERT INTO কমান্ড লেখার পর যে টেবিলে ডেটা প্রবেশ করাতে হবে তার নাম লিখতে হবে। অতঃপর VALUES কমান্ডের পর প্রথমা বন্ধনীর ভেতরে ডেটাগুলোর মান পর্যায়ক্রমে কমা “,” ব্যবহার করে লিখে যাবো। সবশেষে সেমিকোলন লিখবো।
উপরের টেবিলটির কাঠামো তৈরি করতে আমাদের কোন DBMS -এ নিচের কোড লিখতে হবে।
CREATE TABLE student (
roll INT PRIMARY KEY,
name VARCHAR(50),
class INT,
section CHAR(1),
group_name VARCHAR(15)
);
CREATE TABLE → নতুন টেবিল তৈরি করার জন্য
student → টেবিলের নাম
INT → পূর্ণসংখ্যা ডেটা টাইপ
VARCHAR → পরিবর্তনশীল দৈর্ঘ্যের টেক্সট ডেটা টাইপ
CHAR → নির্দিষ্ট দৈর্ঘ্যের টেক্সট ডেটা টাইপ
PRIMARY KEY → ইউনিক ও প্রধান শনাক্তকারী কলাম
টেবিলটির কাঠামো তৈরি করার পর সেখানে ডেটা প্রবেশ করানোর জন্য আমাদের নিচের কোড লিখতে হবে।
INSERT INTO student VALUES
(1, 'Rudra', 11, 'A', 'Science'),
(2, 'Habib', 12, 'A', 'Commerce'),
(3, 'Pappu', 11, 'B', 'Arts'),
(4, 'Anik', 12, 'B', 'Science'),
(5, 'Priya', 11, 'A', 'Commerce');
| contact_id | roll | address | mobile_no |
|---|---|---|---|
| 101 | 1 | Gopalganj | 01711111111 |
| 102 | 2 | Narayanganj | 01822222222 |
| 103 | 3 | Barisal | 01933333333 |
| 104 | 4 | Dhaka | 01644444444 |
| 105 | 5 | Khulna | 01555555555 |
CREATE TABLE contact (
contact_id INT PRIMARY KEY,
roll INT,
address VARCHAR(50),
mobile_no VARCHAR(15),
FOREIGN KEY (roll) REFERENCES student(roll)
);
INSERT INTO contact VALUES
(101, 1, 'Gopalganj', '01711111111'),
(102, 2, 'Narayanganj', '01822222222'),
(103, 3, 'Barisal', '01933333333'),
(104, 4, 'Dhaka', '01644444444'),
(105, 5, 'Khulna', '01555555555');
| subject_code | subject_name | group_name |
|---|---|---|
| 101 | Bangla | Common |
| 275 | ICT | Common |
| 174 | Physics | Science |
| 253 | Accounting | Commerce |
| 109 | Economics | Commerce |
| 304 | History | Arts |
CREATE TABLE subject (
subject_code INT PRIMARY KEY,
subject_name VARCHAR(30),
group_name VARCHAR(15)
);
INSERT INTO subject VALUES
(101, 'Bangla', 'Common'),
(275, 'ICT', 'Common'),
(174, 'Physics', 'Science'),
(253, 'Accounting', 'Commerce'),
(109, 'Economics', 'Commerce'),
(304, 'History', 'Arts');
| roll | subject_code | marks |
|---|---|---|
| 1 | 275 | 88 |
| 1 | 174 | 82 |
| 1 | 101 | 76 |
| 2 | 275 | 78 |
| 2 | 253 | 75 |
| 2 | 109 | 72 |
| 3 | 275 | 29 |
| 3 | 304 | 65 |
| 3 | 101 | 60 |
| 4 | 275 | 31 |
| 4 | 174 | 90 |
| 4 | 101 | 70 |
| 5 | 275 | 65 |
| 5 | 253 | 84 |
| 5 | 109 | 80 |
CREATE TABLE result (
roll INT,
subject_code INT,
marks INT,
PRIMARY KEY (roll, subject_code),
FOREIGN KEY (roll) REFERENCES student(roll),
FOREIGN KEY (subject_code) REFERENCES subject(subject_code)
);
INSERT INTO result VALUES
-- Roll 1 (Science)
(1, 275, 88), -- ICT
(1, 174, 82), -- Physics
(1, 101, 76), -- Bangla
-- Roll 2 (Commerce)
(2, 275, 78), -- ICT
(2, 253, 75), -- Accounting
(2, 109, 72), -- Economics
-- Roll 3 (Arts)
(3, 275, 29), -- ICT (Fail)
(3, 304, 65), -- History
(3, 101, 60), -- Bangla
-- Roll 4 (Science)
(4, 275, 31), -- ICT (Fail)
(4, 174, 90), -- Physics
(4, 101, 70), -- Bangla
-- Roll 5 (Commerce)
(5, 275, 65), -- ICT
(5, 253, 84), -- Accounting
(5, 109, 80); -- Economics