SlideShare a Scribd company logo
Qualità dei dati                                                                          Vincoli di integrità generici
                                                                                                                                                                                                  `       Predicati che devono essere veri se valutati su istanze
                                                                                                        `       Qualità dei dati:
                                                                                                                                                                                                          corrette (l li) della base di d ti
                                                                                                                                                                                                               tt (legali) d ll b       dati
                                                                                                                `   correttezza, completezza, attualità.

                                                                                                                                                                                                  `       Espressi i d modi:
                                                                                                                                                                                                          E      i in due di
                                                                                                        `       In molte applicazioni reali i dati sono di scarsa qualità
                                                                                                                                                                                                          `   negli schemi delle tabelle
                                                                                                                `   5% 40% di dati scorretti
                                                                                                                                                                                                          `   come asserzioni separate

                                                                   Basi di Dati                         `       Per aumentare la qualità dei dati:                                                `       Negli schemi delle tabelle si utilizza la clausola:
                                                                                                                                                                                                                              CHECK (PREDICATO)
                                                                                                                `   Regole di integrità
                                                                                                                `   Manipolazione dei dati tramite p g
                                                                                                                         p                         programmi predefiniti
                                                                                                                                                             p                                            associata ai vari attributi oppure espressa al termine della
                                          Vincoli, procedure e regole attive in SQL                                 (procedure e trigger)                                                                 dichiarazione della tabella

                                                                                                                                                              SQL: vincoli, procedure e trigger                                                        SQL: vincoli, procedure e trigger
                                                                                                            3                                                                                         4




Esempio : gestione magazzino                                                                            Esempio: definizione di MAGAZZINO                                                         Asserzioni
magazzino
                                                                                                                                                                                                  `
                                                                                                                CREATE TABLE MAGAZZINO AS                                                                 Predicati espressi separatamente dalla definizione delle
 COD-PROD QTA-DISP QTA-RIORD
 COD PROD QTA DISP QTA RIORD                                                                                                                                                                              tabelle, che devono essere veri se valutati su istanze
                                                                                                                    (COD PROD CHAR(2) PRIMARY KEY
                                                                                                                                                                                                          corrette (legali)
 1                         150              100                                                                     QTA DISP INTEGER NOT NULL
                                                                                                                                CHECK (QTA DISP>10)
 3                         130              80
                                                                                                                                                                                                          CREATE ASSERTION Ordini Limitati AS
 4                         170              50                                                                      QTA RIORD INTEGER NOT NULL
                                                                                                                                                                                                              CHECK( 1000 >=
                                                                                                                                CHECK (QTA RIORD>10)
 5                         500              150
                                                                                                                                                                                                                    SELECT COUNT(COD PROD)
                                                                                                                                                                                                                                 (            )
                                                                                                                    CHECK (QTA DISP>QTA RIORD)
                                                                                                                                                                                                                    FROM RIORDINO )
riordino
                                                                                                                    )
 COD-PROD
 COD PROD DATA                              QTA-ORD
                                            QTA ORD



                                                                                                                                                              SQL: vincoli, procedure e trigger                                                        SQL: vincoli, procedure e trigger
    5                                                               SQL: vincoli, procedure e trigger       6                                                                                         7




Significato dei vincoli                                                                                 Modifica dinamica del significato dei vincoli                                             Procedure
`                                                                                                       `                                                                                         `
        La verifica dei vincoli può essere:                                                                     Ogni vincolo è definito di un tipo (normalmente                                           Moduli di programma che svolgono una specifica attività
                                                                                                                quot;immediate“)                                                                              di manipolazione dei dati
        `   Immediate (immediata)
            `    la loro violazione annulla l'ultima modifica                                           `                                                                                         `
                                                                                                                L'applicazione può modificare il tipo iniziale dei vincoli:                               Non standard in SQL 2 ma presenti nei principali sistemi
        `   Deferred (differita)                                                                                                                                                                          relazionali
                                                                                                                `   set constraints immediate
            `    la loro violazione annulla l'intera transazione                                                `                                                                                 `
                                                                                                                    set constraints deferred                                                              Due momenti:
                                                                                                        `       Tutti i vincoli vengono comunque verificati, prima o poi.                                 `   dichiarazione (DDL)
                                                                                                                                                                                                          `   invocazione (DML)
                                                                                                                                                                                                  `       Con architettura client server sono:
            S0                      S1                     S2                            Sf                                                                                                               `   invocate dai client
                                              V                                                                                                                                                           `   memorizzate e eseguite presso i server


                                                                    SQL: vincoli, procedure e trigger                                                         SQL: vincoli, procedure e trigger                                                        SQL: vincoli, procedure e trigger
    8                                                                                                       9                                                                                         10
Esempio : prelievo dal magazzino                                                   Specifica                                                                         Procedura
                                                                                   `                                                                                 `
                                                                                        L’utente indica un prelievo dando il codice del prodotto e                        INTERFACCIA
magazzino
                                                                                        la quantità da prelevare                                                              PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER)
 COD-PROD QTA-DISP QTA-RIORD
                                                                                   `    Se la quantità disponibile in magazzino non è sufficiente                    `    INVOCAZIONE
 1               150          100                                                       la procedura si arresta con una eccezione                                             PRELIEVO(4,150)
 3               130          80                                                   `    Viene eseguito il prelievo, modificando la quantità
                                                                                        disponibile in magazzino
 4               170          50
                                                                                   `    Se la quantità disponibile in magazzino è inferiore alla
 5               500          150
                                                                                                                                                                                Stato iniziale nella base di dati
                                                                                        quantità di riordino si predispone un nuovo ordine
                                                                                        d'acquisto.                                                                                                        QTA-DISP
                                                                                                                                                                                          COD-PROD                     QTA-RIORD
riordino
                                                                                                                                                                                                           170
                                                                                                                                                                                          4                            50
 COD-PROD DATA                QTA-ORD


                                                                                                                                 SQL: vincoli, procedure e trigger                                                           SQL: vincoli, procedure e trigger
    11                                         SQL: vincoli, procedure e trigger       12                                                                                13




Realizzazione della procedura                                                      Procedura                                                                         Esempio di invocazione
                                                                                   PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER) IS                                    PRELIEVO(4,150)
`    Dichiarazione variabili
                                                                                   Q1,
                                                                                   Q1 Q2 INTEGER                                                                                          PROD=4, QUANT=150
