Ograničenja su pravila koja baza podataka primjenjuje na podatke u tablicama — jamčeći integritet podataka na razini baze podataka (a ne samo u kodu aplikacije). Glavna ograničenja: PRIMARY KEY, FOREIGN KEY, UNIQUE, , i .
Ograničenja su pravila koja baza podataka primjenjuje na podatke u tablicama — jamčeći integritet podataka na razini baze podataka (a ne samo u kodu aplikacije). Glavna ograničenja: 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
Ograničenja baze podataka su posljednja linija obrane za integritet podataka — primjenjuju se bez obzira koji kod unosi podatke (više aplikacija, skripte, ručne izmjene ili greške u kodu), i hvataju race condition-e koje provjere na razini aplikacije propuste.
CHECK (price > 0) -- prices must be positive
CHECK (status IN ('active', 'inactive')) -- only valid statuses
CHECK (end_date > start_date) -- logical consistency
CHECK primjenjuje poslovna/domeninska pravila izravno u shemi.
Ograničenja su ključna za održavanje integriteta podataka — garantiraju da podaci u vašoj bazi podataka zadovoljavaju pravila (jedinstvenost, prisutnost, valjane vrijednosti, valjane reference) na razini baze podataka, što je temeljno za pouzdane aplikacije, pa je njihovo razumijevanje važno.
Znati vrste ograničenja (PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT) i što svako od njih primjenjuje nužno je za pravilno projektiranje sheme.
Najvažnija koncepcijska točka je zašto primjenjivati ograničenja na razini baze podataka umjesto samo u kodu aplikacije: ograničenja baze podataka su posljednja linija obrane za integritet podataka — uvijek se primjenjuju bez obzira koji kod ili koliko aplikacija pristupa podacima, hvataju greške koje provjere na razini aplikacije mogu propustiti, i ključno je što hvataju race condition-e koje validacija na razini aplikacije ne može (npr. dva istovremena unosa koja oba produ provjeru jedinstvenosti na razini aplikacije, ali UNIQUE ograničenje ispravno odbaci duplikat).
Oslanjanje samo na kod aplikacije za integritet je rizično; ograničenja pružaju jamstvo.
Razumijevanje CHECK ograničenja za primjenu poslovnih/domena pravila (valjani rasponi, dozvoljene vrijednosti, logička konzistentnost) izravno u shemi također je vrijedno.
Budući da je integritet podataka kritičan za pouzdane aplikacije, i budući da ograničenja pružaju jamstva na razini baze podataka koja štite od grešaka, race condition-a i nedosljednih podataka na način na koji sam kod aplikacije ne može, razumijevanje ograničenja — vrsta, njihovih jamstava integriteta i važnosti primjene ograničenja na razini baze podataka — je važno, temeljno znanje za projektiranje robusnih baza podataka i ključni aspekt izgradnje aplikacija čiji podaci ostaju konzistentni i valjani.