of 38/38
Basi di dati attive 1 Sommario Approcci architetturali Linguaggi per la specifica di trigger: Eventi Condizioni Azioni Ulteriori caratteristiche Modello di esecuzione: Esecuzione delle regole Soluzione dei conflitti Terminazione

07 Basi Di Dati Attive

  • View
    685

  • Download
    3

Embed Size (px)

Text of 07 Basi Di Dati Attive

  • 1. Basi di dati attive SommarioApprocci architetturaliLinguaggi per la specifica di trigger:EventiCondizioniAzioniUlteriori caratteristicheModello di esecuzione:Esecuzione delle regoleSoluzione dei conflittiTerminazione 1

2. SommarioTrigger in SQL:SintassiModello di esecuzioneApplicazione dei trigger:Vincoli dintegritCalcolo di dati derivatiRegole operative 2 DBMS passivi vs. attiviI DBMS tradizionali sono passivi: eseguono delleoperazioni solo su richiesta Spesso si ha la necessit di avere capacit reattive:il DBMS reagisce autonomamente ad alcuni eventied esegue determinate operazioni DBMS con queste funzionalit sono conosciuti comeDBMS attivi (ADBMS), tramite cui possibiledefinire regole attive o trigger3 3. DBMS attivi: applicazioni Esempi di applicazioni dei DBMS attivi:Controllo di processiGestione automatizzata del lavoro di ufficioSistemi di controllo in ambito medicoReti di sensori 4 DBMS attiviLa conoscenza di tipo reattivo viene sottrattaai programmi applicativi e codificata (tramitecomandi del DDL) in regole attiveQuesto consente di definire il comportamentoreattivo una sola volta e di farlo condividereda pi applicazioniBenefici in termini di efficienza e costi dimanutenzione5 4. DBMS attiviIniziano ad affermarsi a partire dagli anni 90I maggiori DBMS commerciali (Oracle, IBMDB2, Microsoft SQL Server) sono stati estesicon la possibilit di specificare triggerA partire da SQL:1999 anche lo standardrecepisce tali estensioniAttualmente i DBMS non sonocompletamente allineati a SQL:2003 6EsempioGestione automatizzata di un magazzino incui se la quantit di un prodotto scende sottole 4 unit devo ordinare 100 item di taleprodottoDBMS tradizionale:MagazzinoProdotto Quantit 3));67 35. Vincoli di integritOgni cliente non pu noleggiare pi di trevideo contemporaneamente: CREATE TRIGGER VerificaNoleggiAFTER INSERT ON NoleggioREFERENCING NEW ROW AS NRFOR EACH ROWWHEN (SELECT COUNT(*) FROM Noleggio WHERE dataRest IS NULL ANDcodCli = NR.codCli) > 3ROLLBACK; 68 Vincoli di integritOgni cliente non pu noleggiare pi di trevideo contemporaneamente: CREATE TRIGGER VerificaNoleggiAFTER INSERT ON NoleggioREFERENCING NEW ROW AS NRFOR EACH ROWWHEN (SELECT COUNT(*) FROM Noleggio WHERE dataRest IS NULL ANDcodCli = NR.codCli) > 3ROLLBACK; 69 36. Vincoli di integritVincolo precedente, invece di abortire latransazione se il vincolo violato si vuoleannullare linserimento: CREATE TRIGGER VerificaNoleggi AFTER INSERT ON Noleggio REFERENCING NEW ROW AS NR FOR EACH ROW WHEN (SELECT COUNT(*) FROM Noleggio WHERE dataRest IS NULL AND codCli = NR.codCli) > 3 DELETE FROM Noleggio WHERE colloc = NR.colloc AND dataNol = NR.dataNol; 70 Vincoli di integrit CREATE TRIGGER VerificaNoleggi AFTER INSERT ON Noleggio REFERENCING NEW TABLE AS NT FOR EACH STATEMENT WHEN EXISTS(SELECT * FROM Noleggio WHERE Noleggio.dataRest IS NULL ANDNoleggio.codCli IN (SELECT codCli FROM NT) GROUP BY codCli HAVING COUNT(*) > 3) DELETE FROM Noleggio WHERE (colloc,dataNol) IN (SELECT colloc, dataNol FROM NT) AND codCli IN (SELECT codCliFROM NoleggioWHERE Noleggio.dataRest IS NULL AND Noleggio.codCli IN (SELECT codCli FROM NT)GROUP BY codCli 71 HAVING COUNT(*) > 3); 37. Calcolo di dati derivatiAggiornamento automatico attributoptiMancanti nella tabella StandardNoleggio VHS: 1 puntoNoleggio DVD: 2 punti 72 Calcolo di dati derivatiCREATE TRIGGER CalcolaPtiMancantiAFTER INSERT ON NoleggioREFERENCING NEW ROW AS NRFOR EACH ROWBEGIN ATOMICUPDATE StandardSET ptiMancanti = ptiMancanti - 1WHERE codCli = NR.codCLI ANDNR.colloc IN (SELECT colloc FROM Video WHERE tipo = 'v');UPDATE StandardSET ptiMancanti = ptiMancanti - 2WHERE codCli = NR.codCLI ANDNR.colloc IN (SELECT colloc FROM VideoWHERE tipo = 'd');END; 73 38. Regole operative Quando il valore dellattributo ptiMancanti per un cliente standard diventa 0, il cliente rimosso dalla tabella Standard ed inserito nella tabella VIP con bonus pari a 5 euro: CREATE PROCEDURE OrganizzaClienti() BEGIN INSERT INTO VIP SELECT codCli, 5.00 FROM Standard WHERE ptiMancanti