> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/databases/relational-databases.md).

# Relational Databases

### **Relational Database - RDBMS কী?**

রিলেশনাল ডাটাবেস (Relational Database) হল এমন একটি ডাটাবেস সিস্টেম যেখানে তথ্য টেবিল (Table) আকারে সংরক্ষণ করা হয় এবং এই টেবিলগুলোর মধ্যে সম্পর্ক (Relation) থাকে। এটি RDBMS (Relational Database Management System) সফটওয়্যার দ্বারা পরিচালিত হয়, যেমন MySQL, PostgreSQL, Oracle DB, Microsoft SQL Server ইত্যাদি।

এই পদ্ধতিতে তথ্যগুলো সারি (Row) ও কলাম (Column) ভিত্তিক হয়, যা ব্যবহারকারীদের সহজে তথ্য সংরক্ষণ, অনুসন্ধান, আপডেট ও মুছে ফেলার সুযোগ দেয়।

***

### **রিলেশনাল ডাটাবেসের মূল বৈশিষ্ট্য**

#### **১. টেবিল-বেইজড স্ট্রাকচার (Table-Based Structure)**

রিলেশনাল ডাটাবেসে সব তথ্য **টেবিলের** (Table) মধ্যে থাকে। প্রতিটি টেবিলে নির্দিষ্ট **কলাম (Column)** এবং **সারি (Row)** থাকে।

উদাহরণস্বরূপ, একটি **Students** নামের টেবিলে নিচের মতো তথ্য থাকতে পারে:

| ID | Name   | Age | Department |
| -- | ------ | --- | ---------- |
| 1  | Rahim  | 22  | CSE        |
| 2  | Karim  | 23  | EEE        |
| 3  | Ayesha | 21  | BBA        |

#### **২. কী (Key) এবং সম্পর্ক (Relationship)**

একটি **Primary Key (PK)** ব্যবহৃত হয় প্রতিটি রেকর্ডকে আলাদা চিহ্নিত করার জন্য।\
একটি **Foreign Key (FK)** ব্যবহৃত হয় এক টেবিলের সাথে অন্য টেবিলের সম্পর্ক তৈরি করতে।

উদাহরণস্বরূপ, যদি Students টেবিলের **ID** ফিল্ড **Primary Key (PK)** হয় এবং Courses টেবিলের **Student\_ID** ফিল্ডটি **Foreign Key (FK)** হয়, তাহলে এই দুটি টেবিলের মধ্যে সম্পর্ক তৈরি হবে।

#### **৩. ACID প্রোপার্টি (ACID Properties)**

রিলেশনাল ডাটাবেস **ACID (Atomicity, Consistency, Isolation, Durability)** নীতি মেনে চলে, যা ডাটা ট্রান্স্যাকশনের নির্ভরযোগ্যতা নিশ্চিত করে।

* **Atomicity**: একটি ট্রান্স্যাকশন সম্পূর্ণ হবে বা একেবারে বাতিল হবে।
* **Consistency**: ডাটাবেস সর্বদা একটি Valid অবস্থায় থাকবে।
* **Isolation**: একাধিক ট্রান্স্যাকশন একে অপরকে প্রভাবিত করবে না।
* **Durability**: একবার ডাটা সংরক্ষিত হলে তা হারাবে না, সিস্টেম ক্র্যাশ হলেও না।

#### **৪. SQL (Structured Query Language) ব্যবহার**

রিলেশনাল ডাটাবেস পরিচালনার জন্য **SQL (Structured Query Language)** ব্যবহার করা হয়।

উদাহরণ:

* **তথ্য সংরক্ষণ (Insert Data)**

  ```sql
  INSERT INTO Students (ID, Name, Age, Department) VALUES (1, 'Rahim', 22, 'CSE');
  ```
* **তথ্য অনুসন্ধান (Retrieve Data)**

  ```sql
  SELECT * FROM Students WHERE Department = 'CSE';
  ```
* **তথ্য আপডেট (Update Data)**

  ```sql
  UPDATE Students SET Age = 23 WHERE ID = 1;
  ```
* **তথ্য মুছে ফেলা (Delete Data)**

  ```sql
  DELETE FROM Students WHERE ID = 1;
  ```

***

### **রিলেশনাল ডাটাবেসের সুবিধা**

✅ ডাটা অর্গানাইজড থাকে: তথ্য সুন্দরভাবে সাজানো থাকে, যা দ্রুত অনুসন্ধান ও ব্যবস্থাপনার জন্য সুবিধাজনক।\
✅ ডাটা নিরাপত্তা: অনুমতি (Permissions) নিয়ন্ত্রণের মাধ্যমে ডাটা নিরাপদ রাখা যায়।\
✅ মাল্টি-ইউজার অ্যাক্সেস: একই সময়ে একাধিক ব্যবহারকারী কাজ করতে পারে।\
✅ ইন্টিগ্রিটি মেইনটেইন করে: ডাটা সম্পর্ক বজায় রাখে এবং ভুল এন্ট্রি প্রতিরোধ করে।\
✅ ব্যাকআপ ও রিকভারি সুবিধা: সিস্টেম ব্যর্থ হলেও তথ্য পুনরুদ্ধার করা সম্ভব।

***

### **রিলেশনাল ডাটাবেসের সীমাবদ্ধতা**

❌ স্কেলিং সমস্যা: বড় পরিমাণ ডাটা ম্যানেজ করতে চ্যালেঞ্জিং হতে পারে।\
❌ পারফরম্যান্স ইস্যু: বড় টেবিলের ক্ষেত্রে জটিল JOIN অপারেশন করলে গতি কমে যেতে পারে।\
❌ ফ্লেক্সিবিলিটির অভাব: NoSQL ডাটাবেসের তুলনায় এটি কম ফ্লেক্সিবল, কারণ এটি স্ট্রিক্ট স্কিমা অনুসরণ করে।

***

রিলেশনাল ডাটাবেস সফটওয়্যার ডেভেলপমেন্টে সবচেয়ে বেশি ব্যবহৃত হয়, বিশেষ করে **ব্যাংকিং, ই-কমার্স, হাসপাতাল, সরকারি প্রতিষ্ঠান** ইত্যাদির ক্ষেত্রে। এটি **ডাটা সংরক্ষণ, নিরাপত্তা এবং অ্যাক্সেস নিয়ন্ত্রণের** জন্য নির্ভরযোগ্য সমাধান প্রদান করে। তবে, যদি খুব বড় আকারের ডাটা ম্যানেজ করতে হয় বা ফ্লেক্সিবিলিটি প্রয়োজন হয়, তাহলে **NoSQL (Non-Relational Database)** বিকল্প হিসেবে ব্যবহার করা যেতে পারে।
