Vincoli e Triggers. Vincoli. Tipo di vincoli. Chiavi esterne



Documenti analoghi
Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere capitolo 7 di Garcia- Molina et al. Lucidi derivati da quelli di Jeffrey D.

Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere Cap 2 Riguzzi et al. Sistemi Informativi

PL/SQL PL/SQL. Ordine degli elementi dei triggers di Oracle. Differenze nei triggers. Versione dei trigger e PSM di Oracle

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Definizione di domini

Operazioni sui database

Lezione 8. Metadati, Viste e Trigger

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Basi di Dati: Corso di laboratorio

Capitolo 7. Esercizio 7.1

SQL PER LA DEFINIZIONE DI BASI DI DATI

Vincoli di Integrità

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Gestione delle tabelle

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

TRIGGER Regole Attive (Trigger) OLD_TABLE NEW_TABLE old new

DBMS (Data Base Management System)

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Cap. 5 Basi di dati attive

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Volumi di riferimento

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

CONCETTO DI ANNIDAMENTO

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

Il linguaggio SQL: viste e tabelle derivate

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Il Modello Relazionale

2104 volume III Programmazione

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Corso sul linguaggio SQL

SQL - Funzioni di gruppo

Organizzazione degli archivi

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Nozione ed uso. Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso:

Esercitazione 8 Mercoledì 21 gennaio 2015 (2 ore) DDL e progettazione

IL DAT A B A S E DI ALGE B R A N D O

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

SQL - Tipi di dato Il linguaggio SQL

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Capitolo 13. Interrogare una base di dati

SQL Sintassi Dei Comandi

Laboratorio di Basi di Dati e Web

MAX, SUM, AVG, COUNT)

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 9 SETTEMBRE 2015 Tempo: 2h30m

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Basi di Dati. S Q L Lezione 5

PROGRAMMA DI CLASSE 5AI

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

Ricorsione in SQL-99. Introduzione. Idea di base

GERARCHIE RICORSIVE - SQL SERVER 2008

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Nella relazione CINEMA, Nome è chiave secondaria. Nella relazione FILM, CodRegista, e CodProtagonista sono chiavi esterne sulla tabella PERSONE.

Il linguaggio SQL: query innestate

Informatica per le discipline umanistiche 2 lezione 10

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Progettazione di Basi di Dati

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

DUE GRUPPI DI COMANDI

Database. Si ringrazia Marco Bertini per le slides

Istruzioni DML di SQL

SQL. Alcune note sulla definizione dei dati

SQL/OLAP. Estensioni OLAP in SQL

MODELLO RELAZIONALE. cesarini-bdsi mod relazionale 1 MODELLO RELAZIONALE

Sistemi per la gestione di database: MySQL ( )

L architettura di un DBMS

Vincoli di Integrità

Tecnologia di un Database Server (centralizzato) Introduzione generale

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 21 LUGLIO 2015 Tempo: 2h30m

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

Dispensa di database Access

Linee guida per la programmazione di transazioni in PL/SQL

User Tools: DataBase Manager

Dati relazionali e XML

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}


a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Esprimere in algebra (ottimizzata), calcolo relazionale la seguente query:

IL MODELLO RELAZIONALE

Secondo Compitino di Basi di Dati

Lezione V. Aula Multimediale - sabato 29/03/2008

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Introduzione al corso

COLLI. Gestione dei Colli di Spedizione. Release 5.20 Manuale Operativo

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Basi di dati 9 febbraio 2010 Compito A

Guida all uso di Java Diagrammi ER

Laboratorio di Basi di Dati

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Basi di Dati e Sistemi Informativi. Structured Query Language

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Transcript:

