17.03.2015 Views

2. Füüsiline disain

2. Füüsiline disain

2. Füüsiline disain

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!