بی آکادمی
آموزش HTML
آموزش CSS
جاوااسکریپت
آموزش SQL
آموزش MySQL
آموزش PHP
داکر دسکتاپ

📌 آموزش سیستم مدیریت پایگاه داده رابطه‌ای (RDBMS)


🎯 اهداف یادگیری

  • شناخت مفاهیم پایه RDBMS
  • یادگیری اصول پایگاه داده رابطه‌ای
  • آشنایی با مولفه‌های اصلی RDBMS
  • یادگیری مزایا و معایب سیستم‌های رابطه‌ای

📌 RDBMS چیست؟

سیستم مدیریت پایگاه داده رابطه‌ای (Relational Database Management System) یک نرم‌افزار برای ایجاد و مدیریت پایگاه‌های داده رابطه‌ای است:

sql
-- نمونه‌ای از ایجاد جدول در RDBMS
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);

💡 برای مبتدیان: RDBMS یعنی چه؟

📊 تشبیه اکسل پیشرفته:

یک RDBMS را مانند یک اکسل بسیار پیشرفته در نظر بگیرید:

  • دیتابیس = یک فایل اکسل کامل (شامل چندین sheet)
  • جداول = sheet های مختلف (کاربران، محصولات، سفارشات)
  • ستون‌ها = هدرهای ستون (نام، ایمیل، سن)
  • رکوردها = ردیف‌های داده (اطلاعات هر فرد)

🎯 ویژگی‌های کلیدی RDBMS:

  1. ذخیره داده در جداول با ساختار مشخص
  2. پشتیبانی از روابط بین جدول‌ها
  3. استفاده از زبان SQL برای مدیریت داده‌ها
  4. پشتیبانی از یکپارچگی داده (Data Integrity)

📌 تاریخچه و پیدایش RDBMS

مفهوم پایگاه داده رابطه‌ای توسط ادگار کاد در سال 1970 معرفی شد:

text
1970: ادگار کاد مقاله "A Relational Model of Data for Large Shared Data Banks" را منتشر کرد
1974: اولین زبان Query به نام SEQUEL توسعه یافت
1979: Oracle اولین RDBMS تجاری را معرفی کرد
1985: MySQL توسعه یافت
1995: PostgreSQL منتشر شد

📌 مولفه‌های اصلی RDBMS

۱. جداول (Tables)

ساختار اصلی ذخیره‌سازی داده در RDBMS:

sql
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department_id INT,
salary DECIMAL(10,2)
);

۲. روابط (Relationships)

ارتباط بین جدول‌های مختلف:

sql
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(100)
);
ALTER TABLE employees
ADD CONSTRAINT fk_department
FOREIGN KEY (department_id) REFERENCES departments(department_id);

۳. کلیدها (Keys)

برای شناسایی و ایجاد روابط بین داده‌ها:

sql
-- کلید اصلی (Primary Key)
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100)
);
-- کلید خارجی (Foreign Key)
CREATE TABLE orders (
order_id INT PRIMARY KEY,
product_id INT,
FOREIGN KEY (product_id) REFERENCES products(product_id)
);

🔧 انواع کلیدها در RDBMS

۱. کلید اصلی (Primary Key)

  • شناسه یکتا برای هر رکورد
  • نمی‌تواند تکراری یا خالی باشد
  • هر جدول فقط یک کلید اصلی دارد

۲. کلید خارجی (Foreign Key)

  • برای ایجاد رابطه بین جدول‌ها
  • به کلید اصلی جدول دیگر اشاره می‌کند
  • یکپارچگی ارجاعی را حفظ می‌کند

۳. کلید کاندید (Candidate Key)

  • ستونی که می‌تواند کلید اصلی باشد
  • مقدار یکتا و غیر تکراری دارد

📌 انواع روابط در RDBMS

۱. رابطه یک به یک (One-to-One)

هر رکورد در یک جدول فقط با یک رکورد در جدول دیگر مرتبط است:

sql
CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(50)
);
CREATE TABLE user_profiles (
profile_id INT PRIMARY KEY,
user_id INT UNIQUE,
bio TEXT,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);

۲. رابطه یک به چند (One-to-Many)

هر رکورد در یک جدول با چندین رکورد در جدول دیگر مرتبط است:

