رابطه یک به چند (One-to-Many) یکی از رایجترین انواع ارتباطات در پایگاه دادههای رابطهای (Relational Databases) مانند MySQL است.
در این رابطه، یک رکورد در جدول والد میتواند به چندین رکورد در جدول فرزند مرتبط باشد، اما هر رکورد در جدول فرزند فقط میتواند به یک رکورد در جدول والد متصل باشد.
در این مقاله، مفهوم رابطه یک به چند را بررسی کرده و روش پیادهسازی آن در MySQL را بهصورت گامبهگام توضیح خواهیم داد.
۱. مفهوم رابطه یک به چند در MySQL
تعریف
رابطه یک به چند در MySQL زمانی ایجاد میشود که یک رکورد در جدول والد میتواند چندین رکورد در جدول فرزند داشته باشد، اما هر رکورد در جدول فرزند فقط به یک رکورد در جدول والد مرتبط است.
مثال واقعی از رابطه یک به چند
✅ یک مشتری میتواند چندین سفارش داشته باشد، اما هر سفارش فقط متعلق به یک مشتری است.
✅ یک معلم میتواند چندین دانشآموز داشته باشد، اما هر دانشآموز فقط به یک معلم تعلق دارد.
✅ یک نویسنده میتواند چندین کتاب نوشته باشد، اما هر کتاب فقط توسط یک نویسنده نوشته شده است.
ساختار رابطه یک به چند
برای پیادهسازی این رابطه در MySQL، باید مراحل زیر را انجام دهیم:
- یک جدول والد (Parent Table) با کلید اصلی (Primary Key) ایجاد کنیم.
- یک جدول فرزند (Child Table) ایجاد کنیم که شامل یک کلید خارجی (Foreign Key) باشد که به کلید اصلی جدول والد اشاره کند.
- کلید خارجی را بهدرستی تنظیم کنیم تا ارتباط بین جداول برقرار شود.
۲. ایجاد جداول برای رابطه یک به چند در MySQL
۲.۱. تعریف جدول والد (Parent Table)
جدول والد اطلاعات اصلی را ذخیره میکند و دارای یک کلید اصلی (Primary Key) است.
CREATE TABLE customers (
customer_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL
);
✅ در این مثال، customer_id کلید اصلی جدول customers است.
۲.۲. تعریف جدول فرزند (Child Table) با کلید خارجی
جدول فرزند شامل اطلاعات مرتبط با جدول والد است و دارای یک کلید خارجی (Foreign Key) است که به کلید اصلی جدول والد اشاره میکند.
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
);
✅ در این مثال، customer_id یک کلید خارجی است که به customer_id در جدول customers اشاره میکند.
۳. نحوه عملکرد رابطه یک به چند در MySQL
۳.۱. درج دادهها در جدول والد
ابتدا دادههایی را در جدول customers وارد میکنیم:
INSERT INTO customers (name) VALUES ('علی احمدی');
INSERT INTO customers (name) VALUES ('زهرا مرادی');
✅ حالا جدول customers دو رکورد دارد.
۳.۲. درج دادهها در جدول فرزند
اکنون سفارشهایی را برای این مشتریان ثبت میکنیم:
INSERT INTO orders (customer_id, order_date) VALUES (1, '2024-03-10');
INSERT INTO orders (customer_id, order_date) VALUES (1, '2024-03-15');
INSERT INTO orders (customer_id, order_date) VALUES (2, '2024-03-20');
✅ در اینجا:
- دو سفارش برای مشتری با شناسه 1 (علی احمدی) ثبت شده است.
- یک سفارش برای مشتری با شناسه 2 (زهرا مرادی) ثبت شده است.
۳.۳. مشاهده اطلاعات جداول مرتبط
برای مشاهده تمام سفارشهای هر مشتری، میتوان از JOIN استفاده کرد:
SELECT customers.name, orders.order_id, orders.order_date
FROM customers
JOIN orders ON customers.customer_id = orders.customer_id;
✅ این کوئری اطلاعات مشتریان را با سفارشات مرتبط نمایش میدهد.
۴. مدیریت حذف دادهها در رابطه یک به چند
۴.۱. حذف والد با تنظیمات ON DELETE CASCADE
در طراحی رابطه یک به چند، ممکن است بخواهیم وقتی یک رکورد از جدول والد حذف شد، تمام رکوردهای مرتبط در جدول فرزند نیز حذف شوند.
در مثال بالا، هنگام ایجاد کلید خارجی در جدول orders از ON DELETE CASCADE استفاده کردیم. این یعنی اگر یک مشتری حذف شود، تمام سفارشات مرتبط با او نیز حذف خواهند شد.
DELETE FROM customers WHERE customer_id = 1;
✅ با اجرای این دستور، مشتری “علی احمدی” و تمام سفارشات مرتبط با او حذف خواهند شد.
۵. مزایای استفاده از رابطه یک به چند در MySQL
مزیت | توضیح |
---|---|
کاهش افزونگی دادهها | دادههای مشترک جدا شده و فقط از طریق کلید خارجی مرتبط میشوند. |
افزایش یکپارچگی دادهها | ارتباط بین جداول تضمین شده و از ورود دادههای نامعتبر جلوگیری میشود. |
مدیریت آسان دادهها | حذف و تغییر دادههای والد، دادههای مرتبط را نیز مدیریت میکند. |
اجرای سریعتر پرسوجوها | استفاده از JOIN برای جستجو و نمایش اطلاعات از چندین جدول بهینهتر است. |
۶. نتیجهگیری
رابطه یک به چند (One-to-Many) در MySQL به ما کمک میکند تا دادهها را بهینه و ساختاریافته ذخیره کنیم. این رابطه باعث کاهش افزونگی دادهها، افزایش یکپارچگی و بهبود کارایی جستجوها میشود.
مراحل پیادهسازی این رابطه در MySQL:
- ایجاد جدول والد با کلید اصلی (Primary Key).
- ایجاد جدول فرزند با کلید خارجی (Foreign Key).
- استفاده از ON DELETE CASCADE برای مدیریت حذف دادهها.
- استفاده از JOIN برای نمایش دادههای مرتبط.
با رعایت این اصول، میتوانید پایگاه دادهای بهینه، کارآمد و قابل مدیریت در MySQL طراحی کنید. 🚀