2. Füüsiline disain
2. Füüsiline disain
2. Füüsiline disain
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
TTÜ: Andmebaasi füüsiline <strong>disain</strong> (2012)<br />
© Erki Eessaar<br />
Iga Tellimuse rida on seotud ühe kindla Tellimusega. Tellimuse<br />
kustutamisel kustutatakse ka sellega seotud Tellimuse read, sest nad ei<br />
oma iseseisvana mõtet.<br />
• Kui kaks tugevat (teistest olemitest sõltumatut) olemit on omavahel<br />
seotud, siis ühe olemi andmete kustutamine ei tohi tingida teise olemi<br />
andmete kustutamise:<br />
• Tänavate tabelist tänava kustutamine keelatakse aga seniks, kuni<br />
eksisteerib isikuid, firmasid jms., mis selle tänavaga seotud on.<br />
• Klassifikaatorite andmeid sisaldavas tabelis keelatakse ridade<br />
kustutamine, kui seotud tabelis leidub ridu.<br />
Järgnevalt on välja toodud võrdlev tabel, mis näitab erinevate<br />
andmebaasisüsteemide poolt toetatavaid kompenseerivaid tegevusi.<br />
MS Access 2007 Oracle 11g PostgreSQL 9.0<br />
ON UPDATE NO<br />
ACTION (vaikimisi)<br />
ON UPDATE CASCADE<br />
ON UPDATE SET NULL<br />
ON DELETE NO<br />
ACTION (vaikimisi)<br />
ON DELETE CASCADE<br />
ON DELETE SET NULL<br />
ON UPDATE NO<br />
ACTION (vaikimisi)<br />
ON DELETE NO<br />
ACTION (vaikimisi)<br />
ON DELETE CASCADE<br />
ON DELETE SET NULL<br />
ON UPDATE NO<br />
ACTION (vaikimisi)<br />
ON UPDATE RESTRICT<br />
ON UPDATE CASCADE<br />
ON UPDATE SET NULL<br />
ON UPDATE SET<br />
DEFAULT<br />
ON DELETE NO<br />
ACTION (vaikimisi)<br />
ON DELETE RESTRICT<br />
ON DELETE CASCADE<br />
ON DELETE SET NULL<br />
ON DELETE SET<br />
DEFAULT<br />
Siin välja pakutud kolmes andmebaasisüsteemis vastab vaid PostgreSQL<br />
kompenseerivate tegevuste osas SQL standardile.<br />
Näide: Juhul, kui andmebaasisüsteem ei toeta kõiki välisvõtmega seotud<br />
lisakitsendusi (nt. MS SQL Server 7.0 ei võimaldanud kaskaadset<br />
kustutamist), võib probleemi lahendada kasutades trigereid.<br />
Tabeliga Oppejoud on seotud triger, mis käivitud juhul kui tabelist Oppejoud<br />
mõni rida kustutatakse. Selle peale kustutatakse seotud read tabelis Aine.<br />
CREATE TRIGGER D_OPPEJOUD ON dbo.OPPEJOUD<br />
FOR DELETE<br />
AS<br />
DELETE AINE FROM deleted, AINE WHERE deleted.oppejoud_id =<br />
AINE.looja<br />
9