Sobes.tech
Junior

როგორ არის კონფიგურირებული ცხრილებს შორის კავშირები რელაციურ მონაცემთა ბაზებში?

sobes.tech AI

პასუხი AI-სგან

Relational databases-ში, ცხრილების შორის კავშირები კონფიგურირებულია საგარეო გასაღებების (Foreign Keys) მეშვეობით.

საგარეო გასაღება — ეს არის სვეტი ან სვეტების ჯგუფი ერთ ცხრილში, რომელიც მიუთითებს სხვა ცხრილში არსებულ პირველკანონზე (Primary Key). ის ადგენს ლოგიკურ კავშირს ორ ცხრილში ჩანაწერებს შორის.

კავშირის კონფიგურაციის დროს:

  1. განსაზღვრულია "მშობელი" (Parent) ცხრილში პირველკანონი. პირველკანონი უნიკალურად იდენტიფიცირებს თითოეულ ჩანაწერს.
  2. "შვილი" (Child) ცხრილში ქმნიან სვეტს (ან სვეტების ჯგუფს), რომელიც იქნება საგარეო გასაღები.
  3. ეს სვეტი "შვილის" ცხრილში უკავშირდება "მშობლის" ცხრილის პირველკანონს.
  4. დამყარდება მონაცემთა მთლიანობის შეზღუდვები (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)
);