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

Postitas Erki Eessaar, 10.02.2024 10:37:55 (muudeti 12.09.2026 14:46:14)
Tagasi nimekirja
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.

Manused

Loogikatabelid
Loogikatabelid
Täies mahus vaatamiseks klõpsake pildil.

Kas postitus oli kasulik?

Anna postitusele hinnang (1 – halb, 5 – väga hea):

Keskmine hinne: Pole veel hinnatud