Kodulehed
[381] - Andmebaasid II (ITI0207) (sügis 2021)
Esiletöstetud Kiirvalik
Lisainfo Kõige olulisemate tegevuste kiirvalik. Failide saatmiseks valige Vastamine alt sobiv ülesanne.
Üldist
Materjalid
LisainfoMaterjalide kataloogid.
Värvilised mummud tähistavad hinnangulist kataloogide lugemise vajadust. Roheline - suurim, kollane - keskmine, punane või mummuta - väikseim
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 / Andmebaasisüsteemid (Üldine)

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Eerik Sven Puudist (16.01.2022 16:15):
Mille põhjal otsustada, kas kitsendus tuleks defineerida `DEFERRABLE` omadusega? Miks mitte määrata kõikide kitsenduste puhul `DEFERRABLE INITIALLY DEFERRED`?
Vastus: DEFERRABLE INITIALLY DEFERRED kitsenduse definitsioonis tähendaks seda, et kitsenduse kontroll lükkub transaktsiooni lõppu - transaktsioon võib sisaldada mitut andmemuudatust, transaktsiooni käigus võivad muudatused olla kitsendusega vastuolus, kuid kui transaktsiooni lõpuks on andmed kitsendusega kooskõlas, siis andmebaasisüsteem ei tee sellest numbrit. Vaikimisi (NOT DEFERRABLE omadus) kontrollib PostgreSQL kitsenduse täidetust kas iga rea muutmise järel (NOT NULL, CHECK, PRIMARY KEY, UNIQUE kitsendused) või andmete muutmise lause täitmise järel (FOREIGN KEY, EXCLUDE kitsendused).

Artiklis  Deferrable SQL Constraints in Depth tuuakse PostgreSQL näitel välja olukorrad, millal DEFFERRABLE kitsendusi kasutada ja millal mitte.

DEFERRABLE kitsenduste kasutamise näidete hulgas on:
  • andmete lisamine tabelitesse, mis kohustuslikke välisvõtmeid kasutades viitavad üksteisele (minu arvates peaks siinkohal üle vaatama andmebaasi struktuuri),
  • eksklusiivsete ressursside ümberjagamine rühmade vahel (iga ressurss saab olla seotud vaid ühe rühmaga),
  • unikaalsete järjekorranumbrite muutmine (parem lahendus võiks olla ujukomaarvude kasutamine järjekorranumbritena),
  • andmete uude andmebaasi laadimise mugavamaks tegemine.
DEFERRABLE kitsenduste probleemid on:
  • selline kitsenduse omadus võib takistada andmebaasisüsteemil kasutada seda kitsendust päringu optimeerimisel  ja seega suurendada päringu täitmiseks kuluvat aega (siin on näide selle kohta Oracles),
  • keerulisem silumine.
Veel võib esile tõsta ülekantavuse. Näiteks saab kitsenduse täitmise kontrolli lükata transaktsiooni lõppu:
  • Oracle 12c kõigi kitsenduse tüüpide puhul,
  • PostgreSQL 14 ei saa CHECK ja NOT NULL kitsenduste puhul,
  • MySQL 8 ei saa ühegi kitsenduse tüübi puhul.

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!