`    Lettura dello stato
                                                                                   X EXCEPTION
`    Se la quantità disponibile è insufficiente: eccezione
           q           p                                                           BEGIN                                                                                  SELECT QTA DISP QTA RIORD INTO Q1, Q2
                                                                                                                                                                                     DISP,               Q1
`                                                                                    SELECT QTA DISP, QTA RIORD INTO Q1, Q2
     Aggiornamento dello stato
                                                                                                                                                                          FROM MAGAZZINO
                                                                                         FROM MAGAZZINO WHERE COD PROD = PROD;
`    Se la nuova quantità disponibile è inferiore alla quantità                                                                                                           WHERE COD PROD = PROD
                                                                                                                                                                                             PROD;
                                                                                     IF Q1 < QUANT THEN RAISE(X);
     di riordino: emissione di un ordine
                                                                                     UPDATE MAGAZZINO
                                                                                           SET QTA DISP = QTA DISP QUANT                                                                                         QTA-DISP
                                                                                                                                                                                                                 QTA DISP
                                                                                                                                                                                              COD-PROD
                                                                                                                                                                                              COD PROD                      QTA-RIORD
                                                                                                                                                                                                                            QTA RIORD
                                                                                           WHERE COD PROD = PROD;                                                                                                170
                                                                                                                                                                                              4                             50
                                                                                           IF Q1 QUANT < Q2 THEN INSERT INTO RIORDINO
                                                                                           VALUES(PROD, SYSDATE, Q2)
                                                                                                                                                                                          Q1 = 170, Q2 = 50
                                                                                   END

                                               SQL: vincoli, procedure e trigger                                                 SQL: vincoli, procedure e trigger                                                           SQL: vincoli, procedure e trigger
    14                                                                                 15                                                                                16




