Siiski võib kergesti juhtuda, et NULLid ja tühjad stringid satuvad tabelisse juhuslikult ja kokkuvõttes on vaja kirjutada keerukamaid päringu tingimusi.
SELECT isik_id FROM Isik WHERE eesnimi='' OR eesnimi IS NULL;(leia isikud, kellel eesnimi puudub)
SELECT isik_id FROM Isik WHERE eesnimi<>'' AND eesnimi IS NOT NULL;(leia isikud, kellel on eesnimi olemas)
, selle asemel, et kirjutada lihtsalt:
SELECT isik_id FROM Isik WHERE eesnimi IS NULL;SELECT isik_id FROM Isik WHERE eesnimi IS NOT NULL;Minu soovitus:
- Keelake tekstilises veerus tühjad stringid ja tühimärkidest koosnevad stringid.
- Kui väärtused võivad puududa, siis lubage NULLe.
- Kui tabelis on veerg, millele vastavasse välja teatud ridade puhul väärtust kunagi ei teki, siis tuleb parandada andmebaasi disaini.
- liigutada veerg teise tabelisse ja muuta seal see veerg kohustuslikuks
- või luua algses tabelis seda olukorda kirjeldavad kitsendused
-
- kui (organisatsiooni) registrikood on määratud, siis isikukood peab puuduma.
- kui (isiku) isikukood on määratud, siis peab (organisatsiooni) registrikood puuduma.
Kui kehtib tingimus P, siis peab ka kehtima tingimus Q
Loogiliselt samaväärne kui: NOT (P) OR Q
CHECK (NOT (reg_kood IS NOT NULL) OR isikukood IS NULL)
CHECK (NOT (isikukood IS NOT NULL) OR reg_kood IS NULL)
Puuduvate andmete kohta saab pikemalt lugeda SIIT.