Kas SQL-andmebaasis saab jõustada deklaratiivsete kitsendustena assotisatsioonireegleid?

Postitas Erki Eessaar 10.02.2024 10:37 (muudeti 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.

Loogikatabelid

Loogikatabelid

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!