Invocazione (continua)                                                             Regole attive (trigger)                                                           Paradigma evento condizione azione (ECA)
                                                                                   `                                                                                 `
     IF Q1 < QUANT THEN RAISE(X) non scatta                                             Moduli di programma che svolgono una specifica attività                           Evento
                                                                                        di manipolazione dei dati                                                         `   modifica alla base di dati
     UPDATE MAGAZZINO
                                                                                   `    Non standard in SQL 2 ma presenti nei principali sistemi                     `    Condizione
     SET QTA DISP = QTA DISP QUANT
                                                                                        relazionali                                                                       `   predicato
     WHERE COD PROD = PROD
                                                                                   `    Simili alle procedure, ma l'invocazione è automatica                         `    Azione
                         QTA DISP
                         QTA-DISP
            COD PROD
            COD-PROD                QTA RIORD
                                    QTA-RIORD
                                                                                   `    Seguono il paradigma                                                              `   modifica alla base di dati, segnalazioni agli utenti
                         20
            4                       50
                                                                                        `   EVENTO CONDIZIONE AZIONE
     Q1 QUANT < Q2 è vero:
                                                                                                                                                                     `    Informalmente
     INSERT INTO RIORDINO
                                                                                                                                                                          `   q
                                                                                                                                                                              quando accade l'evento
     VALUES(PROD, S S
          S( O SYSDATE, Q2)
                                                                                                                                                                          `   se la condizione è vera
            COD-PROD                QTA-RIORD
                         DATA
                                                                                                                                                                          `   allora si esegue l'azione
                                                                                                                                                                                           g
            4            2004-10-10 50
                                               SQL: vincoli, procedure e trigger                                                 SQL: vincoli, procedure e trigger                                                           SQL: vincoli, procedure e trigger
    17                                                                                 18                                                                                19
Esempio: gestione automatica del riordino                                                       Regola attiva (trigger)                                                        Esecuzione dell applicazione
                                                                                                                                                                                          dell'applicazione
`    EVENTO:                                                                                    CREATE TRIGGER GESTIONE RIORDINO                                               UPDATE MAGAZZINO
     `       UPDATE(QDISP) IN MAGAZZINO                                                         AFTER UPDATE OF QTA DISP ON MAGAZZINO                                             SET QTA DISP = QTA DISP 150
                                                                                                WHEN (NEW.QTA DISP < NEW.QTA RIORD)
                                                                                                       (                            )                                             WHERE COD PROD = PROD
`    CONDIZIONE:                                                                                FOR EACH ROW
     `       LA NUOVA QUANTITÀ DISPONIBILE È INFERIORE ALLA (NUOVA)                             X EXCEPTION                                                                                   QTA-DISP
                                                                                                                                                                                              QTA DISP
                                                                                                                                                                               COD-PROD
                                                                                                                                                                               COD PROD                  QTA-RIORD
                                                                                                                                                                                                         QTA RIORD
             QUANTITÀ DI RIORDINO: NEW.Q DISP < NEW.Q RIORD
                                                                                                BEGIN                                                                                         170
                                                                                                                                                                               4                         50
                                                                                                IF NEW QTA DISP < 0 THEN RAISE(X);
                                                                                                   NEW.QTA
`    AZIONE:
                                                                                                INSERT INTO RIORDINO
     `       SE LA QUANTITÀ DISPONIBILE E’ INSUFFICIENTE: ECCEZIONE
                                                                                                    VALUES(NEW.COD PROD, S S
                                                                                                         S(    CO      O SYSDATE, NEW.QTA RIORD)
                                                                                                                                      Q     O)
     `       EMISSIONE DI UN ORDINE
                                                                                                END

                                                            SQL: vincoli, procedure e trigger                                              SQL: vincoli, procedure e trigger                                                SQL: vincoli, procedure e trigger
    20                                                                                              21                                                                             22




Esecuzione del trigger                                                                          Problemi di progetto per procedure e trigger                                   Conseguenze dell’uso di procedure e trigger
                                                                                                                                                                                           dell uso
`                                                                                               `                                                                              `
     Evento                                                                                          Decomposizione modulare delle applicazioni                                     Aumenta la responsabilità dell'amministratore della base
                                                                                                                                                                                    di dati (rispetto al programmatore applicativo)
     `       UPDATE(QTA DISP) ON MAGAZZINO
