در پایگاه دادههای رابطهای، دادهها معمولاً در چندین جدول مختلف ذخیره میشوند. برای ایجاد ارتباط بین این جدولها از Relationship یا رابطه بین جداول استفاده میکنیم. در آموزش قبلی با مفهوم کلید خارجی (Foreign Key) آشنا شدیم.
در این آموزش قصد داریم انواع ارتباط بین جداول در SQL و Microsoft Access را بررسی کنیم و نحوه ایجاد یک رابطه چندبهچند (Many-to-Many Relationship) با استفاده از جدول واسط را یاد بگیریم.
📑 Table of Contents
انواع ارتباط بین جداول در پایگاه داده
در پایگاههای داده رابطهای سه نوع ارتباط اصلی بین جداول وجود دارد:
- رابطه یکبهیک (One-to-One)
- رابطه یکبهچند (One-to-Many)
- رابطه چندبهچند (Many-to-Many)
رابطه یکبهیک (One-to-One)
در رابطه یکبهیک، هر رکورد از یک جدول فقط با یک رکورد از جدول دیگر ارتباط دارد. این نوع رابطه معمولاً زمانی استفاده میشود که بخواهیم اطلاعات یک موجودیت را در چند جدول جداگانه ذخیره کنیم.
به عنوان مثال، میتوان اطلاعات عمومی کاربران را در جدول Users و اطلاعات اضافی آنها را در جدول UserDetails ذخیره کرد.
رابطه یکبهچند (One-to-Many)
رایجترین نوع ارتباط بین جداول، رابطه یکبهچند است. در این حالت یک رکورد از جدول والد میتواند با چندین رکورد از جدول فرزند مرتبط باشد.
برای مثال، هر مشتری میتواند چندین سفارش داشته باشد:
Customers
-----------
CustomerID (Primary Key)
CustomerName
Orders
-----------
OrderID (Primary Key)
CustomerID (Foreign Key)
OrderDate
در این مثال، فیلد CustomerID در جدول Orders یک کلید خارجی است که به جدول Customers اشاره میکند.
رابطه چندبهچند (Many-to-Many)
در رابطه چندبهچند، هر رکورد از جدول اول میتواند با چندین رکورد از جدول دوم مرتبط باشد و بالعکس.
به عنوان مثال، در یک سیستم فروش:
- هر سفارش میتواند شامل چند محصول باشد.
- هر محصول نیز میتواند در چند سفارش مختلف وجود داشته باشد.
بنابراین بین جدولهای Orders و Products یک رابطه چندبهچند وجود دارد.
چرا به جدول واسط نیاز داریم؟
در پایگاههای داده رابطهای نمیتوانیم یک کلید خارجی داشته باشیم که به چندین رکورد اشاره کند. بنابراین برای پیادهسازی رابطه چندبهچند از یک جدول سوم به نام جدول واسط (Junction Table) استفاده میکنیم.
در مثال سفارش و محصول، جدول واسط را OrderDetails نامگذاری میکنیم.
طراحی جداول Orders، Products و OrderDetails
CREATE TABLE Products (
ProductID LONG NOT NULL,
ProductName VARCHAR(100),
Price CURRENCY,
PRIMARY KEY (ProductID)
);
CREATE TABLE Orders (
OrderID LONG NOT NULL,
OrderDate DATETIME,
PRIMARY KEY (OrderID)
);
اکنون جدول واسط را ایجاد میکنیم. این جدول شامل دو کلید خارجی است که به دو جدول اصلی متصل میشوند.
CREATE TABLE OrderDetails (
OrderID LONG NOT NULL,
ProductID LONG NOT NULL,
Quantity INTEGER,
UnitPrice CURRENCY,
PRIMARY KEY (OrderID, ProductID),
FOREIGN KEY (OrderID)
REFERENCES Orders(OrderID),
FOREIGN KEY (ProductID)
REFERENCES Products(ProductID)
);
کلید اصلی مرکب (Composite Primary Key)
در جدول OrderDetails از دو فیلد OrderID و ProductID به عنوان کلید اصلی استفاده کردیم. به چنین کلیدی کلید اصلی مرکب (Composite Primary Key) گفته میشود.
دلیل استفاده از کلید مرکب این است که یک محصول فقط یک بار میتواند در یک سفارش ثبت شود و ترکیب این دو مقدار باید یکتا باشد.
ایجاد رابطه چندبهچند در Microsoft Access
در Microsoft Access نیز برای ایجاد رابطه چندبهچند باید ابتدا جدول واسط ایجاد کنیم. سپس از پنجره Relationships دو رابطه یکبهچند ایجاد میکنیم:
- رابطه بین Orders و OrderDetails
- رابطه بین Products و OrderDetails
در هر دو رابطه باید گزینه Enforce Referential Integrity فعال شود تا یکپارچگی دادهها حفظ گردد.
نمایش اطلاعات چند جدول با استفاده از JOIN
پس از ایجاد ارتباط بین جداول، میتوانیم اطلاعات را از چند جدول مختلف با استفاده از دستور JOIN استخراج کنیم.
SELECT
Orders.OrderID,
Products.ProductName,
OrderDetails.Quantity
FROM
(Orders
INNER JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID)
INNER JOIN Products
ON OrderDetails.ProductID = Products.ProductID;
در آموزشهای بعدی به صورت کامل با انواع JOIN در SQL و نحوه اتصال چند جدول در Microsoft Access آشنا خواهیم شد.
بیشتر بخوانید
آموزش SQL در Microsoft Access: انواع JOIN (Inner, Left, Right) و اتصال چند جدول
آموزش SQL: ارتباط بین جداول و کلید خارجی (Foreign Key)
آموزش SQL در Microsoft Access: کاربرد جزء WHERE در SQL
آموزش SQL در Microsoft Access: دستور SELECT و اجزاء مختلف آن
آموزش SQL در Microsoft Access: ایندکسها و مدیریت آنها
آموزش SQL در Microsoft Access: کلید اصلی (Primary Key)
آموزش SQL در Microsoft Access: ایجاد/افزودن دادهها در جداول