آشنایی با پایگاه‌های دادهٔ رابطه‌ای (RDBMS)

آموزش پایگاه داده

آشنایی با پایگاه‌های دادهٔ رابطه‌ای (RDBMS)

شناخت ساختار پایگاه داده‌های رابطه‌ای، جدول‌ها، کلیدها و ارتباط میان اطلاعات و آشنایی با نقش این ساختار در مدیریت داده‌ها با استفاده از MySQL.

۱. پایگاه داده رابطه‌ای چیست؟

پایگاه داده رابطه‌ای یا Relational Database نوعی پایگاه داده است که اطلاعات را در قالب جدول‌های ساختاریافته ذخیره می‌کند. هر جدول معمولاً برای نگهداری اطلاعات یک موضوع مشخص طراحی می‌شود و از سطرها و ستون‌ها تشکیل شده است.

ویژگی مهم این نوع پایگاه داده، امکان ایجاد ارتباط منطقی میان جدول‌هاست. به کمک این ارتباط‌ها می‌توان اطلاعات مرتبط را در جدول‌های جداگانه نگهداری کرد و هنگام نیاز آن‌ها را به یکدیگر پیوند داد.

ذخیره‌سازی ساختاریافته اطلاعات در جدول‌هایی با ستون‌ها و نوع داده مشخص ذخیره می‌شوند.
ارتباط میان جدول‌ها داده‌های مرتبط از طریق کلیدها به یکدیگر متصل می‌شوند.
کاهش تکرار اطلاعات با طراحی اصولی می‌توان از ثبت غیرضروری اطلاعات تکراری جلوگیری کرد.
بازیابی منظم داده‌ها امکان جست‌وجو و ترکیب اطلاعات جدول‌های مختلف فراهم می‌شود.
مثال ساده: در یک مدرسه می‌توان اطلاعات دانش‌آموزان، درس‌ها و نمرات را در جدول‌های جداگانه نگهداری کرد و با استفاده از شناسه‌های مشترک، مشخص کرد هر دانش‌آموز چه نمره‌ای در هر درس دریافت کرده است.

۲. آشنایی با ساختار جدول در پایگاه داده رابطه‌ای

جدول یا Table اصلی‌ترین ساختار نگهداری اطلاعات در یک پایگاه داده رابطه‌ای است. هر جدول باید موضوع مشخصی داشته باشد؛ برای مثال جدول مشتریان، محصولات یا سفارش‌ها.

اجزای اصلی جدول

  • ستون (Column): ویژگی یا مشخصه‌ای از اطلاعات را تعریف می‌کند.
  • سطر (Row): یک رکورد یا مجموعه اطلاعات مربوط به یک مورد است.
  • فیلد (Field): محل قرارگیری یک مقدار مشخص در یک رکورد.
  • نوع داده (Data Type): نوع مقداری را که هر ستون می‌تواند نگهداری کند مشخص می‌کند.

مثال: جدول مشتریان

customer_id first_name last_name city
101علیاحمدیتهران
102سارامحمدیاصفهان
103رضاکریمیشیراز
تحلیل جدول:
  • نام جدول، مشتریان است.
  • چهار ستون برای نگهداری شناسه، نام، نام خانوادگی و شهر وجود دارد.
  • هر سطر اطلاعات یک مشتری را نگهداری می‌کند.
  • مقدار 101 در ستون شناسه، مشتری اول را مشخص می‌کند.

۳. مفهوم رابطه در پایگاه داده رابطه‌ای

واژه رابطه در Relational Database به ارتباط منطقی میان داده‌ها و جدول‌ها اشاره دارد. این ارتباط‌ها باعث می‌شوند اطلاعات مرتبط در جدول‌های جداگانه ذخیره شوند، اما همچنان بتوان آن‌ها را به یکدیگر مرتبط کرد.

برای مثال، در یک فروشگاه اینترنتی اطلاعات مشتریان در یک جدول و سفارش‌های آن‌ها در جدول دیگری ذخیره می‌شود. هر سفارش باید به مشتری مشخصی تعلق داشته باشد.

جدول مشتریان
Customers
⇄
جدول سفارش‌ها
Orders

ارتباط میان مشتری و سفارش با استفاده از شناسه مشتری برقرار می‌شود.

برای ایجاد چنین ارتباطی معمولاً از کلیدهای اصلی و خارجی استفاده می‌کنیم که در بخش‌های بعدی با آن‌ها آشنا می‌شویم.

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

