La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Basi di Dati e Sistemi Informativi

Presentazioni simili


Presentazione sul tema: "Basi di Dati e Sistemi Informativi"— Transcript della presentazione:

1 Basi di Dati e Sistemi Informativi
Il Linguaggio SQL Home page del corso:

2 Il Linguaggio SQL SQL (Structured Query Language) e’ il linguaggio di riferimento per le basi di dati relazionali. Diverse versioni del linguaggio: SQL-86  Costrutti base SQL-89  Integrita’ referenziale SQL-92 (SQL2)  Modello relazionale, struttura a livelli SQL:1999 (SQL3)  Modello ad oggetti SQL:2003 (SQL3)  Nuove parti: SQL/JRT, SQL/XML SQL:2006 (SQL3)  Estensione di SQL/XML SQL:2008 (SQL3)  Lievi aggiunte

3 Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

4 Il Linguaggio SQL Stored Procedures  Frammenti di codice SQL, con la possibilita’ di specificare un nome, dei parametri in ingresso e dei valori di ritorno. Procedure ModificaStipendio (:MatricolaNew: varchar(20), : StipendioNew smallint) update Impiegati set Stipendio= : StipendioNew where Matricola = :MatricolaN Ogni DBMS offre estensioni procedurali differenti …

5 Il Linguaggio SQL SQL DB APPLICAZIONE ESTERNA MODELLO senza
STORED PROCEDURE TABELLE DATI NOME PROCEDURA + PARAMETRI MODELLO con STORED PROCEDURE DB APPLICAZIONE ESTERNA Efficienza Maggiore espressivita’ TABELLE DATI PROCEDURE

6 Il Linguaggio SQL Esempio: definizione di funzioni in MySQL:
CREATE FUNCTION function_name RETURNS type_return … List of SQL routine statements CREATE FUNCTION echo(s CHAR(20)) RETURNS CHAR(50) RETURN(s) mysql>> SELECT echo(“Hello”);

7 Il Linguaggio SQL Esempio: definizione di funzioni in PostgreSQL:
CREATE FUNCTION add_three_values(v1 anyelement, v2 anyelement, v3 anyelement) RETURNS anyelement AS $$ DECLARE result ALIAS for $0 BEGIN result:=v1 + v2 +v3; RETURN result END

8 Il Linguaggio SQL Generalmente, le estensioni procedurali consentono di: Creare funzioni e procedure trigger-based. Aggiungere strutture di controllo al linguaggio SQL (es. cicli, strutture condizionali if then else, etc). Dichiarare variabili e tipi di dato user-defined. Definire funzioni avanzate ed ottimizzate, che sono ritenute “sicure” dal DBMS.

9 Il Linguaggio SQL Ogni DBMS offre una sua estensione procedurale:
PL/SQL  Linguaggio di Oracle Server SQL PL  Linguaggio di IBM DB2 PL/pgSQL  Linguaggio di Postgres

10 Il Linguaggio SQL Costrutti procedurali in PostgreSQL:
Costrutti condizionali if <Condizione> then … else … endif IF user_id <> 0 THEN UPDATE USERS SET USERS. =v_ WHERE (USERS.user_id = user_id)

11 Il Linguaggio SQL Costrutti procedurali in PostgreSQL:
Costrutti iterativi (while) while (Expression) LOOP statements END LOOP WHILE ncycle>0 LOOP UPDATE SALARY SET SALARY.amount=SALARY.amount -100 ncycle:=ncycle -1;

12 Il Linguaggio SQL Costrutti procedurali in PostgreSQL:
Costrutti iterativi (for) For record_or_row IN query LOOP statements END LOOP FOR Studente IN SELECT * FROM STUDENTI LOOP UPDATE ESAMI SET Voto=30 WHERE (Corso=“Basi di Dati”)

13 Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

14 Il Linguaggio SQL Vorrei implementare un comportamento del tipo:
ORDINE Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 Vorrei implementare un comportamento del tipo: Ogni volta che viene inserito/modificato un nuovo ordine con piu’ di 5 quantita’ nel DB viene inviata una mail al Titolare dell’azienda ..

15 Il Linguaggio SQL Vorrei implementare un comportamento del tipo:
ORDINE MAGAZZINO ACQUISTO Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 Codice Quantita 123 5565 2 14354 1 Codice Q.a Data 123 3 1/2/2012 Vorrei implementare un comportamento del tipo: Ogni volta in cui l’utente fa un’ordine, si aggiorna la tabella Magazzino, e nel caso non ci siano piu’ prodotti di quel tipo, si aggiorni anche la tabella Acquisti …

16 Il Linguaggio SQL Trigger (o regole attive)  meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). Evento: primitive per la manipolazione dei dati (insert, delete, update) Condizione: Predicato booleano Azione: sequenza di istruzioni SQL, talvolta procedure SQL specifiche del DBMS.

17 Il Linguaggio SQL Trigger (o regole attive)  meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). A che servono i Trigger? 1. Garantire il soddifacimento di vincoli di integrita’ referenziale, e/o specificare meccanismi di reazione ad hoc in caso di violazione dei vincoli!

18 Il Linguaggio SQL CORSI ESAMI Nome Codice Crediti Basi di dati 6464 12 Programmazione 1213 Sistemi Operativi 1455 6 Corso Studente Voto 0121 30L 1213 25 18 Q. Che accade se un valore nella tabella esterna viene cancellato o viene modificato? A. Il vincolo di integrita’ referenziale nella tabella interna potrebbe non essere piu’ valido! Cosa fare?

