Apribojimai (Constraints) yra duomenų bazės taisyklės, kurios naudojamos duomenims lentelėse — garantuojančios duomenų integrumą duomenų bazės lygiu (ne tik programos kode). Pagrindiniai jų: PRIMARY KEY, FOREIGN KEY, UNIQUE, , ir .
Apribojimai (Constraints) yra duomenų bazės taisyklės, kurios naudojamos duomenims lentelėse — garantuojančios duomenų integrumą duomenų bazės lygiu (ne tik programos kode). Pagrindiniai jų: PRIMARY KEY, FOREIGN KEY, UNIQUE, , ir .
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
Duomenų bazės apribojimai yra paskutinė duomenų integrumo apsauga — jie yra atliekami, neatsižvelgiant į tai, kokia koda įterptas duomenys (kelios programos, skriptai, rankiniai pakeitimai ar klaidinga koda), ir jie atsižvelgia į lenktynės sąlygas, kurias programos lygio patikrinimas gali praleisti.
CHECK (price > 0) -- prices must be positive
CHECK (status IN ('active', 'inactive')) -- only valid statuses
CHECK (end_date > start_date) -- logical consistency
CHECK tiesiogiai schemoje naudojamas verslo/domenės taisyklėms.
Apribojimai yra būtini duomenų integrumui palaikyti — jie garantuoja, kad duomenų bazėje esantys duomenys atitinka taisykles (unikalumą, buvimą, galiojančias reikšmes, galiojančias nuorodas) duomenų bazės lygiu, o tai yra pagrindinė patikimos programos dalis, todėl jų supratimas yra svarbus.
Reikia žinoti apribojimų tipus (PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT) ir ką kiekvienas iš jų atliekami — tai būtina tinkamam schemos projektavimui.
Svarbiausias konceptualus punktas yra kodėl naudoti apribojimus duomenų bazės lygiu, o ne tik programos kode: duomenų bazės apribojimai yra paskutinė duomenų integrumo apsauga — jie visada atliekami, neatsižvelgiant į tai, kuri koda arba kiek programų pasiekia duomenys, jie užfiksina klaidas, kurias programos lygio patikrinimas gali praleisti, ir svarbiausia — jie tvarkosi su lenktynės sąlygomis, kurias programos lygio patikrinimas negali (pvz., du vienu metu vykdomi įterptos operacijos, kurie abu praeina programos lygio unikalumo patikrinimą, tačiau UNIQUE apribojimas teisingai atmeta pasikartojimą).
Tikėtis tik programos kodu skirtu integrumui yra rizikinga; apribojimai suteikia garantiją.
Supratimas apie CHECK apribojimus domenės/verslo taisyklėms (galiojantys diapazonai, leidžiamos reikšmės, loginė nuoseklumas) tiesiogiai schemoje yra taip pat vertingas.
Kadangi duomenų integrumas yra kritiškas patikimoms programoms ir kadangi apribojimai suteikia duomenų bazės lygio garantijas, kurios apsaugo nuo klaidų, lenktynės sąlygų ir nesuderinto duomenų, o tai programos koda viena negali, apribojimų supratimas — tipai, jų integrumo garantijos ir duomenų bazės lygio naudojimo svarbą — yra svarbi ir pagrindinė žinias tvartymo patikimų duomenų bazių ir yra svarbi dalis kuriant programas, kurių duomenys lieka nuoseklūs ir galiojantys.