کلید اصلی یا Primary Key ستونی یا مجموعه‌ای از ستون‌هاست که هر رکورد را به‌صورت یکتا در یک جدول شناسایی می‌کند.

یک کلید اصلی باید شرایط زیر را داشته باشد:

  • مقدار آن برای هر رکورد یکتا باشد.
  • مقدار آن نباید NULL باشد.
  • هر جدول حداکثر یک محدودیت کلید اصلی دارد؛ این کلید می‌تواند از چند ستون تشکیل شود.

مثال: جدول دانش‌آموزان

student_id (کلید اصلی) نام نام خانوادگی
1001مریماحمدی
1002علیکریمی
1003سارامحمدی

در این جدول، ستون student_id کلید اصلی است. حتی اگر دو دانش‌آموز نام و نام خانوادگی یکسانی داشته باشند، شناسه آن‌ها می‌تواند متفاوت باشد.

ایجاد جدول با کلید اصلی در MySQL

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(80)
);
نتیجه مورد انتظار

جدولی با نام students ایجاد می‌شود و ستون student_id به‌عنوان کلید اصلی تعریف خواهد شد.

Query OK, 0 rows affected
پیام بالا نمونه‌ای از پاسخ احتمالی سرور پس از اجرای موفق دستور است.

استفاده از شناسه خودکار

در بسیاری از جدول‌ها، بهتر است شناسه رکوردها به‌صورت خودکار تولید شود. در MySQL می‌توان از ویژگی AUTO_INCREMENT استفاده کرد.

CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2)
);
نتیجه مورد انتظار

هنگام ثبت محصول جدید، اگر مقداری برای product_id ارسال نکنیم، شناسه آن به‌صورت خودکار تولید می‌شود.

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

کلید خارجی یا Foreign Key ستونی یا مجموعه‌ای از ستون‌ها در یک جدول است که به کلید اصلی یا یک کلید یکتای واجد شرایط در جدول دیگر اشاره می‌کند.

کلید خارجی برای ایجاد ارتباط میان جدول‌ها و حفظ یکپارچگی ارجاعی (Referential Integrity) استفاده می‌شود.

مثال: ارتباط مشتریان و سفارش‌ها

جدول مشتریان:

customer_idname
1علی
2سارا
3رضا

جدول سفارش‌ها:

order_idcustomer_idamount
5011450000
5022720000
5031300000

در جدول مشتریان، ستون customer_id کلید اصلی است. در جدول سفارش‌ها، همین ستون به‌عنوان کلید خارجی استفاده می‌شود. بنابراین سفارش شماره 501 متعلق به مشتری شماره 1 است.

ایجاد ارتباط با کلید خارجی در MySQL

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(100) NOT NULL
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    amount DECIMAL(10,2),
    FOREIGN KEY (customer_id)
        REFERENCES customers(customer_id)
);
نتیجه مورد انتظار

دو جدول ایجاد می‌شوند و ستون customer_id در جدول orders به شناسه مشتری در جدول customers ارتباط پیدا می‌کند.

نکته مهم: برای ایجاد کلید خارجی در MySQL معمولاً از موتور ذخیره‌سازی InnoDB استفاده می‌شود. نوع داده ستون‌های مرتبط نیز باید سازگار باشد و مقدار ارجاع‌شده باید در جدول مرجع وجود داشته باشد.

۶. انواع رابطه میان جدول‌ها

در پایگاه داده‌های رابطه‌ای، ارتباط میان جدول‌ها معمولاً در سه گروه اصلی بررسی می‌شود.

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

در این نوع رابطه، هر رکورد از جدول اول حداکثر با یک رکورد از جدول دوم ارتباط دارد و هر رکورد از جدول دوم نیز حداکثر به یک رکورد از جدول اول مرتبط است.

مثال: اطلاعات اصلی کاربران و اطلاعات تکمیلی اختصاصی هر کاربر.

یک کاربر
↔
یک پروفایل

برای پیاده‌سازی این رابطه، معمولاً از کلید خارجی همراه با محدودیت UNIQUE استفاده می‌شود.

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

در این نوع رابطه، یک رکورد از جدول اول می‌تواند با چند رکورد از جدول دوم ارتباط داشته باشد؛ اما هر رکورد از جدول دوم به یک رکورد از جدول اول ارجاع می‌دهد.

مثال: یک مشتری می‌تواند چندین سفارش ثبت کند.

یک مشتری
→
سفارش اول
سفارش دوم
سفارش سوم

در این رابطه، کلید خارجی معمولاً در سمت چند قرار می‌گیرد؛ یعنی در جدول سفارش‌ها.

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