19 Il Linguaggio SQL Trigger (o regole attive)  meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). A che servono i Trigger? 2. Specificare regole aziendali (business rules), ossia vincoli generici sulo schema della base di dati (es. Un impiegato non puo’ avere un aumento di stipendio superiore al 10%, pena annullamento della transazione).

20 Il Linguaggio SQL Trigger (o regole attive)  meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). SINTASSI SQL3 Create trigger Nome Modo Evento on Tabella [referencing Referenza] [for each Livello] [when (IstruzioneSQL)] Istruzione/ProceduraSQL

21 Il Linguaggio SQL Modo  before/after Evento  insert/delete/update
Referencing  qui possono essere inserite variabili globali… Livello  row (Il trigger agisce a livello di righe/ statement (Il trigger agisce globalmente a livello di tabella) I trigger possono avere modalita’ immediata oppure differita.

22 Esempio di Trigger in SQL3
Il Linguaggio SQL Esempio di Trigger in SQL3 CREATE TRIGGER CHECKAUMENTO BEFORE UPDATE OF CONTO ON IMPIEGATO FOR EACH ROW WHEN (NEW.STIPENDIO > OLD.STIPENDIO * 1.2) SET NEW.STIPENDIO=OLD.STIPENDIO * 1.2 Modo e’ definito come before. Evento e’ definito come update. Livello e’ definito come row.

23 Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

24 Il Linguaggio SQL SQL2/SQL3 prevede meccanismi di controllo di accesso alle risorse del DB (tabelle, viste, domini, etc). Di default, ogni risorsa appartiene all’utente che l’ha definita … Su ciascuna risorsa sono definiti dei privilegi (grant): insert/update/delete  tabelle/viste select  tabelle/viste references tabelle/attributi usage  domini

25 Il Linguaggio SQL Il comando grant consente di assegnare privilegi su una certa risorsa ad utenti specifici. grant Privilegio on Risorsa/e to Utente/i [with grant option] L’opzione with grant option consente di propagare il privilegio ad altri utenti del sistema… grant select on Impiegati to Marco with grant option grant delete on Impiegati, Salari to Marco, Michele

26 Il Linguaggio SQL Il comando revoke consente di revocare privilegi su una certa risorsa ad utenti specifici. revoke Privilegio on Risorsa/e from Utente/i [cascade|restrict] L’opzione cascade agisce ricorsivamente sui privilegi eventualmente concessi da quell’utente … revoke select on Impiegati to Marco cascade revoke delete on Impiegati, Salari to Marco, Michele

27 Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

28 Il Linguaggio SQL Le transazioni rappresentano unita’ di lavoro elementare che modificano il contenuto di una base di dati. start transaction update SalariImpiegati set conto=conto*1.2 where (CodiceImpiegato = 123) commit work Le transazioni sono comprese tra una start transaction ed una commit/ rollback

29 Il Linguaggio SQL Le transazioni rappresentano unita’ di lavoro elementare che modificano il contenuto di una base di dati. start transaction update SalariImpiegati set conto=conto-10 where (CodiceImpiegato = 123) if conto >0 commit work; else rollback work Le transazioni sono comprese tra una start transaction ed una commit/ rollaback

30 Il Linguaggio SQL Ogni DBMS deve garantire le seguenti proprieta’ delle transazioni (proprieta’ acide): Atomicita’  La transazione deve essere eseguita con la regola del “tutto o niente” Consistenza  La transazione deve lasciare il DB in uno stato consistente, eventuali vincoli di integrita’ non devono essere violati. Isolamento  L’esecuzione di una transazione deve essere indipendente dalle altre. Persistenza  L’effetto di una transazione che ha fatto commit work non deve essere perso.

31 Il Linguaggio SQL Gestione delle transazioni Gestione della concorrenza Gestione dell’affidabilita’ DB Gestore dell’affidabilita’  garantisce atomicita’ e persistenza … COME? Usando log e checkpoint. Gestore della concorrenza  garantisce l’isolamento in caso di esecuzione concorrente di piu’ transazioni.

32 Il Linguaggio SQL In un sistema reale, le transazioni vengono eseguite in parallelo per ragioni di efficienza / scalabilita’ … … Tuttavia, l’esecuzione concorrente determina un insieme di problematiche che devono essere gestite … T1= Read(x); x=x+1; Write(x); Commit Work T2= Read(x); x=x+1; Write(x); Commit Work Se x=3, al termine delle due transazioni x vale 5 (esecuzione sequenziale) … cosa accade in caso di esecuzione concorrente?

33 Il Linguaggio SQL Problema1: Perdita di Aggiornamento
Transazione1 (T1) Transazione2 (T2) Read(x) x=x+1 Write(x) Commit work T2 scrive 4 T1 scrive 4

34 Il Linguaggio SQL Problema2: Lettura sporca Transazione1 (T1)
Read(x) x=x+1 Write(x) Commit work Rollback work T2 legge 4!

35 Il Linguaggio SQL Problema3: Letture incosistenti Transazione1 (T1)
Read(x) x=x+1 Write(x) Commit work T1 legge 3! T1 legge 4!

36 Il Linguaggio SQL Problema4: Aggiornamento Fantasma Vincolo: x+y+z
deve essere = a 1000 Transazione1 (T1) Transazione2 (T2) Read(x) Read(y) y=y-100 Read(z) z=z+100 Write(y), Write(z) Commit work s=x+y+z; commit work Vincolo violato!!


Scaricare ppt "Basi di Dati e Sistemi Informativi"

Presentazioni simili


Annunci Google