Sobes.tech
Junior

Как се настройват връзките между таблиците в релационните бази данни?

sobes.tech AI

Отговор от AI

В релационните бази данни връзките между таблиците се настройват чрез външни ключове (Foreign Keys).

Външният ключ е колона или набор от колони в една таблица, които се отнасят към първичния ключ (Primary Key) на друга таблица. Той създава логическа връзка между записите в двата таблици.

При настройване на връзката:

  1. Определя се първичният ключ в "родителската" (Parent) таблица. Той уникално идентифицира всеки запис.
  2. В "дъщерната" (Child) таблица се създава колона (или набор от колони), която ще служи като външен ключ.
  3. Тази колона се свързва с първичния ключ на "родителската" таблица.
  4. Задават се ограничения за цялостта на данните (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, тя ще се промени и тук
    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)
);