Oda NULL

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

3 Responses to Oda NULL

  1. simbel says:

    Oo, interesants skatpunkts no loģisko vērtību aspekta uz vienu no tipiskākajiem demagoģijas paņēmieniem, t.i., ‘loaded question’ (:
    Paldies.

  2. Gints Plivna says:

    Paldies, Simbel, par uzvedināšanu uz jaunām teorijas zināšanām! Kas zina, varbūt kādreiz kādā diskusijā nāksies pielietot🙂

  3. […] Kas notiek ar NULLiem dažādās funkcijās (paldies, Gint!), vai var taisīt substr no null un vai nullif (1,null) ir tāds pats, kā nullif(null,1)? Ja concat pieliek null, vai viss rezultāts kļūst null? […]

Komentēt

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Mainīt )

Twitter picture

You are commenting using your Twitter account. Log Out / Mainīt )

Facebook photo

You are commenting using your Facebook account. Log Out / Mainīt )

Google+ photo

You are commenting using your Google+ account. Log Out / Mainīt )

Connecting to %s

%d bloggers like this: