Kodulehed
[382] - Andmebaasid I (ITI0206) (kevad 2022)
Esiletöstetud Kiirvalik
Lisainfo Kõige olulisemate tegevuste kiirvalik. Failide saatmiseks valige Vastamine alt sobiv ülesanne.
Üldist
Materjalid
LisainfoMaterjalide kataloogid
Isiklik
Lisainfo Info ainult Sulle - teised kasutajad seda ei näe
Abi
Lisainfo Võimalus küsida õppejõult abi (nagu foorum, kus saab küsida küsimusi ja kommenteerida vastuseid)
Mitmesugust
Abi / Kasutajatugi / Andmebaasi kavandamise sisulised küsimused

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Eerik Sven Puudist:
Kui tekstilist väärtust hoidev väli või olla ka tühi, kas parem on lubada NULL väärtust või tühja stringi? Kas võib olla põhjust lubada ka mõlemat?
Vastus: Tabeli väljast võivad väärtused puududa erinevatel põhjustel. Näiteks väärtus ei ole veel andmete sisestajateni jõudnud või sellist väärtust kunagi ei tekigi.  Üheks põhjenduseks, miks lubada tekstilises veerus NULLi ja tühja stringi oleks see, et need kodeerivad erinevaid puudumise põhjuseid.

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
Näiteks oletame, et tabelis Subjekt, kus on andmed nii füüsiliste isikute kui organisatsioonide kohta, on selline veerg nagu isiku isikukood. Parem oleks, kui oleks eraldi tabelid Osapool (isikute ja organisatsioonide ühiste atribuutide/seosetüüpide jaoks), Isik ja Organisatsioon. Veerg isikukood peaks olema tabelis Isik kohustuslik veerg. Kui tabelite struktuuri muutmine pole võimalik, siis tuleks jõustada reeglid nagu:
    • kui (organisatsiooni) registrikood on määratud, siis isikukood peab puuduma.
    • kui (isiku) isikukood on määratud, siis peab (organisatsiooni) registrikood puuduma.
P => Q
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.

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!