NULL praktiskā pielietošana

Aprīlis 9, 2008

Iepriekšējā rakstā par NULL bija neliels teorētiskais pamatojums, kas tas tāds ir un ko ziemā ēd. Tagad ķersimies pie praktiskākām lietām, lai saprastu kā ar Null jādarbojas un kādi potenciāli zemūdens akmeņi zem Null var slēpties, kas var būt gana sāpīgi, ja tos laikus nepamana.

Salīdzināšana ar NULL

Parasta salīdzināšana (“=”, zīme vienāds) ar Null vienmēr rezultātā dod Null. Kas arī ir visnotaļ loģiski, jo Null nozīmē nezināms, nepielietojams, trūkstošs, līdz ar to mēs neko nevaram pateikt, vai dotā vērtība ir tāda pati kā Null, vai nē. Un vēl trakāk – pat divus Null salīdzinot savā starpā rezultāts arī ir Null, kas atkal ir loģiski, jo nevar taču zināt vai viens nezināmais ir tas pats, kas otrs nezināmais.
Lasīt pārējo šī ieraksta daļu »


Oda NULL

Aprīlis 1, 2008

It is neither nothing nor something;
It is neither a good thing nor a bad thing;
It is neither a big thing nor a small thing;
But it is something we have to deal with among all things.

It is neither a lender nor a borrower;
It is neither a zero nor a blank;
It is neither here nor there;
But, in programming, it is everywhere.

Izvilkums no vēstules, kas rakstīta oracle-l listē. Autors Ram Srinivasan.

Pārējos līdzīgos rakstus var lasīt SQL pamatos.

Kas ir Null?

Latviski Null varētu nosaukt kā tukšumu, vai arī atstāt tāpat kā angliski, šķiet vismaz apstiprināta atbilstoša precīza termina īsti nav. Kas tad tomēr tas īsti ir?

  • Null (citās programmēšanas valodās nil, nothing, void) ir speciāla vērtība, kas norāda to, ka konkrētajā gadījumā tā nav zināma, nav pielietojama vai ir trūkstoša.

Kas Null nav?

  • Null nav tas pats, kas skaitlis 0 (nulle).
  • Saskaņā ar SQL standartu NULL nav tas pats, kas tukša virkne ”. Kaut gan tas ir atkarīgs no izmantojamās DBVS, Oraclē NULL ir tas pats, kas tukša virkne ”.
  • NULL nav tas pats, kas tukšuma zīme ‘ ‘. Ievērojam, ka iepriekšējā teikumā starp apostrofiem nekā nav, savukārt šeit ir viena tukšuma zīme (space).
  • Null nav tas pats, kas speciāls datums, piemēram nulltais gads, jo tāds gads vispār nav eksistējis.

Iemesli, kāpēc kāda tabulas rinda konkrētā kolonā satur vērtību Null var būt dažādi, tai skaitā:

  • Vērtība nav zināma konkrētā brīdī, piemēram, personas Jāņa Bērziņa personas kods mums nav zināms, kaut gan viņam tāds ir.
  • Vērtība vēl nav iedota, piemēram, darbiniekam Guntim Kalniņam nav zināms viņa priekšnieks, jo darbinieks nupat tikai ir pieņemts darbā.
  • Vērtība nav zināma kā tāda un arī nebūs zināma, piemēram , personai Rainis īstajā vārdā Jānis Pliekšāns personas kods netika piešķirts, jo brīdī, kad tos sāka piešķirt, viņš jau bija pamanījies nomirt.
  • Vērtība nav piemērojama kā tāda, piemēram, personai Jānim Bērziņam datums, kad notika pēdējā apskate pie ginekologa, nav pielietojams.

Null un loģiskās vērtības

Moto: Vai tu priekšpusdienās esi beigusi dzert konjaku, “jā” vai “nē”?

Karlsona jautājums Bokas jaunkundzei Astrīdas Lindgrēnes stāstā “Karlsons, kas dzīvo uz jumta, lodā atkal”.

Kā zināms loģiskās vērtības ir divas Patiess un Aplams. Diemžēl ne vienmēr visur der tikai šīs divas vērtības, var gadīties tā, ka ar Jā vai Nē (Patiess vai Aplams) nevar uz jautājumu atbildēt. Klasisks piemērs ir redzams šīs sadaļas moto. Ja atbilde ir Jā, tātad Tu esi beidzis dzert konjaku un pirms tam dzēri. Ja atbilde ir nē, tātad dzer vēl joprojām? Diez kas nav – katrā ziņā man šāda “izvēles” iespēja ļoti nepatiktu.

Amerikāņiem ir līdzīgs jautājums – vai esi beidzis sist savu sievu? Kā redzams šajā gadījumā Null var būt pat vairāku atšķirīgu iemeslu dēļ:

  • Tu esi sieviete un tev sievas vienkārši nevar būt (Mani uzskati šai ziņā ir visnotaļ konservatīvi :) .
  • Tu esi vīrietis, bet neesi precējies.
  • Tu esi vīrietis, bet nekad savu sievu neesi sitis.

Tā visa rezultātā loģisko vērtību aprēķini kļūst mazliet sarežģitāki, jo nu jau ir trīs vērtību loģika, kas vienkāršās operācijas mazliet sarežģī un iespējams padara mazliet mazāk intuitīvas. Tātad pieņemot, ka mums ir divi predikāti p un q, kuriem var būt vērtības Patiess (P), Aplams (A) un NULL, loģiskā UN (AND), VAI (OR) un NE (NOT) ir redzama nākošajā tabulās.

Loģiskais AND trīs vērtību loģikā. Kā redzams galvenais vinnētājs ir Aplams.

p AND q p
Patiess Aplams Null
q Patiess Patiess Aplams Null
Aplams Aplams Aplams Aplams
Null Null Aplams Null

Loģiskais OR trīs vērtību loģikā. Šoreiz vinnē Patiess.

p OR q p
Patiess Aplams Null
q Patiess Patiess Patiess Patiess
Aplams Patiess False Null
Null Patiess Null Null

Loģiskais NOT trīs vērtību loģikā. Jāuzmanās no tā, ka NOT NULL arī ir NULL

p NOT p
Patiess Aplams
Aplams Patiess
Null Null

Par NULL praktiskajiem aspektiem, kāpēc NULL ir jāsaprot, kāpēc ar to ir jāiemācās sadzīvot un kāpēc tas bieži vien ir labāks par dažādiem surogātaizstājējiem:

Turpmākā lasāmviela