Constraints ni kanuni zinazotekelezwa na hifadhidata kwenye data katika jedwali — zikihakikisha uadilifu wa data katika kiwango cha hifadhidata (si tu katika code ya programu). Kuu ni: PRIMARY KEY, FOREIGN KEY, UNIQUE, , , na .
Constraints ni kanuni zinazotekelezwa na hifadhidata kwenye data katika jedwali — zikihakikisha uadilifu wa data katika kiwango cha hifadhidata (si tu katika code ya programu). Kuu ni: PRIMARY KEY, FOREIGN KEY, UNIQUE, , , na .
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
Constraints za hifadhidata ni safu ya mwisho ya ulinzi kwa uadilifu wa data — zinatekelezwa bila kujali ni code ipi inayoingiza data (programu nyingi, scripts, mabadiliko ya mkono, au code yenye hitilafu), na hushughulikia race conditions ambazo ukaguzi wa kiwango cha programu hukosa.
CHECK (price > 0) -- prices must be positive
CHECK (status IN ('active', 'inactive')) -- only valid statuses
CHECK (end_date > start_date) -- logical consistency
CHECK hutekeleza kanuni za biashara/domain moja kwa moja katika schema.
Constraints ni muhimu kwa kudumisha uadilifu wa data — zinahakikisha kwamba data katika hifadhidata yako inakidhi kanuni (upekee, uwepo, thamani halali, marejeleo halali) katika kiwango cha hifadhidata, jambo ambalo ni la msingi kwa programu zinazoaminika, hivyo kuzielewa ni muhimu.
Kujua aina za constraint (PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT) na kila moja inachotekeleza ni muhimu kwa muundo bora wa schema.
Hoja muhimu zaidi ya kidhana ni kwa nini kutekeleza katika kiwango cha hifadhidata badala ya katika code ya programu pekee: constraints za hifadhidata ni safu ya mwisho ya ulinzi kwa uadilifu wa data — zinatekelezwa daima bila kujali ni code ipi au programu ngapi zinazofikia data, hukamata hitilafu ambazo ukaguzi wa programu unaweza kukosa, na kwa umuhimu hushughulikia race conditions ambazo uthibitishaji wa kiwango cha programu hauwezi (mfano inserts mbili za wakati mmoja zote zikipita ukaguzi wa upekee wa kiwango cha programu lakini constraint ya UNIQUE ikikataa nakala kwa usahihi).
Kutegemea code ya programu pekee kwa uadilifu ni hatari; constraints hutoa uhakikisho.
Kuelewa CHECK constraints kwa kutekeleza kanuni za domain/biashara (mipaka halali, thamani zinazoruhusiwa, uthabiti wa kimantiki) moja kwa moja katika schema pia ni cha thamani.
Kwa kuwa uadilifu wa data ni muhimu kwa programu zinazoaminika, na kwa kuwa constraints hutoa uhakikisho wa kiwango cha hifadhidata unaolinda dhidi ya hitilafu, race conditions, na data isiyo na uthabiti kwa njia ambazo code ya programu pekee haiwezi, kuelewa constraints — aina zake, uhakikisho wake wa uadilifu, na umuhimu wa utekelezaji wa kiwango cha hifadhidata — ni maarifa muhimu, ya kimsingi kwa kubuni hifadhidata imara na kipengele muhimu cha kujenga programu ambazo data yake hubaki na uthabiti na uhalali.