ارتباط یک به یک (One-to-One) در SQL
ارتباط یک به یک در SQL نشان دهندهی رابطهای بین دو جدول است که در آن هر رکورد در یک جدول تنها با یک رکورد خاص در جدول دیگر مرتبط است و بلعکس. به عبارت دیگر، هر ردیف در یک جدول فقط به یک ردیف در جدول دیگر متصل میشود و بالعکس.
در این نوع ارتباط، معمولا یکی از این راهکارها برای برقراری ارتباط بین جداول به کار گرفته میشود:
-
قرار دادن فیلد اضافی در یک جدول:
- در این روش، یک فیلد (ستون) اضافی به یکی از جداول اضافه میشود که به عنوان کلید خارجی (Foreign Key) عمل میکند و به کلید اصلی (Primary Key) جدول دیگر اشاره میکند.
- این روش برای سناریوهایی مناسب است که اطلاعات مرتبط با یک رکورد در جدول دیگر، حجم زیادی نداشته باشد و به صورت منطقی بخشی از همان رکورد تلقی شود.
-
ایجاد جدول واسط (Junction Table):
- در این روش، یک جدول واسط جداگانه برای برقراری ارتباط بین دو جدول اصلی ایجاد میشود.
- این جدول واسط، دارای دو کلید خارجی است که هر کدام به کلید اصلی یکی از جداول اصلی اشاره میکند.
- این روش برای سناریوهایی مناسب است که بخواهیم اطلاعات بیشتری راجع به ماهیت ارتباط بین دو رکورد ذخیره کنیم، یا بخواهیم این ارتباط به مرور زمان تغییر کند.
مثال:
فرض کنید دو جدول زیر را داریم:
- دانشجویان (Students): شامل اطلاعات دانشجو مانند نام، دانشجویی و …
- مشخصات (Details): شامل اطلاعات تکمیلی دانشجو مانند آدرس، شماره تلفن و …
برقراری ارتباط با فیلد اضافی:
در این مثال، میتوانیم فیلدی با عنوان DetailsID
را به جدول دانشجویان اضافه کنیم که به عنوان کلید خارجی عمل کرده و به کلید اصلی جدول مشخصات (فرض میکنیم DetailsID
کلید اصلی این جدول است) اشاره کند.
ساختار جداول:
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(۲۵۵) NOT NULL,
DetailsID INT UNIQUE,
FOREIGN KEY (DetailsID) REFERENCES Details(DetailsID)
);
CREATE TABLE Details (
DetailsID INT PRIMARY KEY,
Address VARCHAR(۲۵۵),
Phone VARCHAR(۲۰)
);
برقراری ارتباط با جدول واسط:
ایجاد یک جدول واسط به نام StudentDetails
برای برقراری ارتباط:
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(۲۵۵) NOT NULL
);
CREATE TABLE Details (
DetailsID INT PRIMARY KEY,
Address VARCHAR(۲۵۵),
Phone VARCHAR(۲۰)
);
CREATE TABLE StudentDetails (
StudentID INT,
DetailsID INT,
PRIMARY KEY (StudentID, DetailsID),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (DetailsID) REFERENCES Details(DetailsID)
);
انتخاب روش مناسب بستگی به نیازمندیهای خاص پایگاه داده شما دارد.
ارتباط یک به چند (One-to-Many) در SQL
ارتباط یک به چند (One-to-Many) یکی از رایجترین انواع ارتباطات بین جداول در پایگاه دادههای رابطهای است. در این نوع ارتباط، یک رکورد در یک جدول (جدول “یک”) میتواند با چند رکورد در جدول دیگر (جدول “چند”) مرتبط باشد، در حالی که هر رکورد در جدول “چند” تنها به یک رکورد خاص در جدول “یک” مرتبط است.
برای برقراری ارتباط یک به چند در SQL از کلیدهای خارجی (Foreign Key) استفاده میشود.
اجزا:
- جدول “یک” : شامل کلید اصلی (Primary Key) که هر رکورد را به طور منحصر شناسایی میکند.
- جدول “چند”: شامل کلید خارجی که به کلید اصلی جدول “یک” اشاره میکند. این کلید خارجی، رکوردهای مرتبط در دو جدول را با هم مرتبط میکند.
مثال:
فرض کنید دو جدول زیر را داریم:
- سفارشات (Orders): شامل اطلاعات سفارش مانند شماره سفارش، تاریخ سفارش و …
- اقلام سفارش (OrderItems): شامل اطلاعات اقلام هر سفارش مانند کد محصول، مقدار سفارش و …
ارتباط:
- هر سفارش (یک رکورد در جدول Orders) میتواند شامل چند قلم محصول (چند رکورد در جدول OrderItems) باشد.
- هر قلم محصول (یک رکورد در جدول OrderItems) تنها متعلق به یک سفارش خاص (یک رکورد در جدول Orders) است.
برقراری ارتباط:
در جدول اقلام سفارش (OrderItems)، ستونی با عنوان OrderID
به عنوان کلید خارجی اضافه میکنیم که به ستون OrderID
(فرض میکنیم OrderID
کلید اصلی جدول سفارشات است) در جدول سفارشات اشاره میکند.
ساختار جداول:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
... (other columns)
);
CREATE TABLE OrderItems (
OrderItemID INT PRIMARY KEY,
OrderID INT NOT NULL,
ProductID INT,
Quantity INT,
... (other columns),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
مزایای ارتباط یک به چند:
- جلوگیری از تکرار دادهها: با ذخیره اطلاعات مربوط به یک رکورد در یک جدول و ارجاع به آن از طریق کلید خارجی، از ذخیره سازی تکراری دادهها جلوگیری میشود.
- مدیریت آسان دادهها: به روز رسانی اطلاعات در جدول “یک” به طور خودکار در جداول مرتبط (“چند”) نیز اعمال میشود (بسته به قواعد حذف و به روز رسانی).
- دسترسی آسان به اطلاعات مرتبط: با استفاده از کلید خارجی میتوان به سادگی به اطلاعات مرتبط در جداول دیگر دسترسی پیدا کرد.
در سناریوهای مختلفی از ارتباط یک به چند در پایگاه دادهها استفاده میشود، از جمله:
- سفارشات و اقلام سفارش
- مشتریان و سفارشات
- دانشجویان و ثبتنام در دورهها
- و غیره
ارتباط چند به چند (Many-to-Many) در SQL
ارتباط چند به چند (Many-to-Many) یکی از انواع روابط بین جداول در پایگاه دادههای رابطهای است. در این نوع ارتباط، هر رکورد در یک جدول میتواند با چند رکورد در جدول دیگر مرتبط باشد، و بلعکس. به عبارت دیگر، یک رکورد در یک جدول ممکن است با چند رکورد در جدول دیگر مرتبط باشد، و بالعکس، یک رکورد در جدول دیگر نیز میتواند با چند رکورد در جدول اول مرتبط باشد.
از آنجایی که مدل relațional database بطور مستقیم روابط چند به چند را پشتیبانی نمیکند، برای برقراری این نوع ارتباط در SQL از یک جدول واسط (Junction Table) استفاده میشود.
اجزا:
- جدول اول: شامل کلید اصلی (Primary Key)
- جدول دوم: شامل کلید اصلی (Primary Key)
- جدول واسط (Junction Table): شامل دو کلید خارجی (Foreign Key) که هر کدام به کلید اصلی یکی از جداول اول و دوم اشاره می کند. این جدول واسط، رکوردهای مرتبط بین دو جدول اصلی را با هم مرتبط میکند.
مثال:
فرض کنید سه جدول زیر را داریم:
- دورهها (Courses): شامل اطلاعات دورهها مانند نام دوره، کد دوره و …
- دانشجویان (Students): شامل اطلاعات دانشجویان مانند نام، دانشجویی و …
- ثبتنام (Enrollments): جدول واسط برای برقراری ارتباط بین دورهها و دانشجویان
ارتباط:
- یک دوره (یک رکورد در جدول Courses) میتواند توسط چند دانشجو (چند رکورد در جدول Students) انتخاب شود.
- یک دانشجو (یک رکورد در جدول Students) میتواند در چند دوره (چند رکورد در جدول Courses) ثبتنام کند.
برقراری ارتباط:
ایجاد یک جدول واسط به نام Enrollments
برای برقراری ارتباط چند به چند:
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(۲۵۵) NOT NULL,
... (other columns)
);
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(۲۵۵) NOT NULL,
... (other columns)
);
CREATE TABLE Enrollments (
EnrollmentID INT PRIMARY KEY,
CourseID INT NOT NULL,
StudentID INT NOT NULL,
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);
در جدول Enrollments
هر رکورد نشان دهندهی ثبتنام یک دانشجو خاص (از طریق StudentID
) در یک دورهی خاص (از طریق CourseID
) است.
مزایای ارتباط چند به چند:
- انعطافپذیری بالا: این نوع ارتباط برای مدلسازی روابط پیچیده بین جداول مناسب است.
- حذف وابستگی مستقیم: جداول اصلی از یکدیگر مستقل هستند و میتوان آنها را به طور جداگانه مدیریت کرد.
استفاده از جدول واسط روشی استاندارد برای برقراری ارتباط چند به چند در SQL است. در برخی از سناریوها ممکن است راهحلهای دیگری نیز وجود داشته باشد، اما استفاده از جدول واسط روشی کلی و کارآمد برای مدیریت این نوع روابط به شمار میرود.