F1 Vincoli Procedure Trigger

26
Basi di Dati Basi di Dati Vincoli, procedure e regole attive in SQL

description

 

Transcript of F1 Vincoli Procedure Trigger

Page 1: F1 Vincoli Procedure Trigger

Basi di DatiBasi di Dati

Vincoli, procedure e regole attive in SQL

Page 2: F1 Vincoli Procedure Trigger

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

Page 3: F1 Vincoli Procedure Trigger

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

Page 4: F1 Vincoli Procedure 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

Page 5: F1 Vincoli Procedure 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

Page 6: F1 Vincoli Procedure 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

Page 7: F1 Vincoli Procedure 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

Page 8: F1 Vincoli Procedure 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

Page 9: F1 Vincoli Procedure 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

Page 10: F1 Vincoli Procedure 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

Page 11: F1 Vincoli Procedure 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

Page 12: F1 Vincoli Procedure 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

Page 13: F1 Vincoli Procedure 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

Page 14: F1 Vincoli Procedure 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

Page 15: F1 Vincoli Procedure 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

Page 16: F1 Vincoli Procedure 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

Page 17: F1 Vincoli Procedure 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

Page 18: F1 Vincoli Procedure 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

Page 19: F1 Vincoli Procedure 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

Page 20: F1 Vincoli Procedure 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

Page 21: F1 Vincoli Procedure 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

Page 22: F1 Vincoli Procedure 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

Page 23: F1 Vincoli Procedure 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

Page 24: F1 Vincoli Procedure 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

Page 25: F1 Vincoli Procedure 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

Page 26: F1 Vincoli Procedure Trigger

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