Junior
Чӣ гуна пайвандҳо байни ҷадвалҳо дар базаҳои додаҳои муоширатӣ танзим мешаванд?
sobes.tech AI
Ҷавоб аз AI
Дар relational базасодод, пайвандҳо байни ҷадвалҳо тавассути калидҳои хориҷӣ (Foreign Keys) танзим карда мешаванд.
Калиди хориҷӣ — ин сутун ё маҷмӯи сутунҳо дар як ҷадвалест, ки ба калиди аввалиндараҷа (Primary Key) дар ҷадвали дигар ишора мекунад. Ин пайвандро байни сабтҳо дар ду ҷадвал барқарор мекунад.
Ҳангоми танзими пайванд:
- Калиди аввалдараҷа дар ҷадвали "падар" (Parent) муайян карда мешавад. Ин калид ҳар сабтро ба таври ягона муайян мекунад.
- Дар ҷадвали "ҳомила" (Child) як сутун (ё маҷмӯи сутунҳо) эҷод мешавад, ки ҳамчун калиди хориҷӣ хизмат мекунад.
- Ин сутун бо калиди аввалдараҷа дар ҷадвали "падар" пайваст карда мешавад.
- Маҳдудиятҳои муттаҳидӣ (Constraints) муқаррар карда мешаванд:
- REFERENCES: нишон медиҳад, ки ба кадом ҷадвал ва кадом сутун (калиди аввалдараҷа) ишора мекунад калиди хориҷӣ.
- ON UPDATE behavior: муайян мекунад, ки вақте калиди аввалдараҷа дар ҷадвали "падар" тағир меёбад, чӣ рӯй медиҳад. Вариантҳо:
CASCADE: тағирот ба таври каскадӣ ба сабтҳои ҷадвали "ҳомила" татбиқ мешавад.SET NULL: арзишҳои калиди хориҷӣ дар ҷадвали "ҳомила" ба NULL тағир меёбанд.RESTRICT: тағирот манъ аст, агар сабтҳои пайвандшуда мавҷуд бошанд.NO ACTION: монанди RESTRICT дар аксари системаҳои додаҳо.SET DEFAULT: арзишҳои калиди хориҷӣ ба арзиши пешфарз тағир меёбанд.
- ON DELETE behavior: муайян мекунад, ки вақте сабти ҷадвали "падар" нест карда мешавад, чӣ рӯй медиҳад. Вариантҳо ҳамонҳо бо
ON UPDATE.
Намунаи синтаксисии SQL барои эҷоди пайванд:
CREATE TABLE Customers (
customer_id INT PRIMARY KEY, // Калиди аввалдараҷа дар ҷадвали Customers
customer_name VARCHAR(255)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT, // Калиди хориҷӣ, ки ба customer_id дар ҷадвали Customers ишора мекунад
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
ON UPDATE CASCADE // Вақте ки customer_id дар Customers тағир меёбад, дар Orders ҳам тағир меёбад
ON DELETE CASCADE // Вақте ки Customer нест карда мешавад, Orders ҳам нест карда мешаванд
);
Намудҳои пайванд байни ҷадвалҳо:
| Навъи пайванд | Тавсиф | Намуна |
|---|---|---|
| One-to-One (1:1) | Як сабт дар аввалин ҷадвал ба як сабт дар дуввум ва баръакс мувофиқат мекунад. Дар базаҳои маълумоти реляционӣ кам истифода мешавад. | Истифодабаранда ва профили ӯ. |
| One-to-Many (1:N) | Як сабт дар аввалин ҷадвал ба чанд сабт дар дуввум мувофиқат мекунад, аммо ҳар сабт дар дуввум танҳо ба як сабт дар аввал тааллуқ дорад. | Мизоҷ ва фармоишҳояш. |
| Many-to-Many (N:M) | Миқдори сабтҳо дар аввалин ҷадвал ба миқдори сабтҳо дар дуввум мувофиқат мекунанд ва баръакс. Ин тавассути ҷадвали миёна (пайвасткунанда) амалӣ мешавад. | Маҳсулот ва категорияҳо. |
Барои пайванд N:M, сеюм ҷадвал эҷод мешавад, ки дорои калидҳои хориҷӣ ба ҳар ду ҷадвал мебошад.
CREATE TABLE Products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255)
);
CREATE TABLE Categories (
category_id INT PRIMARY KEY,
category_name VARCHAR(255)
);
CREATE TABLE ProductCategories ( // Ҷадвали пайвасткунанда
product_id INT,
category_id INT,
PRIMARY KEY (product_id, category_id), // Калиди асосии маҷмӯӣ
FOREIGN KEY (product_id) REFERENCES Products(product_id),
FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);