Sobes.tech
Junior

Kā tiek konfigurētas saistība starp tabulām relāciju datu bāzēs?

sobes.tech AI

Atbilde no AI

Relāciju datu bāzu sistēmās starp tabulām ir iespējots saistību izveide ar ārējiem atslēgām (Foreign Keys).

Ārējā atslēga — tas ir kolonna vai kolonu grupa vienā tabulā, kas norāda uz citas tabulas primāro atslēgu (Primary Key). Tā nosaka loģisko saiti starp ierakstiem divās tabulās.

Saistības konfigurēšanas laikā:

  1. Nosaka "mātes" (Parent) tabulā primāro atslēgu. Primārā atslēga unikāli identificē katru ierakstu.
  2. "Dēla" (Child) tabulā tiek izveidota kolonna (vai kolonu grupa), kas kļūs par ārējo atslēgu.
  3. Šī kolonna "dēla" tabulā ir saistīta ar "mātes" tabulas primāro atslēgu.
  4. Tiek uzstādīti datu integritātes ierobežojumi (Constraint):
    • REFERENCES: norāda, uz kuru tabulu un kuru kolonnu (primāro atslēgu) attiecas ārējā atslēga.
    • ON UPDATE behavior: nosaka, kas notiek "dēla" ierakstos, kad mainās "mātes" primārā atslēga. Varianti:
      • CASCADE: izmaiņas tiek izplatītas uz dēla ierakstiem.
      • SET NULL: ārējās atslēgas vērtība dēla tabulā tiek iestatīta uz NULL.
      • RESTRICT: operācija ir aizliegta, ja ir saistīti dēla ieraksti.
      • NO ACTION: līdzīgi kā RESTRICT lielākajā daļā DBMS.
      • SET DEFAULT: ārējās atslēgas vērtība tiek iestatīta uz noklusējuma vērtību.
    • ON DELETE behavior: nosaka, kas notiek "dēla" ierakstos, kad dzēš "mātes" ierakstu. Varianti ir tie paši, kas ON UPDATE.

SQL sintakses piemērs saistības izveidei:

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, // Klienta primārā atslēga
    customer_name VARCHAR(255)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT, // Ārējā atslēga, kas norāda uz Customers.customer_id
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
    ON UPDATE CASCADE // Kad mainās customer_id, tas mainās arī Orders
    ON DELETE CASCADE // Kad dzēš Customers, dzēš arī saistītos Orders
);

Tabulu starpības veidi:

Saistības veids Apraksts Piemērs
One-to-One (1:1) Viena ieraksts pirmajā tabulā atbilst vienam ierakstam otrajā un otrādi. Retas relāciju DB gadījumā. Lietotājs un viņa profils.
One-to-Many (1:N) Viena ieraksts pirmajā tabulā atbilst daudzām ierakstiem otrajā, bet katrs otrās tabulas ieraksts atbilst tikai vienam pirmajam. Klients un viņa pasūtījumi.
Many-to-Many (N:M) Daudzi ieraksti pirmajā tabulā atbilst daudzām otrajā, un otrādi. Realizējas caur starpības (saistīšanas) tabulu. Produkti un kategorijas.

Many-to-Many saistībai tiek izveidota trešā tabula, kas satur ārējās atslēgas abām saistītajām tabulā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 ( // Saistīšanas tabula
    product_id INT,
    category_id INT,
    PRIMARY KEY (product_id, category_id), // Kompozītmā primārā atslēga
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);