در این نوع رابطه، هر رکورد از جدول اول می‌تواند با چند رکورد از جدول دوم ارتباط داشته باشد و هر رکورد از جدول دوم نیز می‌تواند با چند رکورد از جدول اول مرتبط شود.

مثال: هر دانش‌آموز می‌تواند در چند درس شرکت کند و هر درس نیز می‌تواند چندین دانش‌آموز داشته باشد.

دانش‌آموز اول
↘
درس ریاضی

دانش‌آموز دوم
↗
درس علوم

در پایگاه داده رابطه‌ای، رابطه چندبه‌چند معمولاً با استفاده از یک جدول واسط (Junction Table) پیاده‌سازی می‌شود.

۷. پیاده‌سازی رابطه چندبه‌چند با جدول واسط

فرض کنید می‌خواهیم اطلاعات دانش‌آموزان و درس‌های آن‌ها را مدیریت کنیم. برای این کار سه جدول ایجاد می‌کنیم:

students اطلاعات دانش‌آموزان و شناسه هر دانش‌آموز.
courses اطلاعات درس‌ها و شناسه هر درس.
student_courses جدول واسط برای ثبت ارتباط دانش‌آموزان با درس‌ها.

کد ایجاد جدول‌ها

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(100) NOT NULL
);

CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(100) NOT NULL
);

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)
);
نتیجه مورد انتظار

سه جدول ایجاد می‌شوند. جدول student_courses ارتباط میان دانش‌آموز و درس را نگهداری می‌کند.

ثبت اطلاعات نمونه

INSERT INTO students
    (student_id, student_name)
VALUES
    (1, 'Ali'),
    (2, 'Sara');

INSERT INTO courses
    (course_id, course_name)
VALUES
    (10, 'Math'),
    (20, 'Science');

INSERT INTO student_courses
    (student_id, course_id)
VALUES
    (1, 10),
    (1, 20),
    (2, 10);
خروجی مورد انتظار

ارتباط‌های زیر در جدول واسط ثبت می‌شوند:

student_idcourse_id
110
120
210
  • دانش‌آموز شماره 1 در دو درس شرکت کرده است.
  • دانش‌آموز شماره 2 در درس شماره 10 شرکت کرده است.
  • درس شماره 10 دو دانش‌آموز دارد.

۸. مفهوم یکپارچگی داده‌ها (Data Integrity)

یکپارچگی داده‌ها به معنای حفظ صحت، اعتبار و سازگاری اطلاعات در پایگاه داده است. در پایگاه داده رابطه‌ای از محدودیت‌ها یا Constraints برای جلوگیری از ثبت داده‌های نامعتبر استفاده می‌شود.

محدودیت‌های مهم در MySQL

محدودیتکاربرد
PRIMARY KEY شناسایی یکتای هر رکورد و جلوگیری از مقدار تهی در کلید اصلی.
FOREIGN KEY کنترل ارتباط معتبر میان جدول‌ها.
NOT NULL جلوگیری از ثبت مقدار تهی در یک ستون.
UNIQUE جلوگیری از تکرار مقادیر در ستون یا مجموعه ستون‌های مشخص.
CHECK بررسی برقرار بودن یک شرط برای مقادیر ستون.
DEFAULT تعیین مقدار پیش‌فرض برای ستون در صورت مشخص نکردن مقدار.

مثال استفاده از محدودیت‌ها

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    national_code VARCHAR(10) UNIQUE,
    full_name VARCHAR(100) NOT NULL,
    age INT CHECK (age >= 18),
    city VARCHAR(50) DEFAULT 'Tehran'
);
نتیجه مورد انتظار
  • شناسه کارمند باید یکتا باشد.
  • کد ملی نباید تکراری باشد.
  • نام کامل نمی‌تواند مقدار تهی داشته باشد.
  • سن باید حداقل 18 باشد.
  • اگر شهر مشخص نشود، مقدار پیش‌فرض تهران در نظر گرفته می‌شود.
پشتیبانی و نحوه اعمال بعضی محدودیت‌ها به نسخه و موتور ذخیره‌سازی بستگی دارد.

۹. نرمال‌سازی پایگاه داده (Database Normalization)

نرمال‌سازی فرایندی برای سازمان‌دهی بهتر جدول‌ها و کاهش افزونگی یا تکرار غیرضروری داده‌هاست. هدف آن طراحی ساختاری است که از بروز ناسازگاری هنگام ثبت، ویرایش یا حذف اطلاعات جلوگیری کند.

