Download - F1 Vincoli Procedure Trigger
Basi di DatiBasi di Dati
Vincoli, procedure e regole attive in SQL
Basi di Dati Dove ci troviamo?Basi di Dati – Dove ci troviamo?A) Introduzione
C) Modello Relazionale,
1 2
B) Prog Concettuale (ER) ) ,Algebra relazionale, SQL
1 2 3 4 5 6 7
B) Prog. Concettuale (ER)
1 2 3 4 5 6 7
E) Tecnologia di un DBMSD) Prog. Logica e Normalizzazione
1 2 3 4 5 61 2 3 4
F) Programmazione DB
1 2
SQL: vincoli, procedure e trigger2
1 2
Qualità dei datiQualità dei dati
Qualità dei dati: correttezza, completezza, attualità.
In molte applicazioni reali i dati sono di scarsa qualità5% ‐ 40% di dati scorretti
Per aumentare la qualità dei dati:Per aumentare la qualità dei dati: Regole di integritàManipolazione dei dati tramite programmi predefiniti p p g p(procedure e trigger)
3 SQL: vincoli, procedure e trigger
Vincoli di integrità genericiVincoli di integrità genericiPredicati che devono essere veri se valutati su istanze
tt (l li) d ll b di d ticorrette (legali) della base di dati
E i i d diEspressi in due modi:negli schemi delle tabelle come asserzioni separatecome asserzioni separate
Negli schemi delle tabelle si utilizza la clausola:Negli schemi delle tabelle si utilizza la clausola:CHECK (PREDICATO)
associata ai vari attributi oppure espressa al termine dellaassociata ai vari attributi oppure espressa al termine della dichiarazione della tabella
4 SQL: vincoli, procedure e trigger
Esempio : gestione magazzinoEsempio : gestione magazzinomagazzino
COD PROD QTA DISP QTA RIORDCOD-PROD1
QTA-DISP150
QTA-RIORD100
34
130170
8050
5 500 150
riordino
COD PROD DATA QTA ORDCOD-PROD DATA QTA-ORD
5 SQL: vincoli, procedure e trigger
Esempio: definizione di MAGAZZINOEsempio: definizione di MAGAZZINO
CREATE TABLE MAGAZZINO AS(COD‐PROD CHAR(2) PRIMARY KEY QTA‐DISP INTEGER NOT NULL
CHECK (QTA‐DISP>10)QTA‐RIORD INTEGER NOT NULLQTA RIORD INTEGER NOT NULL
CHECK (QTA‐RIORD>10)CHECK (QTA DISP>QTA RIORD)CHECK (QTA‐DISP>QTA‐RIORD))
6 SQL: vincoli, procedure e trigger
AsserzioniAsserzioni
Predicati espressi separatamente dalla definizione delle tabelle, che devono essere veri se valutati su istanze corrette (legali)
CREATE ASSERTION Ordini‐Limitati ASCHECK( 1000 >=
SELECT COUNT(COD‐PROD)( )FROM RIORDINO )
7 SQL: vincoli, procedure e trigger
Significato dei vincoliSignificato dei vincoli
La verifica dei vincoli può essere:Immediate (immediata)
la loro violazione annulla l'ultima modifica
Deferred (differita)la loro violazione annulla l'intera transazione
S1 S2 SfS0VV
8 SQL: vincoli, procedure e trigger
Modifica dinamica del significato dei vincoliModifica dinamica del significato dei vincoli
Ogni vincolo è definito di un tipo (normalmente "immediate“)L'applicazione può modificare il tipo iniziale dei vincoli:set constraints immediateset constraints deferred
Tutti i vincoli vengono comunque verificati, prima o poi.
9 SQL: vincoli, procedure e trigger
ProcedureProcedure
Moduli di programma che svolgono una specifica attività di manipolazione dei datiNon standard in SQL‐2 ma presenti nei principali sistemi relazionaliDue momenti:dichiarazione (DDL)invocazione (DML)
Con architettura client‐server sono: invocate dai client memorizzate e eseguite presso i server
10 SQL: vincoli, procedure e trigger
Esempio : prelievo dal magazzinoEsempio : prelievo dal magazzino
magazzino
COD-PROD1
QTA-DISP150
QTA-RIORD1001
3150130
10080
45
170500
50150
riordino
COD-PROD DATA QTA-ORD
11 SQL: vincoli, procedure e trigger
SpecificaSpecifica
L’utente indica un prelievo dando il codice del prodotto e la quantità da prelevareSe la quantità disponibile in magazzino non è sufficiente la procedura si arresta con una eccezioneViene eseguito il prelievo, modificando la quantità disponibile in magazzinoSe la quantità disponibile in magazzino è inferiore alla quantità di riordino si predispone un nuovo ordine d'acquisto.
12 SQL: vincoli, procedure e trigger
ProceduraProcedura
INTERFACCIAPROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER)
INVOCAZIONEPRELIEVO(4,150)
Stato iniziale nella base di datiStato iniziale nella base di datiCOD-PROD QTA-DISP QTA-RIORD
Stato iniziale nella base di datiStato iniziale nella base di dati
4 170 50
13 SQL: vincoli, procedure e trigger
Realizzazione della proceduraRealizzazione della procedura
Dichiarazione variabiliLettura dello statoSe la quantità disponibile è insufficiente: eccezioneq pAggiornamento dello statoSe la nuova quantità disponibile è inferiore alla quantitàSe la nuova quantità disponibile è inferiore alla quantità di riordino: emissione di un ordine
14 SQL: vincoli, procedure e trigger
ProceduraProceduraPROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER) ISQ1 Q2 INTEGERQ1, Q2 INTEGERX EXCEPTIONBEGINBEGINSELECT QTA‐DISP, QTA‐RIORD INTO Q1, Q2
FROM MAGAZZINO WHERE COD‐PROD = PROD;IF Q1 < QUANT THEN RAISE(X);UPDATE MAGAZZINO
SET QTA DISP QTA DISP QUANTSET QTA‐DISP = QTA‐DISP ‐ QUANTWHERE COD‐PROD = PROD;IF Q1 ‐ QUANT < Q2 THEN INSERT INTO RIORDINOIF Q1 QUANT < Q2 THEN INSERT INTO RIORDINOVALUES(PROD, SYSDATE, Q2)
END
15 SQL: vincoli, procedure e trigger
Esempio di invocazioneEsempio di invocazione PRELIEVO(4,150)
PROD=4, QUANT=150
SELECT QTA DISP QTA RIORD INTO Q1 Q2SELECT QTA‐DISP, QTA‐RIORD INTO Q1, Q2FROM MAGAZZINOWHERE COD PROD PRODWHERE COD‐PROD = PROD;
COD PROD QTA DISP QTA RIORDCOD-PROD
4
QTA-DISP
170
QTA-RIORD
50
Q1 = 170, Q2 = 50
16 SQL: vincoli, procedure e trigger
Invocazione (continua)Invocazione (continua)
IF Q1 < QUANT THEN RAISE(X) non scattaUPDATE MAGAZZINOSET QTA‐DISP = QTA‐DISP ‐ QUANTWHERE COD‐PROD = PROD
COD-PROD QTA-DISP QTA-RIORD
Q1 QUANT < Q2 è vero:
COD PROD
4
QTA DISP
20
QTA RIORD
50
Q1 ‐ QUANT < Q2 è vero: INSERT INTO RIORDINO
S( O S S Q2)VALUES(PROD, SYSDATE, Q2)COD-PROD
4DATA QTA-RIORD
504 2004-10-10 5017 SQL: vincoli, procedure e trigger
Regole attive (trigger)Regole attive (trigger)
Moduli di programma che svolgono una specifica attività di manipolazione dei datiNon standard in SQL‐2 ma presenti nei principali sistemi relazionaliSimili alle procedure, ma l'invocazione è automaticaSeguono il paradigmaEVENTO‐CONDIZIONE‐AZIONE
18 SQL: vincoli, procedure e trigger
Paradigma evento condizione azione (ECA)Paradigma evento ‐ condizione ‐ azione (ECA)
Eventomodifica alla base di dati
Condizionepredicato
Azionemodifica alla base di dati, segnalazioni agli utenti
Informalmentequando accade l'eventoqse la condizione è veraallora si esegue l'azioneg
19 SQL: vincoli, procedure e trigger
Esempio: gestione automatica del riordinoEsempio: gestione automatica del riordino
EVENTO:UPDATE(QDISP) IN MAGAZZINO
CONDIZIONE:LA NUOVA QUANTITÀ DISPONIBILE È INFERIORE ALLA (NUOVA) QUANTITÀ DI RIORDINO: NEW.Q‐DISP < NEW.Q‐RIORD
AZIONE:SE LA QUANTITÀ DISPONIBILE E’ INSUFFICIENTE: ECCEZIONEEMISSIONE DI UN ORDINE
20 SQL: vincoli, procedure e trigger
Regola attiva (trigger)Regola attiva (trigger)
CREATE TRIGGER GESTIONE‐RIORDINOAFTER UPDATE OF QTA‐DISP ON MAGAZZINOWHEN (NEW.QTA‐DISP < NEW.QTA‐RIORD)( )FOR EACH ROWX EXCEPTIONX EXCEPTIONBEGINIF NEWQTA DISP < 0 THEN RAISE(X);IF NEW.QTA‐DISP < 0 THEN RAISE(X); INSERT INTO RIORDINO
S( CO O S S Q O )VALUES(NEW.COD‐PROD, SYSDATE, NEW.QTA‐RIORD) END
21 SQL: vincoli, procedure e trigger
Esecuzione dell'applicazioneEsecuzione dell applicazione
UPDATE MAGAZZINOSET QTA‐DISP = QTA‐DISP ‐ 150WHERE COD‐PROD = PROD
COD PROD QTA DISP QTA RIORDCOD-PROD
4
QTA-DISP
170
QTA-RIORD
50
22 SQL: vincoli, procedure e trigger
Esecuzione del triggerEsecuzione del trigger
EventoUPDATE(QTA‐DISP) ON MAGAZZINO
CondizioneVERA
AzioneIF NEW.QTA‐DISP < 0 THEN RAISE(X) non scatta INSERT INTO RIORDINO VALUES (NEW.COD‐PROD, SYSDATE, NEW.QTA‐RIORD)
COD-PROD DATA QTACOD-PROD
4
DATA
2004-10-10
QTA
50
23 SQL: vincoli, procedure e trigger
Problemi di progetto per procedure e triggerProblemi di progetto per procedure e trigger
Decomposizione modulare delle applicazioni
Paradigma di invocazione:gesplicita (procedure)implicita (trigger)
Aumento di:Aumento di:EfficienzaControlloRiuso
24 SQL: vincoli, procedure e trigger
Conseguenze dell’uso di procedure e triggerConseguenze dell uso di procedure e trigger
Aumenta la responsabilità dell'amministratore della base di dati (rispetto al programmatore applicativo)
Si sposta "conoscenza" dalle applicazioni allo schema della base di dati (indipendenza di conoscenza)
SQL: vincoli, procedure e trigger25
EserciziEsercizi
Riprendere le basi di dati per la gestione degli ordini ed esprimere:Un vincolo di integrità che impedisce la presenza di più di 100 d li i didettagli per ciascun ordine.Una procedura che elimina tutti gli ordini e i relativi dettagli di un particolare clienteun particolare clienteun trigger che scatta quando viene cancellato un cliente ed elimina tutti gli ordini e i relativi dettagli di quel clienteg g q
26 SQL: vincoli, procedure e trigger