sql
CREATE TABLE authors (
author_id INT PRIMARY KEY,
author_name VARCHAR(100)
);
CREATE TABLE books (
book_id INT PRIMARY KEY,
title VARCHAR(200),
author_id INT,
FOREIGN KEY (author_id) REFERENCES authors(author_id)
);

۳. رابطه چند به چند (Many-to-Many)

هر رکورد در یک جدول با چندین رکورد در جدول دیگر مرتبط است و بالعکس:

sql
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(100)
);
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100)
);
CREATE TABLE student_courses (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

🔗 درک روابط بین جدول‌ها

📌 رابطه یک به یک:

مثال: کاربر و پروفایل کاربری

  • هر کاربر فقط یک پروفایل دارد
  • هر پروفایل فقط به یک کاربر تعلق دارد

📌 رابطه یک به چند:

مثال: نویسنده و کتاب‌ها

  • یک نویسنده می‌تواند چندین کتاب داشته باشد
  • هر کتاب فقط یک نویسنده اصلی دارد

📌 رابطه چند به چند:

مثال: دانشجویان و درس‌ها

  • یک دانشجو می‌تواند چندین درس بگیرد
  • یک درس می‌تواند توسط چندین دانشجو گرفته شود

📌 مزایای RDBMS

text
✅ یکپارچگی داده (Data Integrity)
✅ کاهش افزونگی داده (Data Redundancy)
✅ امنیت داده (Data Security)
✅ پشتیبانی از تراکنش‌ها (ACID Properties)
✅ انعطاف‌پذیری در Query نویسی
✅ مقیاس‌پذیری

📌 معایب RDBMS

text
❌ پیچیدگی در طراحی Schema
❌ هزینه‌های بالای سخت‌افزاری
❌ محدودیت در مقیاس‌پذیری افقی
❌ عدم بهینگی برای داده‌های غیرساختاریافته

📌 سیستم‌های RDBMS معروف

text
🏆 Oracle Database - قدرتمند و enterprise
🐬 MySQL - محبوب‌ترین برای وب‌اپلیکیشن‌ها
🐘 PostgreSQL - پیشرفته و open-source
🔵 Microsoft SQL Server - راه‌حل مایکروسافت
💙 SQLite - سبک و embedded

📌 مفاهیم پیشرفته RDBMS

۱. نرمال‌سازی (Normalization)

فرآیند سازماندهی داده‌ها برای کاهش افزونگی و بهبود یکپارچگی:

sql
-- قبل از نرمال‌سازی
CREATE TABLE orders (
order_id INT,
customer_name VARCHAR(100),
customer_address VARCHAR(200),
product_name VARCHAR(100)
);
-- بعد از نرمال‌سازی
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100),
address VARCHAR(200)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

۲. ایندکس‌ها (Indexes)

برای بهبود سرعت بازیابی داده‌ها:

sql
-- ایجاد ایندکس
CREATE INDEX idx_email ON users(email);
-- ایندکس ترکیبی
CREATE INDEX idx_name_age ON users(last_name, first_name);
-- ایندکس یکتا
CREATE UNIQUE INDEX idx_unique_email ON users(email);

📌 تمرین عملی

یک سیستم ساده کتابخانه با RDBMS طراحی کنید:

sql
-- ایجاد دیتابیس کتابخانه
CREATE DATABASE library_system;
USE library_system;
-- جدول اعضا
CREATE TABLE members (
member_id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100) UNIQUE,
join_date DATE
);
-- جدول کتاب‌ها
CREATE TABLE books (
book_id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
author VARCHAR(100),
isbn VARCHAR(13) UNIQUE,
published_year INT
);
-- جدول امانت‌ها (رابطه چند به چند)
CREATE TABLE loans (
loan_id INT PRIMARY KEY AUTO_INCREMENT,
member_id INT,
book_id INT,
loan_date DATE,
return_date DATE,
FOREIGN KEY (member_id) REFERENCES members(member_id),
FOREIGN KEY (book_id) REFERENCES books(book_id)
);

راهنمای تمرین:

  1. دیتابیس library_system را ایجاد کنید
  2. جدول‌های members، books و loans را بسازید
  3. داده‌های نمونه به هر جدول اضافه کنید
  4. روابط بین جدول‌ها را تست کنید
  5. کوئری‌های JOIN ساده بنویسید

📌 قدم بعدی

در درس بعدی با MySQL به صورت عملی آشنا خواهیم شد و شروع به کار با این RDBMS محبوب می‌کنیم!