📌 آموزش سیستم مدیریت پایگاه داده رابطهای (RDBMS)
🎯 اهداف یادگیری
- شناخت مفاهیم پایه RDBMS
- یادگیری اصول پایگاه داده رابطهای
- آشنایی با مولفههای اصلی RDBMS
- یادگیری مزایا و معایب سیستمهای رابطهای
📌 RDBMS چیست؟
سیستم مدیریت پایگاه داده رابطهای (Relational Database Management System) یک نرمافزار برای ایجاد و مدیریت پایگاههای داده رابطهای است:
-- نمونهای از ایجاد جدول در RDBMSCREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100));
💡 برای مبتدیان: RDBMS یعنی چه؟
📊 تشبیه اکسل پیشرفته:
یک RDBMS را مانند یک اکسل بسیار پیشرفته در نظر بگیرید:
- دیتابیس = یک فایل اکسل کامل (شامل چندین sheet)
- جداول = sheet های مختلف (کاربران، محصولات، سفارشات)
- ستونها = هدرهای ستون (نام، ایمیل، سن)
- رکوردها = ردیفهای داده (اطلاعات هر فرد)
🎯 ویژگیهای کلیدی RDBMS:
- ذخیره داده در جداول با ساختار مشخص
- پشتیبانی از روابط بین جدولها
- استفاده از زبان SQL برای مدیریت دادهها
- پشتیبانی از یکپارچگی داده (Data Integrity)
📌 تاریخچه و پیدایش RDBMS
مفهوم پایگاه داده رابطهای توسط ادگار کاد در سال 1970 معرفی شد:
1970: ادگار کاد مقاله "A Relational Model of Data for Large Shared Data Banks" را منتشر کرد1974: اولین زبان Query به نام SEQUEL توسعه یافت1979: Oracle اولین RDBMS تجاری را معرفی کرد1985: MySQL توسعه یافت1995: PostgreSQL منتشر شد
📌 مولفههای اصلی RDBMS
۱. جداول (Tables)
ساختار اصلی ذخیرهسازی داده در RDBMS:
CREATE TABLE employees ( employee_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), department_id INT, salary DECIMAL(10,2));
۲. روابط (Relationships)
ارتباط بین جدولهای مختلف:
CREATE TABLE departments ( department_id INT PRIMARY KEY, department_name VARCHAR(100));ALTER TABLE employeesADD CONSTRAINT fk_departmentFOREIGN KEY (department_id) REFERENCES departments(department_id);
۳. کلیدها (Keys)
برای شناسایی و ایجاد روابط بین دادهها:
-- کلید اصلی (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)
هر رکورد در یک جدول فقط با یک رکورد در جدول دیگر مرتبط است:
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)
هر رکورد در یک جدول با چندین رکورد در جدول دیگر مرتبط است:
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)
هر رکورد در یک جدول با چندین رکورد در جدول دیگر مرتبط است و بالعکس:
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
✅ یکپارچگی داده (Data Integrity)✅ کاهش افزونگی داده (Data Redundancy)✅ امنیت داده (Data Security)✅ پشتیبانی از تراکنشها (ACID Properties)✅ انعطافپذیری در Query نویسی✅ مقیاسپذیری
📌 معایب RDBMS
❌ پیچیدگی در طراحی Schema❌ هزینههای بالای سختافزاری❌ محدودیت در مقیاسپذیری افقی❌ عدم بهینگی برای دادههای غیرساختاریافته
📌 سیستمهای RDBMS معروف
🏆 Oracle Database - قدرتمند و enterprise🐬 MySQL - محبوبترین برای وباپلیکیشنها🐘 PostgreSQL - پیشرفته و open-source🔵 Microsoft SQL Server - راهحل مایکروسافت💙 SQLite - سبک و embedded
📌 مفاهیم پیشرفته RDBMS
۱. نرمالسازی (Normalization)
فرآیند سازماندهی دادهها برای کاهش افزونگی و بهبود یکپارچگی:
-- قبل از نرمالسازی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)
برای بهبود سرعت بازیابی دادهها:
-- ایجاد ایندکس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 طراحی کنید:
-- ایجاد دیتابیس کتابخانه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));
راهنمای تمرین:
- دیتابیس library_system را ایجاد کنید
- جدولهای members، books و loans را بسازید
- دادههای نمونه به هر جدول اضافه کنید
- روابط بین جدولها را تست کنید
- کوئریهای JOIN ساده بنویسید
📌 قدم بعدی
در درس بعدی با MySQL به صورت عملی آشنا خواهیم شد و شروع به کار با این RDBMS محبوب میکنیم!