SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Basi di Dati
                      Basi di Dati

Vincoli, procedure e regole attive in SQL
Basi di Dati – Dove ci troviamo?
Basi di Dati Dove ci troviamo?
                                                 A) Introduzione
                                                     1    2

     B) Prog. Concettuale (ER)
     B) Prog Concettuale (ER)                                      C) Modello Relazionale, 
                                                                    )                     ,
                                                                   Algebra relazionale, SQL

      1   2    3       4       5       6     7                 1       2   3    4    5     6    7

          D) Prog. Logica e                                    E) Tecnologia di un DBMS
          Normalizzazione

           1       2       3       4                               1   2   3     4     5    6


                                           F) Programmazione DB


                                                      1   2

2                                                                              SQL: vincoli, procedure e trigger
Qualità dei dati
Qualità 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à generici
Vincoli di integrità generici
     Predicati che devono essere veri se valutati su istanze 
     corrette (legali) della base di dati
          tt (l li) d ll b        di d ti

     Espressi in due modi:
     E      ii d       di
       negli schemi delle tabelle 
       come asserzioni separate
       come 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 della 
     associata ai vari attributi oppure espressa al termine della
     dichiarazione della tabella

 4                                             SQL: vincoli, procedure e trigger
Esempio : gestione magazzino
Esempio : gestione magazzino
magazzino

 COD-PROD QTA-DISP QTA-RIORD
 COD PROD QTA DISP QTA RIORD
 1          150    100
 3          130    80
 4          170    50
 5          500    150

riordino

 COD-PROD
 COD PROD DATA     QTA-ORD
                   QTA ORD



  5                            SQL: vincoli, procedure e trigger
Esempio: definizione di MAGAZZINO
Esempio: 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 NULL
        QTA‐RIORD INTEGER NOT NULL
                    CHECK (QTA‐RIORD>10)
        CHECK (QTA DISP>QTA RIORD)
              (QTA‐DISP>QTA‐RIORD)
        )




6                                      SQL: vincoli, procedure e trigger
Asserzioni 
Asserzioni
    Predicati espressi separatamente dalla definizione delle 
    tabelle, che devono essere veri se valutati su istanze 
    corrette (legali)

    CREATE ASSERTION Ordini‐Limitati AS
        CHECK( 1000  >=  
                           (
              SELECT COUNT(COD‐PROD)    )
              FROM RIORDINO )




7                                            SQL: vincoli, procedure e trigger
Significato dei vincoli
Significato 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




     S0                      S1                     S2                           Sf
                                       V

 8                                                          SQL: vincoli, procedure e trigger
Modifica dinamica del significato dei vincoli
Modifica dinamica del significato dei vincoli
    Ogni vincolo è definito di un tipo (normalmente 
    "immediate“)
    L'applicazione può modificare il tipo iniziale dei vincoli:
      set constraints immediate
      set constraints deferred
    Tutti i vincoli vengono comunque verificati, prima o poi.




9                                               SQL: vincoli, procedure e trigger
Procedure
 Moduli di programma che svolgono una specifica attività 
 di manipolazione dei dati
 Non standard in SQL‐2 ma presenti nei principali sistemi 
 relazionali
 Due 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 magazzino
Esempio : prelievo dal magazzino
magazzino

 COD-PROD QTA-DISP QTA-RIORD
 1          150     100
 3          130     80
 4          170     50
 5          500     150

riordino

 COD-PROD DATA      QTA-ORD


 11                                SQL: vincoli, procedure e trigger
Specifica 
Specifica
  L’utente indica un prelievo dando il codice del prodotto e 
  la quantità da prelevare
  Se la quantità disponibile in magazzino non è sufficiente 
  la procedura si arresta con una eccezione
  Viene eseguito il prelievo, modificando la quantità 
  disponibile in magazzino
  Se la quantità disponibile in magazzino è inferiore alla 
  quantità di riordino si predispone un nuovo ordine 
  d'acquisto.



 12                                         SQL: vincoli, procedure e trigger
Procedura
 INTERFACCIA
     PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER)
 INVOCAZIONE
     PRELIEVO(4,150)




      Stato iniziale nella base di dati
               COD-PROD   QTA-DISP   QTA-RIORD
               4          170        50



13                                        SQL: vincoli, procedure e trigger
Realizzazione della procedura
Realizzazione della procedura
 Dichiarazione variabili
 Lettura dello stato
 Se la quantità disponibile è insufficiente: eccezione
       q           p
 Aggiornamento dello stato
 Se 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
