- Cheia primară (PK): identifică unic fiecare rând (
PRIMARY KEY). - Cheia externă (FK): referă o cheie primară dintr-o altă tabelă (
FOREIGN KEY ... REFERENCES). - Constrângeri de integritate: reguli care păstrează corectitudinea:
- integritatea referențială (un FK trebuie să existe ca PK)
NOT NULL,UNIQUE,CHECK
sql.py
CREATE TABLE Student (
id INTEGER PRIMARY KEY,
nume TEXT NOT NULL,
curs_id INTEGER REFERENCES Curs(id)
);
python.py
# Simulam integritatea referentiala inainte de a trimite un INSERT la baza de date
studenti_existenti = {1: "Ana", 2: "Radu"}
cursuri_existente = {"BD", "IA"}
def poate_insera_student(id_student, curs_id, studenti, cursuri):
if id_student in studenti:
print(f"Eroare: id {id_student} exista deja (incalca PRIMARY KEY)")
return False
if curs_id not in cursuri:
print(f"Eroare: cursul '{curs_id}' nu exista (incalca FOREIGN KEY)")
return False
return True
print(poate_insera_student(3, "BD", studenti_existenti, cursuri_existente))
print(poate_insera_student(1, "BD", studenti_existenti, cursuri_existente))
Dacă ștergi un rând referențiat de o cheie externă, baza de date va refuza (sau va șterge în cascadă, dacă e设定 așa). Asta e integritatea referențială.
Cum recunoști rapid PK vs. FK
Cheia primară (PK) apare o singură dată pe rând și nu se repetă niciodată în tabelă — e „identitatea” rândului. Cheia externă (FK) se poate repeta de multe ori (ex. mai mulți studenți au același curs_id), pentru că ea exprimă o legătură către altă tabelă, nu o identitate proprie. Dacă o coloană se repetă des în date de test, e semn că e FK, nu PK.