Vincoli Chiavi esterne Vincoli locali e globali Triggers Leggere capitolo 7 di Garcia- Molina et al. Vincoli e Triggers Un vincolo e una relazione tra dati che il DBMS deve assicurare. Esempio: vincoli di chiave. I triggers sono eseguiti solo quando una condizione specifica accade, ad es., l inserimento di una tupla. Piu facile da implementare di molti vincoli. Lucidi derivati da quelli di Jeffrey D. Ullman 1 2 Tipo di vincoli Chiavi. Chiavi esterne, o integrita referenziale. Vincoli basati su un solo attributo. Vincola i valori di uno specifico attributo. Vincoli basati sulla tupla. Relazioni tra attributi. Asserzioni: qualsiasi espressione booleana SQL. Chiavi esterne Si consideri la relazione Sells(bar, beer, price). Ci possiamo aspettare che un valore beer sia una birra reale, ovvero qualcosa che appare in Beers.name. Un vincolo che richiede che una birra in Sells sia una birra in Beers e chiamato un vincolo di chiave esterna (foreign-key constraint). 3 4

Esprimere le chiavi esterne Esempio: con attributo Si usa la parola chiave REFERENCES: 1. Nella dichiarazione di un attributo, quando un solo attributo e coinvolto, oppure 2. Come un elemento dello schema, come in: FOREIGN KEY ( <lista di attributi> ) REFERENCES <relazione> ( <attributi> ) Gli attributi referenziati devono essere dichiarati PRIMARY KEY o UNIQUE. 5 CREATE TABLE Beers ( name CHAR(20) PRIMARY KEY, manf CHAR(20) ); CREATE TABLE Sells ( bar CHAR(20), beer CHAR(20) REFERENCES Beers(name), price REAL ); 6 Esempio: come elemento CREATE TABLE Beers ( name CHAR(20) PRIMARY KEY, manf CHAR(20) ); CREATE TABLE Sells ( bar CHAR(20), beer CHAR(20), price REAL, FOREIGN KEY(beer) REFERENCES Beers(name)); 7 Applicare i vincoli di chiave esterna Se c e un vincolo di chiave esterna da attributi della relazione R alla chiave primaria della relazione S, sono possibili due violazioni: 1. Un inserimento o una modifica in R introducono valori non presenti in S. 2. Una cancellazione o una modifica in S fa si che alcune tuple di R rimangano a penzoloni 8

Azioni intraprese - 1 Si supponga R = Sells, S = Beers. Un inserimento o una modifica di Sells che introduce un birra non esistente in Beers deve essere rifiutato. Una cancellazione o una modifica di Beers che rimuove un valore di birra presente in alcune tuple di Sells puo essere gestito in quattro modi. 9 Azioni intraprese -- 2 I quattro modi possibili per gestire le birre che improvvisamente smettono di esistere sono: 1. NO ACTION : rifiuta la modifica. 2. CASCADE : effettua gli stessi cambiamenti in Sells. Birra cancellata: cancella la tupla di Sells. Birra modificata: modifica il valore in Sells. 3. SET NULL : modifica la birra in NULL. 4. SET DEFAULT : assegna alla birra il suo valore di default 10 Esempio: CASCADE Si supponga di cancellare la tupla per la Bud da Beers. Allora si cancellano tutte le tuple di Sells che hanno beer = Bud. Si supponga di aggiornare la tupla per la Bud cambiando Bud in Budweiser. Allora si cambiano tutte le tuple di Sells con beer = Bud in modo che beer = Budweiser. Esempio: SET NULL Si supponga di cancellare la tupla per la Bud da Beers. Si cambiano tutte le tuple di Sells che hanno beer = Bud in beer = NULL. Si supponga di aggiornare la tuple per la Bud cambiando Bud in Budweiser. Stesso cambiamento. 11 12

