← Natrag
AI

NULL stupci ignoriraju jedinstvene ograničenja

Damir Radulić· 21. listopada 2026.· 2 min čitanja· 36 pregleda
NULL stupci ignoriraju jedinstvene ograničenja

U relacijskim bazama podataka, UNIQUE ograničenje osigurava da svaka vrijednost u određenoj koloni bude jedinstvena. Međutim, kada kolona dopušta NULL vrijednosti, ponašanje se može činiti nepredvidljivim. U mnogim sustavima, NULL se ne smatra jedinstvenom vrijednošću, što znači da više redaka može imati NULL bez izazivanja greške. To je razlog zašto se duplicate mogu pojaviti i ne primjećuju se.

Zašto se duplicate ne blokiraju?

Standard SQL definira NULL kao "neodređenu" vrijednost. U kontekstu jedinstvenog ograničenja, NULL se tretira kao posebna vrijednost koja se ne uspoređuje s drugim NULL vrijednostima. Stoga, kada se unosi više redaka s NULL u kolonu označenu kao UNIQUE, baza podataka ne smatra da se radi o duplikatu i dopušta unos.

Posljedice za poslovne aplikacije

Ova osobina može dovesti do nepredvidivih rezultata u aplikacijama koje se oslanjaju na jedinstvene identifikatore. Na primjer, sustavi za upravljanje korisnicima mogu izravno prihvatiti više korisnika s NULL korisničkim ID-om, što otežava pretragu i analizu podataka.

Kako otkriti problem?

Jedan od najjednostavnijih načina je pregledavanje indeksa i ograničenja u tablici. U većini DBMS-ova, naredba poput SHOW CREATE TABLE tablename; otkriva da je kolona označena kao UNIQUE i dopušta NULL. Također, možete izvesti upit koji broji NULL vrijednosti: SELECT COUNT(*) FROM tablename WHERE column IS NULL;. Ako je rezultat veći od jedne, znate da postoji potencijalni problem.

Rešenja za ispravljanje

  • Ograničite NULL vrijednosti – Dodajte NOT NULL u definiciju kolone. To će spriječiti unos NULL i osigurati da UNIQUE ograničenje funkcionira ispravno.
  • Koristite CHECK ograničenje – Ako je NULL dopušten, možete dodati CHECK (column IS NOT NULL OR (SELECT COUNT(*) FROM tablename WHERE column IS NULL) = 1) kako biste dozvolili samo jedan NULL.
  • Primijenite UNIQUE na kombinaciju – Ako je NULL prihvatljiv u nekim slučajevima, razmislite o kombiniranju kolone s dodatnom kolonom u UNIQUE ograničenju.
  • Koristite ON CONFLICT ili MERGE – U PostgreSQL-u, INSERT ... ON CONFLICT DO NOTHING može spriječiti duplikate. U SQL Serveru, MERGE može biti koristan za upravljanje konfliktima.

Primjer u PostgreSQL-u

Prvo, definirajte tablicu:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email VARCHAR(255) UNIQUE,
    name VARCHAR(100)
);

Ovdje je email jedinstvena, ali dopušta NULL. Da biste spriječili duplikate, možete:

ALTER TABLE users ALTER COLUMN email SET NOT NULL;

ili, ako želite dozvoliti jedan NULL:

ALTER TABLE users ADD CONSTRAINT unique_email_null UNIQUE (email)
    WHERE email IS NOT NULL;

Zaključak

Razumijevanje kako NULL i UNIQUE međusobno djeluju ključ je za izgradnju pouzdanih baza podataka. Pravilnim postavljanjem ograničenja, izbjegavate nepredviđene duplikate i osiguravate integritet podataka.

Jeste li primijetili slične probleme u svojim projektima? Podijelite iskustvo u komentarima i otkrijte kako RiNET može pomoći u optimizaciji vaših baza podataka.

NULL stupcijedinstvena ograničenjabaza podatakadeduplikacijaSQL

Zanima vas ovakva AI tehnologija?

RiNET gradi sovereign AI rjesenja za javni sektor i poduzeca - od civic intelligence do automatizacije nabave.

Kontaktirajte nas →
0 komentara

Komentari