چرا نرمال‌سازی اهمیت دارد؟

  • کاهش تکرار اطلاعات.
  • جلوگیری از ناسازگاری داده‌ها.
  • ساده‌تر شدن ویرایش اطلاعات.
  • بهبود ساختار و نگهداری پایگاه داده.

مثال: جدول غیرنرمال

فرض کنید اطلاعات مشتری و سفارش در یک جدول ذخیره شده است:

order_idcustomer_namecustomer_phoneproduct
1علی09120000001موس
2علی09120000001کیبورد
3سارا09120000002مانیتور

اطلاعات مشتری علی دو بار تکرار شده است. اگر شماره تلفن او تغییر کند، باید تمام رکوردهای مرتبط اصلاح شوند.

ساختار پیشنهادی پس از جداسازی جدول‌ها

جدول customers شناسه مشتری، نام و شماره تماس.
جدول orders شناسه سفارش و شناسه مشتری.
جدول order_items اطلاعات کالاهای موجود در هر سفارش.
نکته: نرمال‌سازی فقط به معنی تقسیم یک جدول به چند جدول نیست؛ این کار باید بر اساس وابستگی‌های منطقی داده‌ها و قواعد طراحی پایگاه داده انجام شود.

آشنایی کوتاه با شکل‌های نرمال

  • شکل اول (1NF): مقادیر ستون‌ها باید اتمی باشند و گروه‌های تکرارشونده در یک ستون وجود نداشته باشند.
  • شکل دوم (2NF): جدول در شکل اول باشد و هر ویژگی غیرکلیدی به کل کلید اصلی وابسته باشد، نه فقط بخشی از آن.
  • شکل سوم (3NF): جدول در شکل دوم باشد و وابستگی انتقالی نامناسب میان ویژگی‌های غیرکلیدی وجود نداشته باشد.

۱۰. بازیابی اطلاعات از چند جدول با JOIN

یکی از قابلیت‌های مهم پایگاه داده رابطه‌ای، امکان ترکیب اطلاعات چند جدول است. در SQL برای این کار از دستور JOIN استفاده می‌کنیم.

فرض کنید دو جدول مشتریان و سفارش‌ها داریم و می‌خواهیم نام مشتری را در کنار شماره سفارش نمایش دهیم.

دستور INNER JOIN

SELECT
    customers.customer_name,
    orders.order_id,
    orders.amount
FROM customers
INNER JOIN orders
    ON customers.customer_id = orders.customer_id;
خروجی نمونه
customer_nameorder_idamount
علی501450000
سارا502720000
علی503300000
این خروجی نمونه با فرض وجود اطلاعات متناظر در دو جدول نمایش داده شده است.

انواع پرکاربرد JOIN

  • INNER JOIN: فقط رکوردهایی را برمی‌گرداند که در هر دو جدول شرط اتصال را داشته باشند.
  • LEFT JOIN: تمام رکوردهای جدول سمت چپ و رکوردهای منطبق از جدول سمت راست را برمی‌گرداند.
  • RIGHT JOIN: تمام رکوردهای جدول سمت راست و رکوردهای منطبق از جدول سمت چپ را برمی‌گرداند.

۱۱. تفاوت پایگاه داده رابطه‌ای و غیررابطه‌ای

همه پایگاه‌های داده از ساختار جدول‌های رابطه‌ای استفاده نمی‌کنند. برخی سیستم‌ها با مدل‌های دیگری مانند سندگرا، کلید-مقدار یا گرافی کار می‌کنند. به این گروه از سیستم‌ها معمولاً NoSQL گفته می‌شود.

ویژگیپایگاه داده رابطه‌ایپایگاه داده غیررابطه‌ای
ساختار معمولاً جدول و رابطه سند، کلید-مقدار، گراف و مدل‌های دیگر
طرح داده معمولاً ساختار مشخص و تعریف‌شده بسته به سیستم می‌تواند انعطاف‌پذیرتر باشد
ارتباط داده‌ها با کلیدها و JOIN بسته به مدل، با ارجاع، ساختار تو‌در‌تو یا روش‌های دیگر
نمونه‌ها MySQL، PostgreSQL MongoDB، Redis، Neo4j
توجه: هیچ‌کدام از این دو گروه همیشه بهتر از دیگری نیستند. انتخاب سیستم مناسب به نوع اطلاعات، نیازهای برنامه، حجم داده، الگوی دسترسی و نیازمندی‌های فنی پروژه بستگی دارد.

۱۲. چرا MySQL یک پایگاه داده رابطه‌ای است؟

