Vastus (27.11.2022 14:25): Kui loote rutiini X andmete muutmiseks, siis kirjutage see kontroll sisse rutiinis sisalduvatesse lausetesse. Näiteks oletame, et kauba andmeid saab muuta (v.a. seisundi muutmine) vaid siis, kui muudetav kaup on seisundis ootel või mitteaktiivne. Oletame, et ootel seisund on koodiga 1 ja mitteaktiivne seisund on koodiga 3.
Rutiinis olevas UPDATE lauses oleks tingimused
UPDATE Kaup
SET ...
WHERE kauba_kood=<etteantud kauba_kood>
AND kauba_seisundi_liik_kood IN (1, 3) RETURNING kauba_kood;
Kui näiteks kauba kategooria omamisi saaks kustutada vaid siis, kui kaup on kas seisundis ootel või mitteaktiivne, siis oleks kategooria omamise kustutamise rutiinis lause
DELETE FROM Kauba_kategooria_omamine
WHERE kauba_kood=<etteantud kauba_kood>
AND kauba_kategooria_kood=<etteantud kauba_kategooria_kood>
AND EXISTS (SELECT * FROM Kaup
WHERE Kaup.kauba_kood=Kauba_kategooria_omamine.kauba_kood
AND Kaup.kauba_seisundi_liik_kood IN (1, 3))
RETURNING kauba_kood;
Kui loote hiljem nende tingimuste kontrollimiseks trigerid, siis eemaldage need tingimused rutiinidest, et see kontrolli loogika poleks samas tarkvara kihis (andmebaas) dubleeritud. |