Kodulehed
[382] - Andmebaasid I (ITI0206) (kevad 2022)
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 / Vahendid - MS Access

Avalikud küsimused ja vastused:

Küsimuste teemade nimekiri

Anonüümne (05.06.2022 20:17):
Kuidas jõustada MS Accessis kitsendus, et kui üks ja sama töötaja omab ühte ja sama rolli mitu korda, siis ei tohi rolli omamise ajaperioodid kattuda?
Vastus: Saan jõustada nõrgema kitsenduse, mille kohaselt andmete registreerimise hetke seisuga ei tohi ühel ja samal töötajal olla ühe ja sama rolli kohta rohkem kui üks kehtiv rolli omamine. Kehtiv rolli omamine on selline, mille puhul hetke aeg jääb rolli omamise alguse ja lõpu aja vahele. Seega, kui töötajal 1 on 01.01.2022 kuni 01.01.2023 roll koodiga 3, siis ei saa 06.01.2022 lisada sellele töötajale teist rolli 3 omamist vahemikuks 01.05.022 kuni 01.05.2023.

ALTER TABLE Tootaja_rolli_omamine
ADD CONSTRAINT chk_tootaja_rolli_omamine_unikaalsus
CHECK (NOT EXISTS
(SELECT isik_id, tootaja_roll_kood
FROM Tootaja_rolli_omamine
WHERE Now() BETWEEN alguse_aeg AND lopu_aeg
OR (alguse_aeg<=Now() AND lopu_aeg IS NULL)
GROUP BY isik_id, tootaja_roll_kood
HAVING Count(*)>1));

MS Accessis, erinevalt paljudest teistest andmebaasisüsteemidest, saab CHECK kitsenduses kasutada alampäringut. SQL standard ei luba CHECK kitsendustes kasutada mittedeterministlikku funktsiooni. Selline funktsioon tagastab samade argumentidega väljakutsudes erinevatel hetkedel erineva tulemuse. Now() on mittedeterministlik funktsioon.
MS Access (aga ka näiteks PostgreSQL) lubavad CHECK kitsendustes selliseid funktsioone kasutada.

Võrdluseks - PostgreSQLis saab küsimuses nimetatud piirangu jõustada täielikult. Selleks tuleb luua EXCLUDE kitsendus. EXCLUDE kitsendus on unikaalsuse kitsenduse edasiarendus, mille puhul saab väärtuste unikaalsuse e kordumatuse kontrollimiseks kasutada ka mõnda muud operaatorit kui võrdsuse kontrolli operaator (=), mida kasutab UNIQUE kitsendus. Vaadake täpsemat näidet slaidikomplektist. Otsige sealt fraasi "Kattuvate perioodide vältimine".

Hinda vastust:

Keskmine hinne : Pole veel hinnanguid!