MySQL یک سیستم مدیریت پایگاه داده رابطه‌ای یا RDBMS است؛ زیرا داده‌ها را در جدول‌های ساختاریافته نگهداری می‌کند و از ارتباط میان جدول‌ها پشتیبانی می‌کند.

ویژگی‌های رابطه‌ای مهم در MySQL عبارت‌اند از:

  • ایجاد جدول با ستون‌ها و نوع داده مشخص.
  • تعریف کلید اصلی برای شناسایی رکوردها.
  • تعریف کلید خارجی برای ارتباط میان جدول‌ها.
  • استفاده از محدودیت‌هایی مانند NOT NULL و UNIQUE.
  • بازیابی اطلاعات از چند جدول با استفاده از JOIN.
  • پشتیبانی از تراکنش‌ها با موتور ذخیره‌سازی InnoDB.
ارتباط با درس قبلی: در درس مقدمه‌ای بر MySQL با این نرم‌افزار و کاربردهای آن آشنا شدیم. اکنون می‌دانیم ساختار رابطه‌ای آن چگونه طراحی می‌شود و جدول‌ها با چه سازوکارهایی به یکدیگر ارتباط پیدا می‌کنند.

۱۳. اشتباهات رایج در طراحی پایگاه داده رابطه‌ای

۱. استفاده از یک جدول برای تمام اطلاعات

نگهداری تمام اطلاعات در یک جدول بزرگ می‌تواند باعث تکرار داده‌ها، دشواری ویرایش و بروز ناسازگاری شود.

۲. انتخاب نکردن کلید اصلی مناسب

هر جدول باید شناسه مناسبی برای شناسایی یکتای رکوردها داشته باشد.

۳. استفاده نادرست از کلید خارجی

ستون‌های مرتبط باید از نظر نوع داده و ساختار با یکدیگر سازگار باشند. همچنین مقدار ارجاع‌شده باید در جدول مرجع وجود داشته باشد.

۴. ایجاد رابطه چندبه‌چند بدون جدول واسط

در مدل رابطه‌ای، برای پیاده‌سازی استاندارد این نوع ارتباط معمولاً به یک جدول واسط نیاز داریم.

۵. بی‌توجهی به نوع داده‌ها

انتخاب نوع داده نامناسب می‌تواند باعث مصرف حافظه بیشتر، خطا یا محدودیت در ذخیره‌سازی اطلاعات شود.

۱۵. تمرین و خودآزمایی

پرسش‌های تشریحی

  1. پایگاه داده رابطه‌ای چیست و چه ویژگی مهمی دارد؟
  2. تفاوت سطر و ستون در یک جدول چیست؟
  3. کلید اصلی چه کاربردی دارد؟
  4. چرا از کلید خارجی استفاده می‌کنیم؟
  5. سه نوع رابطه اصلی میان جدول‌ها را نام ببرید.
  6. جدول واسط در رابطه چندبه‌چند چه نقشی دارد؟
  7. نرمال‌سازی چه مشکلی را برطرف می‌کند؟
  8. دستور JOIN چه کاربردی دارد؟

تمرین عملی

یک پایگاه داده برای مدیریت کتابخانه طراحی کنید. حداقل سه جدول زیر را در نظر بگیرید:

  • books: شناسه کتاب، عنوان و نام نویسنده.
  • members: شناسه عضو، نام و شماره تماس.
  • borrowings: شناسه امانت، شناسه کتاب، شناسه عضو و تاریخ امانت.

سپس کارهای زیر را انجام دهید:

  1. برای هر جدول یک کلید اصلی تعریف کنید.
  2. در جدول امانت‌ها، کلیدهای خارجی مربوط به کتاب و عضو را مشخص کنید.
  3. چند کتاب و عضو فرضی ثبت کنید.
  4. چند رکورد امانت در جدول مربوطه درج کنید.
  5. با استفاده از JOIN نام عضو و عنوان کتاب امانت‌گرفته‌شده را نمایش دهید.
هدف تمرین: طراحی یک ساختار رابطه‌ای ساده و تمرین عملی استفاده از کلید اصلی، کلید خارجی و ارتباط میان جدول‌ها در MySQL.
💬

دیدگاه کاربران

نظر یا تجربه خود را درباره این مطلب با دیگران به اشتراک بگذارید.

💭 هنوز دیدگاهی ثبت نشده است. اولین نفری باشید که نظر خود را می‌نویسد.
✍️ ارسال دیدگاه

🔒 دیدگاه شما پس از بررسی و تأیید مدیر سایت نمایش داده خواهد شد.

ارسال نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *