Kodulehed
[386] - Andmebaasid I (ITI0206) (kevad 2024)
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

Anonüümne (10.02.2024 10:37):
Kas SQL-andmebaasis saab jõustada deklaratiivsete kitsendustena assotisatsioonireegleid?
Vastus (29.02.2024 18:44): Jah saab.

Vaatame konkreetset näidet. Oletame, et SQL-andmebaasis on tabel Kaup:

Kaup(kauba_kood, hind, on_aktiivne)
Primaarvõti(kauba_kood)

Oletame, et kehtib reegel: Kui kaup on aktiivne, siis selle hind peab olema registreeritud.

"kaup on aktiivne" ja "hind peab olema registreeritud" on tingimused.
Tähistame neid tähtedega P ja Q.
 
Reegel "Kui kaup on aktiivne, siis selle hind peab olema registreeritud" on assotsiatsioonireegel (association rule).
 
See reegel ütleb, et kui kehtib tingimus P, siis peab kehtima ka tingimus Q.

Selle saab üldkujul kirja panna P=>Q
 
=> on implikatsiooni operaator. Sellist operaatorit SQL keeles kasutada ei saa, küll aga saab kasutada loogikaoperaatoreid AND, OR ja NOT.
 
P=>Q on loogiliselt samaväärne kui NOT (P) OR Q

Seda, et need on loogiliselt samaväärsed, näitab lisatud failis olev loogikatabel e tõeväärtustabel. Sellises tabelis esitatakse loogikafunktsiooni kõik võimalikud väljundväärtused. 

Seega saaks andmebaasis tabeli Kaup luua CHECK kitsenduse:

CHECK(NOT (on_aktiivne=TRUE) OR hind IS NOT NULL)

Andmete registreerimine ebaõnnestub vaid juhul, kui esimene tingimus (on_aktiivne=TRUE) on täidetud ja teine tingimus (hind IS NOT NULL) ei ole täidetud. Kõikidel ülejäänud juhtudel registreerimine õnnestub.

vaata ka faile:
Loogikatabelid[33 KB]

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!