Procedura
PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER) IS
Q1, Q2 INTEGER
Q1 Q2 INTEGER
X EXCEPTION
BEGIN
  SELECT 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
        SET QTA DISP QTA DISP ‐ QUANT
        WHERE COD‐PROD = PROD;
        IF Q1  QUANT < Q2 THEN INSERT INTO RIORDINO
        IF Q1 ‐ QUANT < Q2 THEN INSERT INTO RIORDINO
        VALUES(PROD, SYSDATE, Q2)
END

 15                                     SQL: vincoli, procedure e trigger
Esempio di invocazione 
Esempio di invocazione
 PRELIEVO(4,150)
           PROD=4, QUANT=150

 SELECT QTA‐DISP, QTA‐RIORD INTO Q1, Q2
 SELECT QTA DISP QTA RIORD INTO Q1 Q2
 FROM MAGAZZINO
 WHERE COD‐PROD = PROD;
 WHERE COD PROD PROD

               COD-PROD
               COD PROD        QTA-DISP
                               QTA DISP   QTA-RIORD
                                          QTA RIORD
               4               170        50


           Q1 = 170, Q2 = 50

16                                         SQL: vincoli, procedure e trigger
Invocazione (continua) 
Invocazione (continua)
 IF Q1 < QUANT THEN RAISE(X)  non scatta
 UPDATE MAGAZZINO
 SET QTA‐DISP = QTA‐DISP ‐ QUANT
 WHERE COD‐PROD = PROD
       COD PROD
       COD-PROD    QTA DISP
                   QTA-DISP   QTA RIORD
                              QTA-RIORD
       4           20         50
 Q1 ‐ QUANT < Q2 è vero:  
 Q1 QUANT < Q2 è vero:
 INSERT INTO RIORDINO
 VALUES(PROD, SYSDATE, Q2)
       S( O S S         Q2)
       COD-PROD    DATA       QTA-RIORD
       4           2004-10-10 50
17                                     SQL: vincoli, procedure e trigger
Regole attive (trigger)
Regole attive (trigger)
 Moduli di programma che svolgono una specifica attività 
 di manipolazione dei dati
 Non standard in SQL‐2 ma presenti nei principali sistemi 
 relazionali
 Simili alle procedure, ma l'invocazione è automatica
 Seguono il paradigma
     EVENTO‐CONDIZIONE‐AZIONE




18                                        SQL: vincoli, procedure e trigger
Paradigma evento ‐ condizione ‐ azione (ECA)
Paradigma evento condizione azione (ECA)
 Evento
     modifica alla base di dati
 Condizione
     predicato  
 Azione
     modifica alla base di dati, segnalazioni agli utenti


 Informalmente
     q
     quando accade l'evento
     se la condizione è vera
     allora si esegue l'azione
                  g

19                                                 SQL: vincoli, procedure e trigger
Esempio: gestione automatica del riordino
Esempio: 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: ECCEZIONE
     EMISSIONE DI UN ORDINE


20                                          SQL: vincoli, procedure e trigger
Regola attiva (trigger)
Regola attiva (trigger)
CREATE TRIGGER GESTIONE‐RIORDINO
AFTER UPDATE OF QTA‐DISP ON MAGAZZINO
WHEN (NEW.QTA‐DISP < NEW.QTA‐RIORD)
       (                                 )
FOR EACH ROW
X EXCEPTION
X EXCEPTION
BEGIN
IF NEW.QTA‐DISP < 0 THEN RAISE(X);      
IF NEW QTA DISP < 0 THEN RAISE(X);
INSERT INTO RIORDINO
    VALUES(NEW.COD‐PROD, SYSDATE, NEW.QTA‐RIORD) 
         S(    CO      O S S               Q O )
END

 21                                  SQL: vincoli, procedure e trigger
Esecuzione dell applicazione
Esecuzione dell'applicazione
UPDATE MAGAZZINO
   SET QTA‐DISP = QTA‐DISP ‐ 150
   WHERE COD‐PROD = PROD


COD-PROD
COD PROD    QTA-DISP
            QTA DISP   QTA-RIORD
                       QTA RIORD
4           170        50




 22                                SQL: vincoli, procedure e trigger
Esecuzione del trigger
Esecuzione del trigger
 Evento
         UPDATE(QTA‐DISP) ON MAGAZZINO
 Condizione
         VERA
 Azione
         IF NEW.QTA‐DISP < 0 THEN RAISE(X) non scatta 
         INSERT INTO RIORDINO VALUES (NEW.COD‐PROD, SYSDATE,                
         NEW.QTA‐RIORD)

     COD-PROD        DATA        QTA
     4               2004-10-10 50


