Junior
Cum se configurează relațiile dintre tabele în bazele de date relaționale?
sobes.tech AI
Răspuns de la AI
În bazele de date relaționale, relațiile dintre tabele sunt configurate folosind chei externe (Foreign Keys).
O cheie externă este o coloană sau un set de coloane într-un tabel care face referire la cheia primară (Primary Key) a altui tabel. Ea stabilește o legătură logică între înregistrările din două tabele.
La configurarea relației:
- Se definește cheia primară în tabelul "părinte" (Parent). Cheia primară identifică în mod unic fiecare înregistrare.
- În tabelul "fiu" (Child), se creează o coloană (sau un set de coloane) care va servi drept cheie externă.
- Această coloană în tabelul "fiu" se leagă de cheia primară a tabelului "părinte".
- Se stabilesc restricții de integritate a datelor:
- REFERENCES: Indică la ce tabel și coloană (cheie primară) face referire cheia externă.
- ON UPDATE behavior: Definește ce se întâmplă cu înregistrările din tabelul fiu când cheia primară din tabelul părinte este modificată. Opțiunile sunt:
CASCADE: Modificările se propagă în lanț către înregistrările fiu.SET NULL: Valorile cheii externe din tabelul fiu sunt setate la NULL.RESTRICT: Operația de modificare este interzisă dacă există înregistrări fiu legate.NO ACTION: Similar cu RESTRICT în majoritatea SGBD-urilor.SET DEFAULT: Valorile cheii externe sunt setate la valoarea implicită.
- ON DELETE behavior: Definește ce se întâmplă cu înregistrările din tabelul fiu când înregistrările din tabelul părinte sunt șterse. Opțiunile sunt aceleași ca pentru
ON UPDATE.
Exemplu de sintaxă SQL pentru crearea unei relații:
CREATE TABLE Customers (
customer_id INT PRIMARY KEY, -- Cheie primară în tabelul Customer
customer_name VARCHAR(255)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT, -- Cheie externă care face referire la customer_id în tabelul Customers
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
ON UPDATE CASCADE -- Când customer_id în Customers este modificat, se actualizează și în Orders
ON DELETE CASCADE -- Când un Customer este șters, se șterg și Orders asociate
);
Tipuri de relații între tabele:
| Tip de relație | Descriere | Exemplu |
|---|---|---|
| One-to-One (1:1) | O înregistrare în primul tabel corespunde exact unei înregistrări în al doilea și vice versa. Caz rar în bazele de date relaționale. | Utilizator și profilul său. |
| One-to-Many (1:N) | O înregistrare în primul tabel corespunde mai multor înregistrări în al doilea, dar fiecare înregistrare în al doilea corespunde doar uneia în primul. | Client și comenzile sale. |
| Many-to-Many (N:M) | Multe înregistrări în primul tabel corespund multor înregistrări în al doilea și vice versa. Se realizează printr-un tabel intermediar (de legătură). | Produse și categorii. |
Pentru relația Many-to-Many, se creează un al treilea tabel care conține chei externe către ambele tabele de legătură.
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 ( -- Tabel de legătură
product_id INT,
category_id INT,
PRIMARY KEY (product_id, category_id), -- Cheie primară compusă
FOREIGN KEY (product_id) REFERENCES Products(product_id),
FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);