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:
- Määratakse "ema" (Parent) tabelis primaarvõti. Primaarvõti unikaalselt identifitseerib iga kirje.
- "Lapse" (Child) tabelis luuakse veerg (või veerurühm), mis hakkab olema väline võti.
- See veerg "lapse" tabelis on seotud "ema" tabeli primaarvõtmega.
- 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)
);