Junior
როგორ არის კონფიგურირებული ცხრილებს შორის კავშირები რელაციურ მონაცემთა ბაზებში?
sobes.tech AI
პასუხი AI-სგან
Relational databases-ში, ცხრილების შორის კავშირები კონფიგურირებულია საგარეო გასაღებების (Foreign Keys) მეშვეობით.
საგარეო გასაღება — ეს არის სვეტი ან სვეტების ჯგუფი ერთ ცხრილში, რომელიც მიუთითებს სხვა ცხრილში არსებულ პირველკანონზე (Primary Key). ის ადგენს ლოგიკურ კავშირს ორ ცხრილში ჩანაწერებს შორის.
კავშირის კონფიგურაციის დროს:
- განსაზღვრულია "მშობელი" (Parent) ცხრილში პირველკანონი. პირველკანონი უნიკალურად იდენტიფიცირებს თითოეულ ჩანაწერს.
- "შვილი" (Child) ცხრილში ქმნიან სვეტს (ან სვეტების ჯგუფს), რომელიც იქნება საგარეო გასაღები.
- ეს სვეტი "შვილის" ცხრილში უკავშირდება "მშობლის" ცხრილის პირველკანონს.
- დამყარდება მონაცემთა მთლიანობის შეზღუდვები (Constraint):
- 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, // მყიდველის პირველი კოდი
customer_name VARCHAR(255)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT, // საგარეო გასაღები, რომელიც მიუთითებს Customers-ის customer_id-ზე
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
ON UPDATE CASCADE // როდესაც შეიცვლება customer_id-ი, ის შეიცვლება Orders-შიც
ON DELETE CASCADE // როდესაც წაიშლება Customer, წაიშლება დაკავშირებული Orders-იც
);
ტიპები კავშირების შორის ცხრილებში:
| კავშირის ტიპი | აღწერა | მაგალითი |
|---|---|---|
| One-to-One (1:1) | ერთი ჩანაწერი პირველ ტაბლეტში ემთხვევა ერთ ჩანაწერს მეორე ტაბლეტში და პირიქით. იშვიათი შემთხვევაა რელაციურ მონაცემთა ბაზებში. | მომხმარებელი და მისი პროფილი. |
| One-to-Many (1:N) | ერთი ჩანაწერი პირველ ტაბლეტში ემთხვევა მრავლის რაოდენობის ჩანაწერს მეორე ტაბლეტში, მაგრამ მეორე ტაბლეტში თითოეული ჩანაწერი მხოლოდ ერთს ემთხვევა პირველ ტაბლეტს. | მომხმარებელი და მისი შეკვეთები. |
| Many-to-Many (N:M) | მრავალი ჩანაწერი პირველ ტაბლეტში ემთხვევა მრავლობით ჩანაწერს მეორე ტაბლეტში, და პირიქით. რეალიზდება შუა (შეკავშირებელ) ტაბლეტით. | პროდუქტები და კატეგორიები. |
Many-to-Many კავშირისათვის ქმნიან მესამე ტაბლეტს, რომელიც შეიცავს საგარეო გასაღებს ორივე დაკავშირებულ ტაბლეტზე.
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)
);