23                                                  SQL: vincoli, procedure e trigger
Problemi di progetto per procedure e trigger
Problemi di progetto per procedure e trigger
 Decomposizione modulare delle applicazioni

 Paradigma di invocazione:
       g
     esplicita (procedure)
     implicita (trigger)


 Aumento di:
 Aumento di:
     Efficienza
     Controllo
     Riuso


24                                     SQL: vincoli, procedure e trigger
Conseguenze dell uso di procedure e trigger
Conseguenze 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)




25                                       SQL: vincoli, procedure e trigger
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 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




 26                                                  SQL: vincoli, procedure e trigger

Weitere ähnliche Inhalte

Ähnlich wie F1 Vincoli Procedure Trigger

Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1
guest5c2d35b
 
Presentazione Nuvola Vertica Full
Presentazione Nuvola Vertica FullPresentazione Nuvola Vertica Full
Presentazione Nuvola Vertica Full
Alberto.F
 
Presentazione Nuvola Vertica F
Presentazione Nuvola Vertica FPresentazione Nuvola Vertica F
Presentazione Nuvola Vertica F
Alberto.F
 
Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1
Alberto.F
 
Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1
Alberto.F
 
Presentazione Nuvola Vertica Full New
Presentazione Nuvola Vertica Full NewPresentazione Nuvola Vertica Full New
Presentazione Nuvola Vertica Full New
Alberto.F
 
Basi di Dati - A2 - Tecnologia dei sistemi informativi
Basi di Dati - A2 - Tecnologia dei sistemi informativiBasi di Dati - A2 - Tecnologia dei sistemi informativi
Basi di Dati - A2 - Tecnologia dei sistemi informativi
Majong DevJfu
 
07 Basi Di Dati Attive
07  Basi Di Dati Attive07  Basi Di Dati Attive
07 Basi Di Dati Attive
guestbe916c
 

Ähnlich wie F1 Vincoli Procedure Trigger (20)

C7 Ddl
C7 DdlC7 Ddl
C7 Ddl
 
ACS, ECS [e Cardinality/Statistics feedback]
ACS, ECS [e Cardinality/Statistics feedback]ACS, ECS [e Cardinality/Statistics feedback]
ACS, ECS [e Cardinality/Statistics feedback]
 
Thesis Magnone Slides IT
Thesis Magnone Slides ITThesis Magnone Slides IT
Thesis Magnone Slides IT
 
Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1
 
Presentazione Nuvola Vertica Full
Presentazione Nuvola Vertica FullPresentazione Nuvola Vertica Full
Presentazione Nuvola Vertica Full
 
Presentazione Nuvola Vertica F
Presentazione Nuvola Vertica FPresentazione Nuvola Vertica F
Presentazione Nuvola Vertica F
 
Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1
 
Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1Presentazione Nuvola Vertica Full New1
Presentazione Nuvola Vertica Full New1
 
Presentazione Nuvola Vertica Full New
Presentazione Nuvola Vertica Full NewPresentazione Nuvola Vertica Full New
Presentazione Nuvola Vertica Full New
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
Basi di Dati - A2 - Tecnologia dei sistemi informativi
Basi di Dati - A2 - Tecnologia dei sistemi informativiBasi di Dati - A2 - Tecnologia dei sistemi informativi
Basi di Dati - A2 - Tecnologia dei sistemi informativi
 
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
Webinar: "Il database: l’equipaggiamento su cui fare affidamento"
 
Introduzione al framework dl4j Antonio berti
Introduzione al framework dl4j Antonio bertiIntroduzione al framework dl4j Antonio berti
Introduzione al framework dl4j Antonio berti
 
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
 
07 Basi Di Dati Attive
07  Basi Di Dati Attive07  Basi Di Dati Attive
07 Basi Di Dati Attive
 
IMPROVE 4.0
IMPROVE 4.0IMPROVE 4.0
IMPROVE 4.0
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
BanovazDiego-Slides Prelaurea
BanovazDiego-Slides PrelaureaBanovazDiego-Slides Prelaurea
BanovazDiego-Slides Prelaurea
 
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
 
Telegraph Cq Italian
Telegraph Cq ItalianTelegraph Cq Italian
Telegraph Cq Italian
 

Mehr von Majong DevJfu

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
Majong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
Majong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
Majong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
Majong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
Majong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
Majong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
Majong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
Majong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
Majong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
Majong DevJfu
 

Mehr von Majong DevJfu (20)

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 

