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 QSeda, 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.