Sobes.tech
Junior

Kuidas seadistatakse seoseid tabelite vahel relatsioonandmetes?

sobes.tech AI

Vastus AI-lt

Suhted andmebaasis määratakse tabelite vahel väliste võtmete (Foreign Keys) abil.

Väline võti — see on veerg või veerurühm ühes tabelis, mis viitab teise tabeli primaarvõtmele (Primary Key). See määrab loogilise ühenduse kahe tabeli kirje vahel.

Seose seadistamisel:

  1. Määratakse "ema" (Parent) tabelis primaarvõti. Primaarvõti unikaalselt identifitseerib iga kirje.
  2. "Lapse" (Child) tabelis luuakse veerg (või veerurühm), mis hakkab olema väline võti.
  3. See veerg "lapse" tabelis on seotud "ema" tabeli primaarvõtmega.
  4. Seadistatakse andmete terviklikkuse piirangud (Constraint):
    • REFERENCES: näitab, millisele tabelile ja millisele veerule (primaarvõtmele) viitab väline võti.
    • ON UPDATE behavior: määrab, mis juhtub "lapse" kirjetega, kui muudetakse "ema" primaarvõtit. Variandid:
      • CASCADE: muudatused levivad "lapse" kirjetesse.
      • SET NULL: väline võti "lapse" tabelis seatakse NULL-iks.
      • RESTRICT: operatsioon on keelatud, kui on seotud "lapse" kirjeid.
      • NO ACTION: sarnane RESTRICT-ile enamikus andmebaasides.
      • SET DEFAULT: väline võti seatakse vaikimisi väärtusele.
    • ON DELETE behavior: määrab, mis juhtub "lapse" kirjetega, kui "ema" kirje kustutatakse. Variandid on samad, mis ON UPDATE-il.

SQL-i näide seose loomise kohta:

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, // Klienti identifitseeriv võti
    customer_name VARCHAR(255)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT, // Väline võti, mis viitab Customers.customer_id
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
    ON UPDATE CASCADE // Kui muudetakse customer_id, muudetakse ka Orders-is
    ON DELETE CASCADE // Kui kustutatakse Customer, kustutatakse ka seotud Orders
);

Tabelite vahelised seosed:

Seose tüüp Kirjeldus Näide
One-to-One (1:1) Üks kirje esimeses tabelis vastab ühele kirjele teises ja vastupidi. Harv relatsioonide andmebaasis. Kasutaja ja tema profiil.
One-to-Many (1:N) Üks kirje esimeses tabelis vastab paljudele kirjetel teises, kuid iga kirje teises tabelis vastab ainult ühe esimesele. Klient ja tema tellimused.
Many-to-Many (N:M) Paljud kirjed esimeses tabelis vastavad paljudele teises, ja vastupidi. Rakendatakse vahes tabeli kaudu. Tooteid ja kategooriaid.

Many-to-Many seose jaoks luuakse kolmas tabel, mis sisaldab väliseid võtmeid mõlemale seotud tabelile.

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 ( // Seosetabel
    product_id INT,
    category_id INT,
    PRIMARY KEY (product_id, category_id), // Koostööpõhine primaarvõti
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);