Esempio: SET DEFAULT Si supponga di cancellare la tupla per la Bud da Beers. Si assegna a tutte le tuple di Sells che hanno beer = Bud il valore di default per beer Si supponga di aggiornare le tuple per la Bud cambiando Bud in Budweiser. Stesso cambiamento. La colonna beer deve avere un vincolo di default. Se non ce l ha ed è nullable, allora NULL diventa il valore della colonna. Altrimenti errore 13 Scegliere una politica Quando dichiariamo una chiave esterna, possiamo scegliere la politica SET NULL, CASCADE o SET DEFAULT indipendentemente per le cancellazioni e le modifiche. Far seguire la dichiarazione di chiave esterna da: ON [UPDATE DELETE][SET NULL CASCADE SET DEFAULT] Due clausole di questo tipo possono essere usate. Altrimenti, il default (impedisci (NO ACTION)) e usato. 14 Esempio Check basati sugli attributi CREATE TABLE Sells ( bar CHAR(20), beer CHAR(20), price REAL, FOREIGN KEY(beer) REFERENCES Beers(name) ON DELETE SET NULL ON UPDATE CASCADE ); 15 Mettono un vincolo sul valore di un particolare attributo. CHECK( <condizione> ) deve essere aggiunto alla dichiarazione per l attributo. La condizione puo essere una qualunque condizione che puo apparire in una clausola WHERE La condizione puo usare il nome dell attributo ma ogni altra relazione o nome di attributo devono apparire in una sottoquery 16

Esempio CREATE TABLE Sells ( bar CHAR(20), beer CHAR(20) CHECK ( beer IN (SELECT name FROM Beers)), price REAL CHECK ( price <= 5.00 ) ); 17 Temporizzazione delle verifiche Un check basato sugli attributi e verificato solo quando un valore per quell attributo viene inserito o modificato. Esempio: CHECK (price <= 5.00) verifica ogni nuovo prezzo e lo rifuta se e piu di $5. Esempio: CHECK (beer IN (SELECT name FROM Beers)) non e verificato se una birra viene cancellata da Beers (a differenza 18 delle chiavi esterne). Check basati sulle tuple Esempio: check CHECK ( <condizione> ) puo essere aggiunto come un altro elemento di una definizione di schema. La condizione puo essere una qualunque condizione che puo apparire in una clausola WHERE La condizione puo fare riferimento a ogni attributo della relazione ma ogni altro attributo o relazione richiede una sottoquery. Verificato solo agli inserimenti e alle Solo Joe s Bar puo vendere birra a piu di 5$: CREATE TABLE Sells ( modifiche. 19 20 ); bar beer price REAL, CHAR(20), CHAR(20), CHECK (bar = Joe s Bar OR price <= 5.00)

Asserzioni Asserzioni Sono elementi dello schema di database, come le relazioni e le viste. Definiti da: CREATE ASSERTION <nome> CHECK ( <condizione> ); La condizione puo essere una qualunque condizione che puo apparire in una clausola WHERE La condizione puo fare riferimento a ogni relazione o attributo nello schema del database. 21 Le asserzioni non sono presenti in SQL Server 2005 22 Esempio: asserzione In Sells(bar, beer, price), nessun bar puo chiedere un prezzo medio superiore a 5$. CREATE ASSERTION NoRipoffBars CHECK ( NOT EXISTS ( SELECT bar FROM Sells GROUP BY bar HAVING AVG(price)>5.00)); Bar con un prezzo medio superiore a 5$ 23 Esempio: asserzione In Drinkers(name, addr, phone) e Bars(name, addr, license), non ci possono essere piu bar che drinkers. CREATE ASSERTION FewBar CHECK ( (SELECT COUNT(*) FROM Bars) <= (SELECT COUNT(*) FROM Drinkers) ); 24

Temporizzazione della verifica delle asserzioni In principio dobbiamo verificare ogni asserzione dopo ogni modifica a una qualunque relazione del database. Un sistema intelligente puo osservare che solo certe modifiche possono rendere una asserzione violata. Esempio: nessuna modifica a Beers puo avere effetto su FewBar. Neppure un inserimento in Drinkers o una cancellazione da Bars. 25 Triggers: motivazione I checks basati su attributi e su tuple hanno capacita limitate. Le asserzioni sono sufficientemente generali per la maggior parte delle applicazioni dei vincoli, ma sono difficili da implementare in maniera efficiente. Il DBMS deve aver una vera intelligenza per evitare di verificare asserzioni che non possono essere violate. 26 Soluzione: triggers Un trigger consente all utente di specificare quando deve essere fatta la verifica. Come una asserzione, un trigger ha una condizione generale e puo inoltre effettuare una qualunque sequenza di modifiche SQL al database. Triggers in SQL-2003 Vediamo prima i trigger in SQL-2003 27 28