`    Condizione                                                                                 `    Paradigma di invocazione:
                                                                                                           g
     `                                                                                                                                                                         `
             VERA                                                                                                                                                                   Si sposta quot;conoscenzaquot; dalle applicazioni allo schema
                                                                                                     `   esplicita (procedure)
                                                                                                                                                                                    della base di dati (indipendenza di conoscenza)
`    Azione                                                                                          `   implicita (trigger)
     `       IF NEW.QTA DISP < 0 THEN RAISE(X) non scatta
     `       INSERT INTO RIORDINO VALUES (NEW.COD PROD, SYSDATE,                                `    Aumento di:
             NEW.QTA RIORD)
                                                                                                     `   Efficienza
                                                                                                     `   Controllo
                          DATA
         COD-PROD                      QTA
                                                                                                     `   Riuso
                          2004-10-10 50
         4


                                                            SQL: vincoli, procedure e trigger                                              SQL: vincoli, procedure e trigger                                                SQL: vincoli, procedure e trigger
    23                                                                                              24                                                                             25




Esercizi
`    Riprendere le basi di dati per la gestione degli ordini ed
     esprimere:
     `       Un vincolo di integrità che impedisce la presenza di più di 100
             dettagli per ciascun ordine.
             d      li     i          di
     `       Una procedura che elimina tutti gli ordini e i relativi dettagli di
             un particolare cliente
     `       un trigger che scatta quando viene cancellato un cliente ed
             elimina tutti gli ordini e i relativi dettagli di quel cliente
                           g                            g      q




                                                            SQL: vincoli, procedure e trigger
    26

More Related Content

Viewers also liked (13)

Basi Dati c4
Basi Dati c4Basi Dati c4
Basi Dati c4
 
Basi Dati B7
Basi Dati B7Basi Dati B7
Basi Dati B7
 
Basi Dati B1
Basi Dati B1Basi Dati B1
Basi Dati B1
 
Info Industr Riass Standard
Info Industr Riass StandardInfo Industr Riass Standard
Info Industr Riass Standard
 
Calc Num Es 13.05.09
Calc Num Es 13.05.09Calc Num Es 13.05.09
Calc Num Es 13.05.09
 
Basi Dati E2
Basi Dati E2Basi Dati E2
Basi Dati E2
 
Basi Dati F1 Bis
Basi Dati F1 BisBasi Dati F1 Bis
Basi Dati F1 Bis
 
Calc Num Prato 02
Calc Num Prato 02Calc Num Prato 02
Calc Num Prato 02
 
Calc Num Zanni 01
Calc Num Zanni 01Calc Num Zanni 01
Calc Num Zanni 01
 
Basi Dati B3
Basi Dati B3Basi Dati B3
Basi Dati B3
 
Basi Dati E6
Basi Dati E6Basi Dati E6
Basi Dati E6
 
Basi Dati d1
Basi Dati d1Basi Dati d1
Basi Dati d1
 
Calc Num Prato 01(21.05.09)
Calc Num Prato 01(21.05.09)Calc Num Prato 01(21.05.09)
Calc Num Prato 01(21.05.09)
 

More from Bombers Falcoman (18)

Calc Num Prato 04
Calc Num Prato 04Calc Num Prato 04
Calc Num Prato 04
 
Calc Num Prato 03
Calc Num Prato 03Calc Num Prato 03
Calc Num Prato 03
 
Basi Dati F2
Basi Dati F2Basi Dati F2
Basi Dati F2
 
Basi Dati F1 Es
Basi Dati F1 EsBasi Dati F1 Es
Basi Dati F1 Es
 
Basi Dati E5
Basi Dati E5Basi Dati E5
Basi Dati E5
 
Basi Dati E3
Basi Dati E3Basi Dati E3
Basi Dati E3
 
Basi Dati E1
Basi Dati E1Basi Dati E1
Basi Dati E1
 
Basi Dati C7
Basi Dati C7Basi Dati C7
Basi Dati C7
 
Basi Dati C Riepilogo
Basi Dati C RiepilogoBasi Dati C Riepilogo
Basi Dati C Riepilogo
 
Basi Dati C5 Es
Basi Dati C5 EsBasi Dati C5 Es
Basi Dati C5 Es
 
Basi Dati C6 Es
Basi Dati C6 EsBasi Dati C6 Es
Basi Dati C6 Es
 
Basi Dati C5
Basi Dati C5Basi Dati C5
Basi Dati C5
 
Basi Dati d4
Basi Dati d4Basi Dati d4
Basi Dati d4
 
Basi Dati d2
Basi Dati d2Basi Dati d2
Basi Dati d2
 
Basi Dati c4 es
Basi Dati c4 esBasi Dati c4 es
Basi Dati c4 es
 
Info Industr Conc Generali Plc
Info Industr Conc Generali PlcInfo Industr Conc Generali Plc
Info Industr Conc Generali Plc
 
Appunti Info Indust
Appunti Info IndustAppunti Info Indust
Appunti Info Indust
 
Basi Dati C3 es
Basi Dati C3 esBasi Dati C3 es
Basi Dati C3 es
 

Basi Dati F1

  • 1. Qualità dei dati Vincoli di integrità generici ` Predicati che devono essere veri se valutati su istanze ` Qualità dei dati: corrette (l li) della base di d ti tt (legali) d ll b dati ` correttezza, completezza, attualità. ` Espressi i d modi: E i in due di ` In molte applicazioni reali i dati sono di scarsa qualità ` negli schemi delle tabelle ` 5% 40% di dati scorretti ` come asserzioni separate Basi di Dati ` Per aumentare la qualità dei dati: ` Negli schemi delle tabelle si utilizza la clausola: CHECK (PREDICATO) ` Regole di integrità ` Manipolazione dei dati tramite p g p programmi predefiniti p associata ai vari attributi oppure espressa al termine della Vincoli, procedure e regole attive in SQL (procedure e trigger) dichiarazione della tabella SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger 3 4 Esempio : gestione magazzino Esempio: definizione di MAGAZZINO Asserzioni magazzino ` CREATE TABLE MAGAZZINO AS Predicati espressi separatamente dalla definizione delle COD-PROD QTA-DISP QTA-RIORD COD PROD QTA DISP QTA RIORD tabelle, che devono essere veri se valutati su istanze (COD PROD CHAR(2) PRIMARY KEY corrette (legali) 1 150 100 QTA DISP INTEGER NOT NULL CHECK (QTA DISP>10) 3 130 80 CREATE ASSERTION Ordini Limitati AS 4 170 50 QTA RIORD INTEGER NOT NULL CHECK( 1000 >= CHECK (QTA RIORD>10) 5 500 150 SELECT COUNT(COD PROD) ( ) CHECK (QTA DISP>QTA RIORD) FROM RIORDINO ) riordino ) COD-PROD COD PROD DATA QTA-ORD QTA ORD SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger 5 SQL: vincoli, procedure e trigger 6 7 Significato dei vincoli Modifica dinamica del significato dei vincoli Procedure ` ` ` La verifica dei vincoli può essere: Ogni vincolo è definito di un tipo (normalmente Moduli di programma che svolgono una specifica attività quot;immediate“) di manipolazione dei dati ` Immediate (immediata) ` la loro violazione annulla l'ultima modifica ` ` L'applicazione può modificare il tipo iniziale dei vincoli: Non standard in SQL 2 ma presenti nei principali sistemi ` Deferred (differita) relazionali ` set constraints immediate ` la loro violazione annulla l'intera transazione ` ` set constraints deferred Due momenti: ` Tutti i vincoli vengono comunque verificati, prima o poi. ` dichiarazione (DDL) ` invocazione (DML) ` Con architettura client server sono: S0 S1 S2 Sf ` invocate dai client V ` memorizzate e eseguite presso i server SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger 8 9 10
  • 2. Esempio : prelievo dal magazzino Specifica Procedura ` ` L’utente indica un prelievo dando il codice del prodotto e INTERFACCIA magazzino la quantità da prelevare PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER) COD-PROD QTA-DISP QTA-RIORD ` Se la quantità disponibile in magazzino non è sufficiente ` INVOCAZIONE 1 150 100 la procedura si arresta con una eccezione PRELIEVO(4,150) 3 130 80 ` Viene eseguito il prelievo, modificando la quantità disponibile in magazzino 4 170 50 ` Se la quantità disponibile in magazzino è inferiore alla 5 500 150 Stato iniziale nella base di dati quantità di riordino si predispone un nuovo ordine d'acquisto. QTA-DISP COD-PROD QTA-RIORD riordino 170 4 50 COD-PROD DATA QTA-ORD SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger 11 SQL: vincoli, procedure e trigger 12 13 Realizzazione della procedura Procedura Esempio di invocazione PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER) IS PRELIEVO(4,150) ` Dichiarazione variabili Q1, Q1 Q2 INTEGER PROD=4, QUANT=150 ` Lettura dello stato X EXCEPTION ` Se la quantità disponibile è insufficiente: eccezione q p BEGIN SELECT QTA DISP QTA RIORD INTO Q1, Q2 DISP, Q1 ` SELECT QTA DISP, QTA RIORD INTO Q1, Q2 Aggiornamento dello stato FROM MAGAZZINO FROM MAGAZZINO WHERE COD PROD = PROD; ` Se la nuova quantità disponibile è inferiore alla quantità WHERE COD PROD = PROD PROD; IF Q1 < QUANT THEN RAISE(X); di riordino: emissione di un ordine UPDATE MAGAZZINO SET QTA DISP = QTA DISP QUANT QTA-DISP QTA DISP COD-PROD COD PROD QTA-RIORD QTA RIORD WHERE COD PROD = PROD; 170 4 50 IF Q1 QUANT < Q2 THEN INSERT INTO RIORDINO VALUES(PROD, SYSDATE, Q2) Q1 = 170, Q2 = 50 END SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger 14 15 16 Invocazione (continua) Regole attive (trigger) Paradigma evento condizione azione (ECA) ` ` IF Q1 < QUANT THEN RAISE(X) non scatta Moduli di programma che svolgono una specifica attività Evento di manipolazione dei dati ` modifica alla base di dati UPDATE MAGAZZINO ` Non standard in SQL 2 ma presenti nei principali sistemi ` Condizione SET QTA DISP = QTA DISP QUANT relazionali ` predicato WHERE COD PROD = PROD ` Simili alle procedure, ma l'invocazione è automatica ` Azione QTA DISP QTA-DISP COD PROD COD-PROD QTA RIORD QTA-RIORD ` Seguono il paradigma ` modifica alla base di dati, segnalazioni agli utenti 20 4 50 ` EVENTO CONDIZIONE AZIONE Q1 QUANT < Q2 è vero: ` Informalmente INSERT INTO RIORDINO ` q quando accade l'evento VALUES(PROD, S S S( O SYSDATE, Q2) ` se la condizione è vera COD-PROD QTA-RIORD DATA ` allora si esegue l'azione g 4 2004-10-10 50 SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger 17 18 19
  • 3. Esempio: gestione automatica del riordino Regola attiva (trigger) Esecuzione dell applicazione dell'applicazione ` EVENTO: CREATE TRIGGER GESTIONE RIORDINO UPDATE MAGAZZINO ` UPDATE(QDISP) IN MAGAZZINO AFTER UPDATE OF QTA DISP ON MAGAZZINO SET QTA DISP = QTA DISP 150 WHEN (NEW.QTA DISP < NEW.QTA RIORD) ( ) WHERE COD PROD = PROD ` CONDIZIONE: FOR EACH ROW ` LA NUOVA QUANTITÀ DISPONIBILE È INFERIORE ALLA (NUOVA) X EXCEPTION QTA-DISP QTA DISP COD-PROD COD PROD QTA-RIORD QTA RIORD QUANTITÀ DI RIORDINO: NEW.Q DISP < NEW.Q RIORD BEGIN 170 4 50 IF NEW QTA DISP < 0 THEN RAISE(X); NEW.QTA ` AZIONE: INSERT INTO RIORDINO ` SE LA QUANTITÀ DISPONIBILE E’ INSUFFICIENTE: ECCEZIONE VALUES(NEW.COD PROD, S S S( CO O SYSDATE, NEW.QTA RIORD) Q O) ` EMISSIONE DI UN ORDINE END SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger 20 21 22 Esecuzione del trigger Problemi di progetto per procedure e trigger Conseguenze dell’uso di procedure e trigger dell uso ` ` ` Evento Decomposizione modulare delle applicazioni Aumenta la responsabilità dell'amministratore della base di dati (rispetto al programmatore applicativo) ` UPDATE(QTA DISP) ON MAGAZZINO ` Condizione ` Paradigma di invocazione: g ` ` VERA Si sposta quot;conoscenzaquot; dalle applicazioni allo schema ` esplicita (procedure) della base di dati (indipendenza di conoscenza) ` Azione ` implicita (trigger) ` IF NEW.QTA DISP < 0 THEN RAISE(X) non scatta ` INSERT INTO RIORDINO VALUES (NEW.COD PROD, SYSDATE, ` Aumento di: NEW.QTA RIORD) ` Efficienza ` Controllo DATA COD-PROD QTA ` Riuso 2004-10-10 50 4 SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger SQL: vincoli, procedure e trigger 23 24 25 Esercizi ` Riprendere le basi di dati per la gestione degli ordini ed esprimere: ` Un vincolo di integrità che impedisce la presenza di più di 100 dettagli per ciascun ordine. d li i di ` Una procedura che elimina tutti gli ordini e i relativi dettagli di un particolare cliente ` un trigger che scatta quando viene cancellato un cliente ed elimina tutti gli ordini e i relativi dettagli di quel cliente g g q SQL: vincoli, procedure e trigger 26