Constrângerile sunt reguli aplicate de baza de date asupra datelor din tabele — garantând integritatea datelor la nivel de bază de date (nu doar în codul aplicației). Principalele sunt: PRIMARY KEY, FOREIGN KEY, UNIQUE, , , și .
Constrângerile sunt reguli aplicate de baza de date asupra datelor din tabele — garantând integritatea datelor la nivel de bază de date (nu doar în codul aplicației). Principalele sunt: PRIMARY KEY, FOREIGN KEY, UNIQUE, , , și .
NOT NULLCHECKDEFAULTCREATE TABLE users (
id INT PRIMARY KEY, -- unique + not null identifier
email VARCHAR(255) UNIQUE NOT NULL, -- must be unique AND present
age INT CHECK (age >= 0 AND age <= 120), -- must satisfy a condition
country VARCHAR(2) DEFAULT 'US', -- default value if not provided
role VARCHAR(20) NOT NULL DEFAULT 'user',
manager_id INT REFERENCES users(id) -- FOREIGN KEY (referential integrity)
);
PRIMARY KEY → uniquely identifies a row (unique + not null, indexed)
FOREIGN KEY → references another table's key (referential integrity)
UNIQUE → no duplicate values allowed in this column
NOT NULL → the column must have a value (can't be NULL)
CHECK → the value must satisfy a condition (age >= 0, status IN (...))
DEFAULT → a value used when none is provided on insert
-- ❌ relying only on application code to enforce uniqueness:
-- a race condition or a bug or a different app could insert a duplicate
-- ✅ a UNIQUE constraint guarantees it at the DB level — ALWAYS enforced,
-- regardless of which code or how many apps access the database
email VARCHAR(255) UNIQUE
Constrângerile bazei de date sunt linia finală de apărare pentru integritatea datelor — sunt aplicate indiferent ce cod inserează date (mai multe aplicații, scripturi, modificări manuale, sau cod cu erori), și ele gestionează condiții de cursă critică pe care verificările la nivel de aplicație le ratează.
CHECK (price > 0) -- prices must be positive
CHECK (status IN ('active', 'inactive')) -- only valid statuses
CHECK (end_date > start_date) -- logical consistency
CHECK aplică reguli de afaceri/domeniu direct în schemă.
Constrângerile sunt esențiale pentru a menține integritatea datelor — garantează că datele din baza de date dvs. satisfac reguli (unicitate, prezență, valori valide, referințe valide) la nivel de bază de date, ceea ce este fundamental pentru aplicații fiabile, deci înțelegerea lor este importantă.
Cunoașterea tipurilor de constrângeri (PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT) și ce aplică fiecare este necesară pentru proiectarea corespunzătoare a schemei.
Punctul conceptual cel mai important este de ce să se aplice la nivel de bază de date în loc să se facă doar în codul aplicației: constrângerile bazei de date sunt linia finală de apărare pentru integritatea datelor — sunt întotdeauna aplicate indiferent de ce cod sau câte aplicații accesează datele, detectează erori pe care verificările aplicației ar putea rata, și în mod crucial gestionează condiții de cursă critică pe care validarea la nivel de aplicație nu poate (de ex. două inserări simultane ambele trecând o verificare de unicitate la nivel de aplicație, dar o constrângere UNIQUE respingând corect duplicatul).
A se baza doar pe codul aplicației pentru integritate este riscant; constrângerile oferă o garanție.
Înțelegerea constrângerilor CHECK pentru a aplica reguli de domeniu/afaceri (intervale valide, valori permise, coerență logică) direct în schemă este de asemenea valoroasă.
De vreme ce integritatea datelor este critică pentru aplicații fiabile, și de vreme ce constrângerile oferă garanții la nivel de bază de date care protejează împotriva erorilor, condiții de cursă critică, și date inconsistente în moduri pe care codul aplicației singur nu poate, înțelegerea constrângerilor — tipurile, garanțiile lor de integritate, și importanța aplicării la nivel de bază de date — este cunoștință importantă și fundamentală pentru proiectarea bazelor de date robuste și un aspect cheie al construirii aplicațiilor ale căror date rămân consistente și valide.