آشنایی با پایگاههای دادهٔ رابطهای (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_id | name |
|---|---|
| 1 | علی |
| 2 | سارا |
| 3 | رضا |
جدول سفارشها:
| order_id | customer_id | amount |
|---|---|---|
| 501 | 1 | 450000 |
| 502 | 2 | 720000 |
| 503 | 1 | 300000 |
در جدول مشتریان، ستون 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 ارتباط پیدا میکند.
۶. انواع رابطه میان جدولها
در پایگاه دادههای رابطهای، ارتباط میان جدولها معمولاً در سه گروه اصلی بررسی میشود.
۱. رابطه یکبهیک (One-to-One)
در این نوع رابطه، هر رکورد از جدول اول حداکثر با یک رکورد از جدول دوم ارتباط دارد و هر رکورد از جدول دوم نیز حداکثر به یک رکورد از جدول اول مرتبط است.
مثال: اطلاعات اصلی کاربران و اطلاعات تکمیلی اختصاصی هر کاربر.
برای پیادهسازی این رابطه، معمولاً از کلید خارجی همراه با محدودیت UNIQUE استفاده میشود.
۲. رابطه یکبهچند (One-to-Many)
در این نوع رابطه، یک رکورد از جدول اول میتواند با چند رکورد از جدول دوم ارتباط داشته باشد؛ اما هر رکورد از جدول دوم به یک رکورد از جدول اول ارجاع میدهد.
مثال: یک مشتری میتواند چندین سفارش ثبت کند.
در این رابطه، کلید خارجی معمولاً در سمت چند قرار میگیرد؛ یعنی در جدول سفارشها.
۳. رابطه چندبهچند (Many-to-Many)
در این نوع رابطه، هر رکورد از جدول اول میتواند با چند رکورد از جدول دوم ارتباط داشته باشد و هر رکورد از جدول دوم نیز میتواند با چند رکورد از جدول اول مرتبط شود.
مثال: هر دانشآموز میتواند در چند درس شرکت کند و هر درس نیز میتواند چندین دانشآموز داشته باشد.
در پایگاه داده رابطهای، رابطه چندبهچند معمولاً با استفاده از یک جدول واسط (Junction Table) پیادهسازی میشود.
۷. پیادهسازی رابطه چندبهچند با جدول واسط
فرض کنید میخواهیم اطلاعات دانشآموزان و درسهای آنها را مدیریت کنیم. برای این کار سه جدول ایجاد میکنیم:
کد ایجاد جدولها
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_id | course_id |
|---|---|
| 1 | 10 |
| 1 | 20 |
| 2 | 10 |
- دانشآموز شماره 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_id | customer_name | customer_phone | product |
|---|---|---|---|
| 1 | علی | 09120000001 | موس |
| 2 | علی | 09120000001 | کیبورد |
| 3 | سارا | 09120000002 | مانیتور |
اطلاعات مشتری علی دو بار تکرار شده است. اگر شماره تلفن او تغییر کند، باید تمام رکوردهای مرتبط اصلاح شوند.
ساختار پیشنهادی پس از جداسازی جدولها
آشنایی کوتاه با شکلهای نرمال
- شکل اول (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_name | order_id | amount |
|---|---|---|
| علی | 501 | 450000 |
| سارا | 502 | 720000 |
| علی | 503 | 300000 |
انواع پرکاربرد JOIN
- INNER JOIN: فقط رکوردهایی را برمیگرداند که در هر دو جدول شرط اتصال را داشته باشند.
- LEFT JOIN: تمام رکوردهای جدول سمت چپ و رکوردهای منطبق از جدول سمت راست را برمیگرداند.
- RIGHT JOIN: تمام رکوردهای جدول سمت راست و رکوردهای منطبق از جدول سمت چپ را برمیگرداند.
۱۱. تفاوت پایگاه داده رابطهای و غیررابطهای
همه پایگاههای داده از ساختار جدولهای رابطهای استفاده نمیکنند. برخی سیستمها با مدلهای دیگری مانند سندگرا، کلید-مقدار یا گرافی کار میکنند. به این گروه از سیستمها معمولاً NoSQL گفته میشود.
| ویژگی | پایگاه داده رابطهای | پایگاه داده غیررابطهای |
|---|---|---|
| ساختار | معمولاً جدول و رابطه | سند، کلید-مقدار، گراف و مدلهای دیگر |
| طرح داده | معمولاً ساختار مشخص و تعریفشده | بسته به سیستم میتواند انعطافپذیرتر باشد |
| ارتباط دادهها | با کلیدها و JOIN | بسته به مدل، با ارجاع، ساختار تودرتو یا روشهای دیگر |
| نمونهها | MySQL، PostgreSQL | MongoDB، Redis، Neo4j |
۱۲. چرا MySQL یک پایگاه داده رابطهای است؟
MySQL یک سیستم مدیریت پایگاه داده رابطهای یا RDBMS است؛ زیرا دادهها را در جدولهای ساختاریافته نگهداری میکند و از ارتباط میان جدولها پشتیبانی میکند.
ویژگیهای رابطهای مهم در MySQL عبارتاند از:
- ایجاد جدول با ستونها و نوع داده مشخص.
- تعریف کلید اصلی برای شناسایی رکوردها.
- تعریف کلید خارجی برای ارتباط میان جدولها.
- استفاده از محدودیتهایی مانند NOT NULL و UNIQUE.
- بازیابی اطلاعات از چند جدول با استفاده از JOIN.
- پشتیبانی از تراکنشها با موتور ذخیرهسازی InnoDB.
۱۳. اشتباهات رایج در طراحی پایگاه داده رابطهای
نگهداری تمام اطلاعات در یک جدول بزرگ میتواند باعث تکرار دادهها، دشواری ویرایش و بروز ناسازگاری شود.
هر جدول باید شناسه مناسبی برای شناسایی یکتای رکوردها داشته باشد.
ستونهای مرتبط باید از نظر نوع داده و ساختار با یکدیگر سازگار باشند. همچنین مقدار ارجاعشده باید در جدول مرجع وجود داشته باشد.
در مدل رابطهای، برای پیادهسازی استاندارد این نوع ارتباط معمولاً به یک جدول واسط نیاز داریم.
انتخاب نوع داده نامناسب میتواند باعث مصرف حافظه بیشتر، خطا یا محدودیت در ذخیرهسازی اطلاعات شود.
۱۴. جمعبندی درس
در این درس با ساختار پایگاه دادههای رابطهای و روش سازماندهی اطلاعات در جدولها آشنا شدیم. همچنین یاد گرفتیم چگونه با استفاده از کلیدها، ارتباط میان جدولها را برقرار کنیم.
- RDBMS سیستم مدیریت پایگاه داده رابطهای است.
- اطلاعات در جدولهایی شامل سطر و ستون ذخیره میشوند.
- Primary Key هر رکورد را بهصورت یکتا شناسایی میکند.
- Foreign Key برای ایجاد ارتباط و حفظ یکپارچگی ارجاعی به کار میرود.
- رابطهها میتوانند یکبهیک، یکبهچند یا چندبهچند باشند.
- رابطه چندبهچند معمولاً با جدول واسط پیادهسازی میشود.
- نرمالسازی به کاهش تکرار و بهبود ساختار دادهها کمک میکند.
- با دستور JOIN میتوان اطلاعات چند جدول را ترکیب کرد.
۱۵. تمرین و خودآزمایی
پرسشهای تشریحی
- پایگاه داده رابطهای چیست و چه ویژگی مهمی دارد؟
- تفاوت سطر و ستون در یک جدول چیست؟
- کلید اصلی چه کاربردی دارد؟
- چرا از کلید خارجی استفاده میکنیم؟
- سه نوع رابطه اصلی میان جدولها را نام ببرید.
- جدول واسط در رابطه چندبهچند چه نقشی دارد؟
- نرمالسازی چه مشکلی را برطرف میکند؟
- دستور JOIN چه کاربردی دارد؟
تمرین عملی
یک پایگاه داده برای مدیریت کتابخانه طراحی کنید. حداقل سه جدول زیر را در نظر بگیرید:
- books: شناسه کتاب، عنوان و نام نویسنده.
- members: شناسه عضو، نام و شماره تماس.
- borrowings: شناسه امانت، شناسه کتاب، شناسه عضو و تاریخ امانت.
سپس کارهای زیر را انجام دهید:
- برای هر جدول یک کلید اصلی تعریف کنید.
- در جدول امانتها، کلیدهای خارجی مربوط به کتاب و عضو را مشخص کنید.
- چند کتاب و عضو فرضی ثبت کنید.
- چند رکورد امانت در جدول مربوطه درج کنید.
- با استفاده از JOIN نام عضو و عنوان کتاب امانتگرفتهشده را نمایش دهید.

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