Regole Evento-Condizione- Azione Un altro nome per trigger e regola ECA, o regola evento-condizione-azione. Evento : tipicamente un tipo di modifica di database, ad es. insert on Sells. Condizione : una qualunque espressione SQL con valore booleano. Azione : una qualunque istruzione SQL. 29 Esempio: un trigger Ci sono molti dettagli da imparare riguardo i triggers. Ecco un esempio per illustrarli. Invece di usare un vincolo di chiave esterna e rifiutare gli inserimenti in Sells(bar, beer, price) con beer sconosciuto, un trigger puo aggiungere la birra a Beers, con un produttore NULL. 30 Esempio: definizione di trigger CREATE TRIGGER BeerTrig AFTER INSERT ON Sells REFERENCING NEW ROW AS NewTuple FOR EACH ROW WHEN (NewTuple.beer NOT IN (SELECT name FROM Beers)) INSERT INTO Beers(name) VALUES(NewTuple.beer); L evento La condizione L azione 31 Opzioni: CREATE TRIGGER CREATE TRIGGER <nome> Opzione: CREATE OR REPLACE TRIGGER <nome> Utile se s e gia un trigger con quel nome e lo si vuole modificare. 32

Opzioni: condizione AFTER puo essere BEFORE. Anche, INSTEAD OF, se la relazione e una vista. Un modo efficace di eseguire modifiche di viste: usare i trigger per tradurle in modifiche delle tabelle originarie. INSERT puo essere DELETE o UPDATE. e UPDATE puo essere UPDATE OF <attributo> ON <tabella>. 33 Opzioni: FOR EACH ROW I triggers sono a livello di riga o a livello di istruzione. FOR EACH ROW indica il livello di riga; la sua assenza indica il livello di istruzione. I triggers a livello di riga sono eseguiti una volta per ogni tupla modificata. I trigger a livello di istruzione sono eseguiti una volta per una istruzione SQL, indipendentemente da quante tuple sono modificate. 34 Opzioni: REFERENCING Le istruzioni INSERT implicano una nuova tupla (per il livello riga) o un nuovo insieme di tuple (per il livello di istruzione). DELETE implica una tupla o una tabella vecchia. UPDATE le implica entrame. Ci si riferisce ad esse con [NEW OLD][ROW TABLE] AS <nome> 35 Opzioni: la condizione Una qualunque condizione a valori booleani. Viene valutata prima o dopo l evento, a seconda che BEFORE o AFTER sia usato nell evento. Si accede alla nuova/vecchia tupla o insieme di tuple attraverso i nomi dichiarati nella clausola REFERENCING. 36

Opzioni: l azione Ci puo essere piu di una istruzione SQL nell azione. Si racchiudono tra BEGIN... END se ce n e piu di una. Ma le query non hanno senso nell azione, quindi siamo in pratica limitati a modifiche. Un altro esempio Usando Sells(bar, beer, price) e una relazione unaria RipoffBars(bar) creata allo scopo, mantieni una lista di bar che aumentano il prezzo di una qualunque birra di piu di 1$. 37 38 Il trigger CREATE TRIGGER PriceTrig AFTER UPDATE OF price ON Sells REFERENCING OLD ROW as old NEW ROW as new FOR EACH ROW WHEN(new.price > old.price + 1.00) INSERT INTO RipoffBars VALUES(new.bar); L eventosolo cambiamenti di prezzo Gli agg. ci consentono di parlare di vecchie e nuove tuple Condizione: un increm. Dobbiamo considerare di pr. > $1 ogni cambiamento di prezzo Quando il camb. di prezzo e abbastanza grande, aggiungi il bar a Trigger sulle viste Generalmente, e impossibile modificare una vista ottenuta dal join di più tabelle. Ma un trigger INSTEAD OF ci consente di interpretare le modifche alle viste in una maniera che ha senso. Esempio: progetteremo una vista Synergy che ha triple (drinker, beer, bar) tali che il bar serve la birra, il drinker frequenta il bar e quella birra gli piace. Si usano le relazioni Sells(bar, beer, price) Frequents(bar,drinker) e Likes(drinker,beer) RipoffBars 39 40