F1 Vincoli Procedure Trigger

  • 1. Basi di Dati Basi di Dati Vincoli, procedure e regole attive in SQL
  • 2. Basi di Dati – Dove ci troviamo? Basi di Dati Dove ci troviamo? A) Introduzione 1 2 B) Prog. Concettuale (ER) B) Prog Concettuale (ER) C) Modello Relazionale,  ) , Algebra relazionale, SQL 1 2 3 4 5 6 7 1 2 3 4 5 6 7 D) Prog. Logica e  E) Tecnologia di un DBMS Normalizzazione 1 2 3 4 1 2 3 4 5 6 F) Programmazione DB 1 2 2 SQL: vincoli, procedure e trigger
  • 3. Qualità dei dati Qualità 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
  • 4. Vincoli di integrità generici Vincoli di integrità generici Predicati che devono essere veri se valutati su istanze  corrette (legali) della base di dati tt (l li) d ll b di d ti Espressi in due modi: E ii d di negli schemi delle tabelle  come asserzioni separate come 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 della  associata ai vari attributi oppure espressa al termine della dichiarazione della tabella 4 SQL: vincoli, procedure e trigger
  • 5. Esempio : gestione magazzino Esempio : gestione magazzino magazzino COD-PROD QTA-DISP QTA-RIORD COD PROD QTA DISP QTA RIORD 1 150 100 3 130 80 4 170 50 5 500 150 riordino COD-PROD COD PROD DATA QTA-ORD QTA ORD 5 SQL: vincoli, procedure e trigger
  • 6. Esempio: definizione di MAGAZZINO Esempio: 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 NULL QTA‐RIORD INTEGER NOT NULL CHECK (QTA‐RIORD>10) CHECK (QTA DISP>QTA RIORD) (QTA‐DISP>QTA‐RIORD) ) 6 SQL: vincoli, procedure e trigger
  • 7. Asserzioni  Asserzioni Predicati espressi separatamente dalla definizione delle  tabelle, che devono essere veri se valutati su istanze  corrette (legali) CREATE ASSERTION Ordini‐Limitati AS CHECK( 1000  >=   ( SELECT COUNT(COD‐PROD) ) FROM RIORDINO ) 7 SQL: vincoli, procedure e trigger
  • 8. Significato dei vincoli Significato 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 S0 S1 S2 Sf V 8 SQL: vincoli, procedure e trigger
  • 9. Modifica dinamica del significato dei vincoli Modifica dinamica del significato dei vincoli Ogni vincolo è definito di un tipo (normalmente  "immediate“) L'applicazione può modificare il tipo iniziale dei vincoli: set constraints immediate set constraints deferred Tutti i vincoli vengono comunque verificati, prima o poi. 9 SQL: vincoli, procedure e trigger
  • 10. Procedure Moduli di programma che svolgono una specifica attività  di manipolazione dei dati Non standard in SQL‐2 ma presenti nei principali sistemi  relazionali Due 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
  • 11. Esempio : prelievo dal magazzino Esempio : prelievo dal magazzino magazzino COD-PROD QTA-DISP QTA-RIORD 1 150 100 3 130 80 4 170 50 5 500 150 riordino COD-PROD DATA QTA-ORD 11 SQL: vincoli, procedure e trigger
  • 12. Specifica  Specifica L’utente indica un prelievo dando il codice del prodotto e  la quantità da prelevare Se la quantità disponibile in magazzino non è sufficiente  la procedura si arresta con una eccezione Viene eseguito il prelievo, modificando la quantità  disponibile in magazzino Se la quantità disponibile in magazzino è inferiore alla  quantità di riordino si predispone un nuovo ordine  d'acquisto. 12 SQL: vincoli, procedure e trigger
  • 13. Procedura INTERFACCIA PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER) INVOCAZIONE PRELIEVO(4,150) Stato iniziale nella base di dati COD-PROD QTA-DISP QTA-RIORD 4 170 50 13 SQL: vincoli, procedure e trigger
  • 14. Realizzazione della procedura Realizzazione della procedura Dichiarazione variabili Lettura dello stato Se la quantità disponibile è insufficiente: eccezione q p Aggiornamento dello stato Se 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
  • 15. Procedura PROCEDURE PRELIEVO (PROD INTEGER, QUANT INTEGER) IS Q1, Q2 INTEGER Q1 Q2 INTEGER X EXCEPTION BEGIN SELECT 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 SET QTA DISP QTA DISP ‐ QUANT WHERE COD‐PROD = PROD; IF Q1  QUANT < Q2 THEN INSERT INTO RIORDINO IF Q1 ‐ QUANT < Q2 THEN INSERT INTO RIORDINO VALUES(PROD, SYSDATE, Q2) END 15 SQL: vincoli, procedure e trigger
  • 16. Esempio di invocazione  Esempio di invocazione PRELIEVO(4,150) PROD=4, QUANT=150 SELECT QTA‐DISP, QTA‐RIORD INTO Q1, Q2 SELECT QTA DISP QTA RIORD INTO Q1 Q2 FROM MAGAZZINO WHERE COD‐PROD = PROD; WHERE COD PROD PROD COD-PROD COD PROD QTA-DISP QTA DISP QTA-RIORD QTA RIORD 4 170 50 Q1 = 170, Q2 = 50 16 SQL: vincoli, procedure e trigger
  • 17. Invocazione (continua)  Invocazione (continua) IF Q1 < QUANT THEN RAISE(X)  non scatta UPDATE MAGAZZINO SET QTA‐DISP = QTA‐DISP ‐ QUANT WHERE COD‐PROD = PROD COD PROD COD-PROD QTA DISP QTA-DISP QTA RIORD QTA-RIORD 4 20 50 Q1 ‐ QUANT < Q2 è vero:   Q1 QUANT < Q2 è vero: INSERT INTO RIORDINO VALUES(PROD, SYSDATE, Q2) S( O S S Q2) COD-PROD DATA QTA-RIORD 4 2004-10-10 50 17 SQL: vincoli, procedure e trigger
  • 18. Regole attive (trigger) Regole attive (trigger) Moduli di programma che svolgono una specifica attività  di manipolazione dei dati Non standard in SQL‐2 ma presenti nei principali sistemi  relazionali Simili alle procedure, ma l'invocazione è automatica Seguono il paradigma EVENTO‐CONDIZIONE‐AZIONE 18 SQL: vincoli, procedure e trigger
  • 19. Paradigma evento ‐ condizione ‐ azione (ECA) Paradigma evento condizione azione (ECA) Evento modifica alla base di dati Condizione predicato   Azione modifica alla base di dati, segnalazioni agli utenti Informalmente q quando accade l'evento se la condizione è vera allora si esegue l'azione g 19 SQL: vincoli, procedure e trigger
  • 20. Esempio: gestione automatica del riordino Esempio: 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: ECCEZIONE EMISSIONE DI UN ORDINE 20 SQL: vincoli, procedure e trigger
  • 21. Regola attiva (trigger) Regola attiva (trigger) CREATE TRIGGER GESTIONE‐RIORDINO AFTER UPDATE OF QTA‐DISP ON MAGAZZINO WHEN (NEW.QTA‐DISP < NEW.QTA‐RIORD) ( ) FOR EACH ROW X EXCEPTION X EXCEPTION BEGIN IF NEW.QTA‐DISP < 0 THEN RAISE(X);       IF NEW QTA DISP < 0 THEN RAISE(X); INSERT INTO RIORDINO VALUES(NEW.COD‐PROD, SYSDATE, NEW.QTA‐RIORD)  S( CO O S S Q O ) END 21 SQL: vincoli, procedure e trigger
  • 22. Esecuzione dell applicazione Esecuzione dell'applicazione UPDATE MAGAZZINO SET QTA‐DISP = QTA‐DISP ‐ 150 WHERE COD‐PROD = PROD COD-PROD COD PROD QTA-DISP QTA DISP QTA-RIORD QTA RIORD 4 170 50 22 SQL: vincoli, procedure e trigger
  • 23. Esecuzione del trigger Esecuzione del trigger Evento UPDATE(QTA‐DISP) ON MAGAZZINO Condizione VERA Azione IF NEW.QTA‐DISP < 0 THEN RAISE(X) non scatta  INSERT INTO RIORDINO VALUES (NEW.COD‐PROD, SYSDATE,                 NEW.QTA‐RIORD) COD-PROD DATA QTA 4 2004-10-10 50 23 SQL: vincoli, procedure e trigger
  • 24. Problemi di progetto per procedure e trigger Problemi di progetto per procedure e trigger Decomposizione modulare delle applicazioni Paradigma di invocazione: g esplicita (procedure) implicita (trigger) Aumento di: Aumento di: Efficienza Controllo Riuso 24 SQL: vincoli, procedure e trigger
  • 25. Conseguenze dell uso di procedure e trigger Conseguenze 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) 25 SQL: vincoli, procedure e trigger
  • 26. 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 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 26 SQL: vincoli, procedure e trigger