Esempio: la vista CREATE VIEW Synergy AS SELECT Likes.drinker, Likes.beer, Sells.bar FROM Likes, Sells, Frequents WHERE Likes.drinker = Frequents.drinker AND Likes.beer = Sells.beer AND Sells.bar = Frequents.bar; Prendi una copia di ogni attributo Interpretare un inserimento in una vista Non possiamo fare un inserimento in Synergy --- e una vista ottenuta con un join. Ma possiamo usare un trigger INSTEAD OF per trasformare una tripla (drinker, beer, bar) in tre inserimenti di coppie proiettate, una per ciascuna relazione Likes, Sells, and Frequents. Sells.price avra valore NULL. Join naturale di Likes, Sells e Frequents 41 42 Il trigger CREATE TRIGGER ViewTrig INSTEAD OF INSERT ON Synergy REFERENCING NEW ROW AS n FOR EACH ROW BEGIN INSERT INTO LIKES VALUES(n.drinker, n.beer); INSERT INTO SELLS(bar, beer) VALUES(n.bar, n.beer); INSERT INTO FREQUENTS VALUES(n.drinker, n.bar); END; Ordine di esecuzione dei trigger Se ci sono piu trigger associati allo stesso evento essi vengono eseguiti in questo ordine: Trigger BEFORE a livello di istruzione Trigger BEFORE a livello di riga Si applica la modifica e si verificano i vincoli di integrita Trigger AFTER a livello di riga Trigger AFTER a livello di istruzione 43 44

Ordine di esecuzione dei trigger Se ci sono piu trigger nella stessa categoria vengono eseguiti in un ordine scelto dal sistema che dipende dall implementazione (non determinismo) 45 Proprieta dei trigger 3 proprieta classiche Terminazione: per qualunque stato iniziale e sequenza di modifiche i trigger producono uno stato finale (non ci sono cicli infiniti di attivazione) Confluenza: i trigger terminano e producono un unico stato finale, indipendente dall ordine in cui vengono eseguiti 46 Proprieta dei trigger Determinismo delle osservazioni: I trigger sono confluenti e inoltre producono la stessa sequenza di azioni (inclusi i messaggi) La proprieta di terminazione e di gran lunga la piu importante Analisi di terminazione Si esegue costruendo un grafo di attivazione: Si crea un nodo per ogni trigger Si crea un arco da un trigger T1 a un trigger T2 se l azione di T1 contiene una primitiva che coincide con uno degli eventi di T2 (si puo verificare con una semplice analisi sintattica) 47 48

Analisi di terminazione Se il grafo e aciclico, il sistema termina Se il grafo ha dei cicli, ci potrebbero essre delle attivazioni infinite (ma non e detto) Esempio T1: CREATE TRIGGER AggiustaContributi AFTER UPDATE OF Stipendio ON Impiegato REFERENCING NEW TABLE AS NuovoImp UPDATE Impiegato SET Contributi=Stipendio*0.8 WHERE Matr IN (SELECT Matr from NuovoImp) T2: CREATE TRIGGER ControlloSogliaBudget AFTER UPDATE ON Impiegato WHEN 50000<(SELECT SUM(Stipendio+Contributi) FROM Impiegato) UPDATE Impiegato SET Stipendio=0.9*Stipendio 49 50 T1 Esempio Ci sono due cicli pero il sistema e terminanante Se si inverte il verso del confronto in T2 diventa non terminante T2 51 Modi di esecuzione rispetto alle transazioni 3 alternative Immediato (immediate): il trigger viene considerato ed eseguito con l evento che lo ha attivato Differito (deferred): il trigger viene eseguito al termine della transazione Distaccato (detached): il trigger viene gestito in una transazione separata. Ad es., si aggiornano le valutazioni di un titolo di borsa dopo diversi scambi 52