La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Amministrazione e Viste.

Presentazioni simili


Presentazione sul tema: "Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Amministrazione e Viste."— Transcript della presentazione:

1

2 Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Amministrazione e Viste

3 Giugno-Pulvirenti AA SQL per definire ed amministrare Ad ogni utente tipicamente viene associata una base di dati, creata dallamministratore del sistema. Lutente diventa lamministratore potendo stabilire gli accessi di eventuali altri utenti alla sua base di dati. La creazione consiste nel definire incrementalmente uno schema con un certo nome, interattivamente o da programma, e tutti i suoi elementi vengono registrati in un catalogo.

4 Giugno-Pulvirenti AA CREATE SCHEMA CREATE SCHEMA Nome AUTHORIZATION Utente Definizioni Dove: –Si crea il database chiamato Nome –Utente e lamministratore –Le Definizioni creano gli elementi dello schema (Tabelle,Viste,Indici,etc…)

5 Giugno-Pulvirenti AA DROP SCHEMA DROP SCHEMA Nome [RESTRICT | CASCADE] cancella la base di dati Nome Restrict: drop non viene eseguito se il database non è vuoto. Cascade: Vengono rimossi automaticamente tutti i dati presenti nel database

6 Giugno-Pulvirenti AA Definizione dei dati in SQL Istruzione CREATE TABLE: –definisce uno schema di relazione e ne crea unistanza vuota –specifica attributi, domini e vincoli

7 Giugno-Pulvirenti AA Create Table CREATE TABLE Nome (Attributo Tipo[Vincolo {,Vincolo}] {,Attributo Tipo[Vincolo {,Vincolo}]}) [VincoloDiTabella {, VincoloDiTabella}]

8 Giugno-Pulvirenti AA CREATE TABLE, esempio CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) )

9 Giugno-Pulvirenti AA Domini Domini elementari (predefiniti) Domini definiti dall'utente (semplici, ma riutilizzabili)

10 Giugno-Pulvirenti AA Domini elementari Carattere: singoli caratteri o stringhe, anche di lunghezza variabile Bit: singoli booleani o stringhe Numerici, esatti e approssimati Data, ora Sistemi diversi estendono il set di base con domini non standard (vettori, periodi, ecc.)

11 Giugno-Pulvirenti AA Domini o tipi CHAR(n) stringhe di lunghezza n VARCHAR(n) stringhe di lunghezza variabile con al massimo n caratteri INTEGER interi REAL reali NUMERIC (p,s) p cifre di cui s decimali FLOAT(p) binari con p cifre significative DATE,TIME per date ed ore.

12 Giugno-Pulvirenti AA Definizione di domini Istruzione CREATE DOMAIN: –definisce un dominio (semplice), utilizzabile in definizioni di relazioni, anche con vincoli e valori di default

13 Giugno-Pulvirenti AA CREATE DOMAIN, esempio CREATE DOMAIN Voto AS SMALLINT DEFAULT NULL CHECK ( value >=18 AND value <= 30 )

14 Giugno-Pulvirenti AA Vincoli intrarelazionali NOT NULL UNIQUE definisce chiavi PRIMARY KEY: chiave primaria (una sola, implica NOT NULL) CHECK, vedremo più avanti

15 Giugno-Pulvirenti AA UNIQUE e PRIMARY KEY due forme: –nella definizione di un attributo, se forma da solo la chiave –come elemento separato

16 Giugno-Pulvirenti AA CREATE TABLE, esempio CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) )

17 Giugno-Pulvirenti AA Matricola CHAR(6) PRIMARY KEY Matricola CHAR(6), …, PRIMARY KEY (Matricola) PRIMARY KEY, alternative

18 Giugno-Pulvirenti AA CREATE TABLE, esempio CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) )

19 Giugno-Pulvirenti AA Chiavi su più attributi, attenzione Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, UNIQUE (Cognome,Nome), NomeCHAR(20) NOT NULL UNIQUE, Cognome CHAR(20) NOT NULL UNIQUE, Non è la stessa cosa!

20 Giugno-Pulvirenti AA Vincoli interrelazionali CHECK, vedremo più avanti REFERENCES e FOREIGN KEY permettono di definire vincoli di integrità referenziale di nuovo due sintassi –per singoli attributi –su più attributi E' possibile definire politiche di reazione alla violazione

21 Giugno-Pulvirenti AA Matricola Vigili Cognome Rossi Neri Nome Luca Piero Mario MoriGino7543 Infrazioni Codice Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile ProvNumero MI TO PR 39548K E

22 Giugno-Pulvirenti AA Infrazioni Codice Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile ProvNumero MI TO PR 39548K E Auto ProvNumero MI TO PR 39548K E Cognome Rossi Neri Nome Mario Luca

23 Giugno-Pulvirenti AA CREATE TABLE, esempio CREATE TABLE Infrazioni( Codice CHAR(6) NOT NULL PRIMARY KEY, Data DATE NOT NULL, Vigile INTEGER NOT NULL REFERENCES Vigili(Matricola), Provincia CHAR(2), Numero CHAR(6), FOREIGN KEY(Provincia, Numero) REFERENCES Auto(Provincia, Numero) )

24 Giugno-Pulvirenti AA Modifiche degli schemi ALTER DOMAIN ALTER TABLE DROP DOMAIN DROP TABLE...

25 Giugno-Pulvirenti AA Definizione degli indici è rilevante dal punto di vista delle prestazioni ma è a livello fisico e non logico in passato era importante perché in alcuni sistemi era l'unico mezzo per definire chiavi CREATE INDEX

26 Giugno-Pulvirenti AA SQL, operazioni sui dati interrogazione: –SELECT modifica: –INSERT, DELETE, UPDATE

27 Giugno-Pulvirenti AA Insert INSERT INTO Tabella [(Attributo {,Attributo} )] VALUES ( Valore {,Valore} ) Esempio –INSERT INTO Esami VALUES (DB1, , 27)

28 Giugno-Pulvirenti AA Delete DELETE FROM Tabella WHERE Condizione Esempio: –DELETE FROM Esami WHERE Matricola =

29 Giugno-Pulvirenti AA Update UPDATE Tabella SET Attributo = Espr {,Attributo = Espr} WHERE Condizione Esempio: –UPDATE Aule SET Aula = 126 WHERE Aula = 3

30 Giugno-Pulvirenti AA Esempi CREATE TABLE Studenti( Nome CHAR(30), Matricola INTEGER, Indirizzo CHAR(30), Telefono INTEGER) CREATE TABLE FuoriCorso LIKE Studenti

31 Giugno-Pulvirenti AA Altri modi di definire tabelle CREATE TABLE Nome AS EsprSelect Esempio: CREATE TABLE EsamiBuoni LIKE Esami AS SELECT * FROM Esami WHERE Voto > 27

32 Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: vincoli dIntegrità

33 Giugno-Pulvirenti AA Vincoli dintegrita Riguardano i valori ammissibili degli attributi di una tupla –Vincoli Intrarelazionali: nellambito della stessa relazione –Vincoli Referenziali (o Interrelazionali): tra diverse relazioni Vengono controllati durante le tre possibili operazioni di modifica SQL –INSERT,DELETE e UPDATE –Devono essere sempre soddisfatti altrimenti la transazione fallisce –Oppure, lutente puo opzionalmente definire della azioni (correttive) da intraprendere per ripristinare lintegrita

34 Giugno-Pulvirenti AA A cosa servono i vincoli dintegrita Migliorare la qualità dei dati Arricchire semanticamente la base di dati La loro definizione è parte del processo di progettazione del data base Usati internamente dal sistema per ottimizzare lesecuzione

35 Giugno-Pulvirenti AA Esempio di DB semanticamente errato StudenteVotoLodeCorso e lode e lode Esami Matricola Cognome Rossi Neri Bianchi Nome Mario Piero Luca Studenti e lode

36 Giugno-Pulvirenti AA Vincoli su una n-upla NOT NULL : –e implicito se lattributo fa parte di una chiave primaria CHECK Condizione : –specifica i valori ammissibili; esempio: Voto INTEGER NOT NULL CHECK (18 Voto AND Voto 31) DEFAULT(Costante|NULL) –assegna quel valore di default per ogni inserimento CHECK Condizione : –anche per attributi diversi della stessa n-upla

37 Giugno-Pulvirenti AA Vincoli Intrarelazionali UNIQUE: –lattributo e una chiave PRIMARY KEY [Nome Chiave] (Attributo{,Attributo} ) –dove gli attributi devono essere dichiarati tutti NOT NULL UNIQUE (Attributo{,Attributo} ) –definisce una chiave con piu attributi

38 Giugno-Pulvirenti AA Vincoli Interrelazionali FOREIGN KEY [NomeChiaveEsterna] (Attributo{,Attributo} ) REFERENCES TabellaRef ON DELETE {NO ACTION,CASCADE,SET NULL} dove per la TabellaRef e stata definita una chiave primaria. Impedisce linserzione di n-uple con il valore della chiave esterna che non corrisponde ad un valore della chiave primaria della TabellaRef. Se unoperazione di cancellazione su TabellaRef viola il vincolo referenziale allora vengono applicate le tre azioni:

39 Giugno-Pulvirenti AA Azioni per Vincoli su Chiavi Esterne ON DELETE NO ACTION : –rifiuta loperazione (la piu diffusa nei DBMS) ON DELETE CASCADE : –cancella tutte le n-uple con valori della chiave esterna corrispondenti alla chiave primaria delle n- uple cancellate ON DELETE SET NULL –assegna il valore NULL agli attributi della chiave esterna

40 Giugno-Pulvirenti AA Vincoli sui valori della tupla NOT NULL –implicito se lattributo fa parte di una chiave primaria –Esempio: campo matricola nella tabella Studente DEFAULT (Costante|NULL) –assegna un valore di default per ogni inserimento se non specificato –Esempio: DEFAULT CURRENT DATE CHECK Condizione –Dove Condizione e unespressione booleana per il controllo di attributi, costanti ed espressioni –Devessere valutata True per la corretta esecuzione della transazione –Vincoli sul dominio: Esempio: specifica i valori ammissibili nellattributo Voto della tabella Esami: –Voto NOT NULL –(18 Voto AND Voto 30) –Vincoli basati su piu attributi (Lode <> Si) OR (Voto = 30)

41 Giugno-Pulvirenti AA Definizione vincoli intrarelazionali PRIMARY KEY [Nome Chiave] (Attributo{,Attributo} ) –gli attributi devono essere dichiarati tutti NOT NULL –Esempio: Attributo Matricola nella relazione Studenti UNIQUE (Attributo{,Attributo} ) –definisce una chiave con uno o piu attributi –Esempio: (Nome,Cognome,DataDiNascita) –Nota: Nome not null unique, Cognome not null unique –E diverso da: Nome not null, Cognome not null, UNIQUE (Nome, Cognome)

42 Giugno-Pulvirenti AA Vincoli dintegrita referenziali (o interrelazionali) Tuple di relazioni diverse sono correlati per mezzo del valore di chiavi (primarie) Servono a garantire che i valori in una certa tabella facciano riferimento a valori reali di unaltra tabella –Esempio: Esami(...,Matricola), Studenti( Matricola,...)

43 Giugno-Pulvirenti AA Matricola Vigili Cognome Rossi Neri Nome Luca Piero Mario MoriGino7543 Infrazioni Codice Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile ProvNumero MI TO PR 39548K E

44 Giugno-Pulvirenti AA Auto ProvNumero MI TO PR 39548K E Cognome Rossi Neri Nome Mario Luca Infrazioni Codice Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile ProvNumero MI TO PR 39548K E MI TO PR 39548K E MI TO PR 39548K E

45 Giugno-Pulvirenti AA Un vincolo di integrità referenziale (foreign key) fra gli attributi X di una relazione R 1 e unaltra relazione R 2 impone ai valori su X in R 1 di comparire come valori della chiave primaria di R 2 Nellesempio precedente: –vincoli di integrità referenziale fra: lattributo Vigile della relazione INFRAZIONI e la relazione VIGILI gli attributi Prov e Numero di INFRAZIONI e la relazione AUTO NULL per evitare il controllo del vincolo Vincolo di integrità referenziale

46 Giugno-Pulvirenti AA Infrazioni Codice Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile ProvNumero MI TO PR 39548K E Auto ProvNumero MI TO PR E39548 F Cognome Rossi Neri Nome Mario Luca TOE39548 TO E39548 Violazione di vincolo di integrità referenziale

47 Giugno-Pulvirenti AA Integrità referenziale e valori nulli Impiegati Matricola Cognome Rossi Neri Verdi Progetto IDEA XYZ NULL Progetti Codice IDEA BOH XYZ Inizio 01/ / /2001 Durata Costo BianchiIDEA

48 Giugno-Pulvirenti AA Azioni compensative Esempio: Viene eliminata una tupla causando cosi' una violazione Tre possibili azioni –Rifiuto dell'operazione ON DELETE NO ACTION (la piu diffusa nei DBMS) –Eliminazione in cascata ON DELETE CASCADE: cancella tutte le tuple con valori della chiave esterna corrispondenti alla chiave primaria delle tuple cancellate –Introduzione di valori nulli ON DELETE SET NULL assegna il valore NULL agli attributi della chiave esterna

49 Giugno-Pulvirenti AA Rifiuto della cancellazione Impiegati Matricola Cognome Rossi Neri Verdi Progetto IDEA XYZ NULL 73032BianchiIDEA Progetti Codice IDEA BOH XYZ Inizio 01/ / /2001 Durata Costo XYZ07/ XYZ07/ XYZ07/ NeriXYZ 53524NeriXYZ La transazione fallisce e XYZ non puo essere cancellato dalla relazione Progetti

50 Giugno-Pulvirenti AA Eliminazione in cascata Impiegati Matricola Cognome Rossi Neri Verdi Progetto IDEA XYZ NULL 73032BianchiIDEA Progetti Codice IDEA BOH XYZ Inizio 01/ / /2001 Durata Costo XYZ07/ XYZ07/ XYZ07/ NeriXYZ La transazione termina e XYZ viene cancellato anche dalla relazione Impiegati

51 Giugno-Pulvirenti AA Introduzione di valori nulli Impiegati Matricola Cognome Rossi Neri Verdi Progetto IDEA XYZ NULL 73032BianchiIDEA Progetti Codice IDEA BOH XYZ Inizio 01/ / /2001 Durata Costo XYZ07/ XYZ07/ XYZ07/ NULL La transazione termina e allattributo Impiegati.Progetto viene assegnato NULL

52 Giugno-Pulvirenti AA Auto ProvNumero MI TO PR 39548K E Cognome Rossi Neri Nome Mario Luca Incidenti Codice Data 1/2/95 5/4/96 ProvBNumeroB MI TO 39548K E39548 ProvANumeroA TO PR E Vincoli multipli su più attributi

53 Giugno-Pulvirenti AA Vincoli Interrelazionali, Sintassi FOREIGN KEY [NomeChiaveEsterna] (Attributo{,Attributo} ) REFERENCES TabellaRef ON DELETE {NO ACTION,CASCADE,SET NULL} –dove per la TabellaRef e stata definita una chiave primaria Quindi: impedisce linserimento di tuple con il valore della chiave esterna che non corrisponde ad un valore della chiave primaria della TabellaRef

54 Giugno-Pulvirenti AA Esempio Riassuntivo CREATE TABLE Clienti ( CodiceCliente CHAR(3) UNIQUE NOT NULL, Nome CHAR(30) NOT NULL, Citta CHAR(30) NOT NULL, Sconto INTEGER NOT NULL CHECK(Sconto>0 AND Sconto<100), PRIMARY KEY pk_Clienti(CodiceCliente)) CREATE TABLE Agenti ( CodiceAgente CHAR(3) UNIQUE NOT NULL, Nome CHAR(30) NOT NULL, Zona CHAR(8) NOT NULL, Supervisore CHAR(3), Commissione INTEGER) PRIMARY KEY pk_Agenti(CodiceAgente), CHECK (Supervisore CodiceAgente OR Supervisore IS NULL)

55 Giugno-Pulvirenti AA Esempio Riassuntivo CREATE TABLE Ordini( NumOrdine CHAR(3) NOT NULL, CodiceCliente CHAR(3) NOT NULL, CodiceAgente CHAR(3) NOT NULL, Data CHAR(8) NOT NULL, Prodotto CHAR(3) NOT NULL, Ammontare INTEGER NOT NULL CHECK (Ammontare > 100) PRIMARY KEY pk-Ordini (NumOrdine) FOREIGN KEY fk_ClienteOrdine (CodiceCliente) REFERENCES Clienti ON DELETE NO ACTION FOREIGN KEY fk_AgenteOrdine (CodiceAgente) REFERENCES Agenti ON DELETE NO ACTION

56 Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Viste

57 Giugno-Pulvirenti AA Viste (View) Oltre alle tabelle di base che fanno parte dello schema si possono creare delle tabelle ausiliarie virtuali Sono virtuali in quanto sembrano tabelle a tutti gli effetti ma sono delle relazioni create al volo Utilizzate per vari scopi: –Semplificazione –Protezione dati –Scomposizione query complesse –Riorganizzazione dati secondo nuovi schemi –Etc.

58 Giugno-Pulvirenti AA Definizione VIEW Sintassi creazione VIEW: CREATE VIEW NomeVista [( Attributo {,Attributo} )] AS Query-Select

59 Giugno-Pulvirenti AA Esempio definizione VIEW CREATE VIEW MediaVoti (Matricola,Media) AS SELECT Matricola, AVG(Voto) FROM Esami GROUP BY Matricola Esecuzione: SELECT * FROM MediaVoti

60 Giugno-Pulvirenti AA Le VIEW possono essere usate come tabelle SELECT Nome, Media FROM Studenti, MediaVoti WHERE Studenti.Matricola = MediaVoti.Matricola Le VIEW possono essere distrutte alla pari di tabelle –DROP (TABLE | VIEW) Nome [RESTRICT|CASCADE] –Con RESTRICT non viene cancellata se e utilizzata in altre viste –Con CASCADE verranno rimosse tutte le viste che usano la View o la Tabella rimossa –Non tutti i sistemi permettono luso di RESTRICT e CASCADE –La distruzione di una VIEW non altera le tabelle su cui la VIEW si basa

61 Giugno-Pulvirenti AA Le VIEW possono essere usate come tabelle Una VIEW puo essere definita sulla base di unaltra VIEW Nelle prime versioni di SQL non era possibile modificare una VIEW tramite Insert, Delete, Update –Non piu vero nei nuovi DBMS (Vedremo dopo) Che succede se una tabella usata in una VIEW viene alterata o cancellata (senza specificare RESTRICT o CASCADE)? –Dipende dal DBMS: la VIEW viene marcata inoperative, oppure La modifica/cancellazione viene negata Etc.

62 Giugno-Pulvirenti AA Uso delle VIEW per query complesse Semplificare query complesse Esempio: non possiamo scrivere SELECT AVG(COUNT(*)) FROM AGENTI GROUP BY ZONE –AVG deve agire sui valori di un attributo.

63 Giugno-Pulvirenti AA Uso delle VIEW per query complesse CREATE VIEW AgPerZona (Zona,NumAg) AS SELECT Zona,COUNT(*) FROM AGENTI GROUP BY Zona SELECT AVG(NumAg) FROM AgPerZona DROP AgPerZona

64 Giugno-Pulvirenti AA Uso delle VIEW per Sicurezza CREATE VIEW EsamiPublici AS SELECT Corso,Voto FROM Esami Data la tabella ClientiBanca(Nome,Indirizzo,Saldo) CREATE VIEW ClientiInd AS SELECT Nome,Indirizzo FROM ClientiBanca

65 Giugno-Pulvirenti AA Completiamo lo Schema…….. CREATE VIEW OrdiniPerAgente(CodiceAgente, TotaleOrdini) AS SELECT CodiceAgente, SUM(Ammontare) FROM Ordini GROUP BY CodiceAgente CREATE VIEW AgentiConOrdini AS SELECT a.CodiceAgente, a.Nome, a.Zona, a.Supervisore,a.Commissione, v.TotaleOrdini FROM OrdiniPerAgente v, Agenti a WHERE a.CodiceAgente =v.CodiceAgente

66 Giugno-Pulvirenti AA Mascherare lorganizzazione logica dei dati tramite VIEW Immaginiamo la seguente tabella: –Agenti( CodiceAgente, Nome, Zona, Commissione, Supervisore) Per riorganizzazione aziendale si decide di assegnare un Supervisore ad una zona intera invece del singolo agente 1) CREATE TABLE Zone (Zona CHAR(8), Supervisore CHAR(3)) AS SELECT DISTINCT Zona,Supervisore FROM Agenti 2) CREATE TABLE NuoviAgenti AS SELECT CodiceAgente,Nome,Zona,Commissione FROM Agenti 3) DROP Agenti 4) CREATE VIEW Agenti AS SELECT * FROM NuoviAgenti NATURAL JOIN Zone

67 Giugno-Pulvirenti AA Aggiornamento delle VIEW Le operazioni INSERT/UPDATE/DELETE sulle VIEW non erano permesse nelle prime edizioni di SQL I nuovi DBMS permettono di farlo con certe limitazioni dovute alla definizione della VIEW stessa Che senso ha aggiornare una VIEW? Dopotutto si potrebbe aggiornare la tabella di base direttamente…

68 Giugno-Pulvirenti AA Aggiornamento delle VIEW, cont. … utile nel caso di accesso dati controllato Esempio: –Impiegato( Nome, Cognome, Dipart, Ufficio, Stipendio) Il personale della segreteria non puo accedere ai dati sullo stipendio ma puo modificare gli altri campi della tabella, aggiungere e/o cancellare tuple Si puo controllare laccesso tramite la definizione della VIEW: –CREATE VIEW Impiegato2 AS SELECT Nome, Cognome, Dipart, Ufficio FROM Impiegato INSERT INTO Impiegato2 VALUES (…) –Stipendio verra inizializzato a Null –Se Null non e permesso per Stipendio loperazione fallisce

69 Giugno-Pulvirenti AA Aggiornamento VIEW 2 Immaginiamo la seguente VIEW: CREATE VIEW ImpiegatoRossi AS SELECT * FROM Impiegato WHERE Cognome=Rossi La seguente operazione ha senso: –INSERT INTO ImpiegatoRossi (…Rossi,…)

70 Giugno-Pulvirenti AA Aggiornamento VIEW 2, cont. Ma che succede nel caso di: –INSERT INTO ImpiegatoRossi (…Bianchi,…) –In genere e permesso, finisce nella tabella base ma non e visibile dalla VIEW –Si puo controllare tramite lopzione WITH CHECK OPTION: CREATE VIEW ImpiegatoRossi AS SELECT * FROM Impiegato WHERE Cognome=Rossi WITH CHECK OPTION Adesso linsert con Bianchi fallisce, quella con Rossi viene invece eseguita.

71 Giugno-Pulvirenti AA Aggiornamento VIEW 3 Consideriamo il seguente caso: –Impiegato( Nome, Cognome, Dipart, Ufficio, Stipendio) –Dipartimenti( Dipart, Indirizzo) –CREATE VIEW IMP_IND AS SELECT Nome, Cognome, d.dipart, indirizzo FROM Impiegato i join Dipartimenti d ON i.Dipart=d.Dipart Un INSERT sulla VIEW IMP_IND dovrebbe inserire su entrambe le tabelle base In alcuni casi potrebbe inserire in una ma non nellaltra In genere questoperazione non e consentita Alcuni DBMS consentirebbero lINSERT se Impiegati.Dipart fosse una foreign key su Dipartimenti.Dipart e questultima fosse chiave primaria

72 Giugno-Pulvirenti AA Aggiornamento VIEW, riepilogo In genere una VIEW definita su una singola tabella e modificabile se gli attributi della VIEW contengono la chiave primaria (e altre chiavi) In genere VIEW definite su piu tabelle non sono aggiornabili –Alcuni DBMS, come discusso prima, lo permettono nel caso certe condizioni, molto restrittive, siano rispettate VIEW che usano funzioni di aggregazione non sono aggiornabili PRINCIPIO di base per laggiornamento delle VIEW: –Ogni riga ed ogni colonna della VIEW deve corrispondere ad una ed una sola riga ed una ed una sola colonna della tabella base

73 Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Procedure e Trigger

74 Giugno-Pulvirenti AA Aspetti procedurali dei DBMS Procedure: Programmi memorizzati nel DBMS che vengono eseguiti su esplicita richiesta degli utenti. Trigger: Programmi memorizzati nel DBMS che vengono attivati automaticamente dopo le operazioni di modifica sulle tabelle

75 Giugno-Pulvirenti AA Procedure Possono essere costituite da un unico comando SQL parametrizzato I moderni DBMS offrono un linguaggio procedurale piu ricco –Oracle: PL/SQL –Sybase: Transact/SQL –IBM-DB2 –MySQL (Ver.5)?? Possono anche essere scritte in linguaggi standard: –C/C++, Java –Compilate come oggetti esterni integrati dal DBMS In alcuni casi possono eseguire azioni esterne: –Cancellare un file –Spedire un

76 Giugno-Pulvirenti AA Linguaggio procedurale Complementano la natura dichiarativa di SQL Costrutti tipo: FOR, WHILE, LOOP, IF, etc. Scansione iterativa di tabelle

77 Giugno-Pulvirenti AA Esempio linguaggio procedurale DB2 BEGIN ATOMIC DECLARE cur INT; SET cur = MICROSECOND(CURRENT TIMESTAMP); IF cur > THEN UPDATE staff SET name = CHAR(cur) WHERE id = 10; ELSEIF cur > THEN UPDATE staff SET name = CHAR(cur) WHERE id = 20; ELSE UPDATE staff SET name = CHAR(cur) WHERE id = 30; END IF; END Comando IF/THEN

78 Giugno-Pulvirenti AA Esempio linguaggio procedurale DB2 BEGIN ATOMIC FOR V1 AS SELECT dept AS dname, max(id) AS max_id FROM staff GROUP BY dept HAVING COUNT(*) > 1 ORDER BY dept DO UPDATE staff SET id = id * -1 WHERE id = v1.max_id; UPDATE staff SET dept = dept / 10 WHERE dept = v1.dname AND dept < 30; END FOR; END Comando FOR per scansione tabella

79 Giugno-Pulvirenti AA Esempio linguaggio procedurale DB2 BEGIN ATOMIC DECLARE c1, C2 INT DEFAULT 1; WHILE c1 < 10 DO WHILE c2 < 20 DO SET c2 = c2 + 1; END WHILE; SET c1 = c1 + 1; END WHILE; UPDATE staff SET salary = c1,comm = c2 WHERE id = 10; END Comando WHILE per scansione tabella

80 Giugno-Pulvirenti AA Vantaggi delle procedure Consentono di condividere fra gli utenti delle attivita comuni, in modo da centralizzare la manutenzione, la modifica etc.. Unificano la semantica di certe operazioni sul DB per ogni applicazione Possono controllare in modo centralizzato certi vincoli dintegrita non esprimibili nelle tabelle.

81 Giugno-Pulvirenti AA Vantaggi delle procedure Riducono il traffico sulla rete dovuto ad applicazioni remote, infatti invece di agire interattivamente con il DBMS lutente spedisce una volta per tutte una chiamata alla procedura ricevendone la risposta. Garantiscono la sicurezza dei dati consentendo a certi utenti di accedere ai dati attraverso certe procedure e non direttamente

82 Giugno-Pulvirenti AA Basi di dati Attive Trigger: Regole basate sul paradigma Event-Condition-Action (ECA) incorporate nella base di dati –Struttura tipica di una regola/trigger: when Event if Condition then Action I DBMS attivi hanno un comportamento reattivo in contrasto col passivo della basi di dati tradizionali –Eseguono sia transazioni utente che trigger I trigger sono simili alle procedure ma vengono invocati automaticamente in seguito alle operazioni di modifica della base di dati (INSERT/DELETE/UPDATE) Fanno parte della definizione della base di dati Arricchiscono semanticamente lo schema relazionale

83 Giugno-Pulvirenti AA Basi di dati Attive, cont. La loro sintassi e stata standardizzata in SQL-1999 Sistemi relazionali commerciali (e non) includono i trigger fin dagli anni 80 Cio ha causato difformita di sintassi difficilmente riconciliabile – non esiste ancora unimplementazione Standard da un punto di vista sintattico Estensione del CHECK in quanto permettono di operare (modificare) su altre tabelle Possono anche scatenare azioni esterne al DB –Spedire , cancellare file, etc.

84 Giugno-Pulvirenti AA Utilizzo trigger Business rules, parte della procedura di business applicativa (normalmente eseguite in modo asincrono dallapplicazione) –Automazione magazzino con riordino automatico –Spedizione solleciti –Controllo attivita conti bancari/carte di credito –Acquisto/Vendita automatica strumenti finanziari Auditing e Logging, memorizzazione eventi per controlli –Esempi: Storico delle modifiche effettuate su una tabella per recupero dati Elenco dei login effettuati (da chi e quando) Controllo delle attivita (chi ha fatto cosa e quando) Etc. Version Management –Conservare varie versioni dello stato della base di dati nel tempo

85 Giugno-Pulvirenti AA Utilizzo Trigger Duplicazione database –trasparente tramite luso dei trigger –Implementazione database distribuiti Vincoli dintegrita complessi non esprimibili con il comando CHECK Workflow management –Esempio: Assegnare sostituto per chiamate durgenza

86 Giugno-Pulvirenti AA Trigger Passivi Sono quelli che segnalano un fallimento. Sono di due tipi: Quelli che definiscono vincoli non esprimibili direttamente (ad esempio quelli dinamici) Quelli che controllano le operazioni degli utenti basandosi sui parametri della query.Ad esempio si possono inserire dati solo se (il codice del)la zona e quella dellutente che esegue linserimento.

87 Giugno-Pulvirenti AA Paradigma Event-Condition-Action Semantica operativa: –Quando succede levento… –… se la condizione e soddisfatta… –… esegui lazione specificata Event: Aggiornamento dati tramite INSERT, UPDATE o DELETE Condition: Predicato SQL –Opzionale Action: Sequenza di comandi SQL o SQL procedurale, ROLLBACK, etc. Ogni trigger e associato ad una sola tabella e viene attivato dalle operazioni dirette a quella tabella

88 Giugno-Pulvirenti AA Esempi trigger Espressi in sintassi non-standard: CREATE RULE ControlloStipendio ON Impiegati WHEN Inserted, Deleteted, Updated(Stipendio) IF (select avg(stipendio) from impiegati) > 100 THEN update impiegati set stipendio=stipendio * 0.9 CREATE RULE ControlloRicchi ON Impiegati WHEN Inserted IF EXISTS ( select * from INSERTED where stipendio>100) THEN Insert into ImpiegatiRicchi ( select * from INSERTED where stipendio>100)

89 Giugno-Pulvirenti AA Esempio esecuzione trigger Aldo90 Maria90 Luca110 Aldo90 Maria90 Luca110 Piero150 Mario120 Inseriamo: (Piero, 150) e (Mario, 120) Il trigger ControlloStipendio parte: Aldo81 Maria81 Luca99 Piero135 Mario108 … La tabella impiegati inizialmente:

90 Giugno-Pulvirenti AA Esempio esecuzione trigger,cont Aldo73 Maria73 Luca89 Piero121 Mario97 Il trigger ControlloStipendio parte di nuovo: Ricorsione Inoltre, alla fine la tabella ImpiegatiRicchi conterra: Piero121

91 Giugno-Pulvirenti AA Problemi con i Trigger I sistemi commerciali adottano diverse semantiche per lattivazione dei trigger e diversi modi di interazione fra i meccanismi di attivazione. Ecco le principali differenze: Granularita: Se la modifica riguarda un insieme di n-uple (come con INSERT,UPDATE e DELETE), allora in certi sistemi il trigger viene eseguito una sola volta (trigger di comando) in altri sistemi viene eseguito tante volte quante sono le n-uple modificate (trigger di riga). In ORACLE e possibile scegliere con FOR EACH ROW. Invece in Sybase e attivato una sola volta per comando. In questo caso si usano le tabelle inserted e deleted contenenti le righe inserite e cancellate (unupdate e considerata la coppia cancellazione seguita da una corrispondente inserzione)

92 Giugno-Pulvirenti AA Granularita Due tipi: –Row-level –Statement-level Row-level –Il trigger viene eseguito una volta per ogni tupla coinvolta nelloperazione di modifica Statement-level –Il trigger viene eseguito una sola volta per tutte le tuple coinvolte Richiedono una sintassi diversa –Row-level: Riferimento ad una riga sola –Statement-level: Riferimento ad una tabella

93 Giugno-Pulvirenti AA Esempio CREATE TRIGGER cancellaAgente AFTER DELETE ON Agenti FOR EACH ROW BEGIN DELETE Totali WHERE CodiceAgente = :old.CodiceAgente; END; Diventa in Sybase CREATE TRIGGER cancellaAgente AFTER DELETE ON Agenti BEGIN DELETE Totali WHERE CodiceAgente IN (SELECT deleted.CodiceAgente FROM deleted) END;

94 Giugno-Pulvirenti AA Tuple e Tabelle di transizione Tuple e tabelle temporanee visibili allinterno del trigger eseguito che contengono la porzione di dati manipolati dal comando SQL che ha attivato il trigger –Servono per accedere ai dati manipolati dal comando che ha scatenato il trigger –Vengono usate in modo standard dallSQL del trigger Possono essere usate sia nella condizione che nellazione Nella granularita statement-level il trigger usa delle tabelle di transizione: –DELETE: Una tabella di transizione con tutte le tuple cancellate –INSERT: Una tabella di transizione con tutte le tuple inserite –UPDATE: Una tabella di transizione con tutte le tuple con i vecchi valori ed una con tutte le tuple con i nuovi valori Nella granularita row-level il trigger usa delle tuple di transizione: –DELETE: Una per la tupla cancellata –INSERT: Una per la tupla inserita –UPDATE: Una per la tupla con i vecchi valori ed una con i nuovi valori

95 Giugno-Pulvirenti AA Modo di esecuzione del trigger Indica se far partire il trigger prima (BEFORE) o dopo (AFTER) lesecuzione fisica del comando impartito BEFORE –viene normalmente usato per modificare i dati del comando impartito prima dellesecuzione (fisica) del comando stesso… (vedi esempio) –In genere limitato nei comandi che puo eseguire AFTER –Molto piu comune –Pieno accesso allSQL e SQL procedurale

96 Giugno-Pulvirenti AA Esempio Trigger BEFORE in DB2 CREATE TRIGGER T1 NO CASCADE BEFORE INSERT ON IMPIEGATO REFERENCING NEW AS N //come chiamare le nuove tuple FOR EACH ROW WHEN ( N.STIPENDIO > (SELECT MAX(STIPENDIO) FROM IMPIEGATO)) SET N.STIPENDIO = (SELECT MAX(STIPENDIO) FROM IMPIEGATO)

97 Giugno-Pulvirenti AA Esempio granularita per AFTER in DB2 create table progetti( codice char(10) not null primary key, Inizio date, Durata int, Costo int ) create table progetti_cancellati( codice char(10) not null, cancellato_il date with default current date ) create trigger storico_prog_canc after delete on progetti referencing old as o for each row begin atomic insert into progetti_cancellati values( o.codice, current date); end create trigger storico_prog_canc2 after delete on progetti referencing old_table as o for each statement begin atomic insert into progetti_cancellati select codice, current date from o; end

98 Giugno-Pulvirenti AA Esecuzione del trigger Immediata –Non appena il comando viene eseguito –Nel mezzo della transazione –Fa parte della stessa transazione Differita –Esecuzione rimandata alla fine della transazione –Fa parte della stessa transazione Disaccoppiata –Esecuzione del trigger fa parte di una transazione separata, viene quindi eseguito anche se la transazione precedente fallisce –Non disponibile in tutti i sistemi Nota che questi modi di esecuzione possono essere in conflitto con la semantica del BEFORE/AFTER –Dipende dal DBMS

99 Giugno-Pulvirenti AA Esempio sintassi trigger Oracle Sintassi Oracle: CREATE TRIGGER NomeTrigger TipoTrigger (TipoOperazione{OR TipoOperazione}) [OF Attributo] ON NomeTabella [FOR EACH ROW] [WHEN (Condizione)] Procedura in PL/SQL TipoTrigger ::= (BEFORE|AFTER) TipoOperazione ::= (DELETE|INSERT|UPDATE) FOR EACH ROW specifica che lazione deve essere ripetuta su ogni n-upla (oppure una volta per tutte)

100 Giugno-Pulvirenti AA About PL/SQL –PL/SQL e unestensione di SQL con delle caratteristiche di linguaggi programmazione. –I comandi SQL sono inclusi in unita procedurali di codice.

101 Giugno-Pulvirenti AA Benefici di PL/SQL Integrazion e Applicazione Oracle Server Libreriacondivisa

102 Giugno-Pulvirenti AA Benefici di PL/SQL Applicazione Altri DBMS Applicazione Oracle con PL/SQL SQL SQL SQL SQL SQLIF...THENSQLELSESQL END IF; SQL Prestazioni Elevate

103 Giugno-Pulvirenti AA Benefici di PL/SQL Modularizzazione programmi DECLARE BEGIN EXCEPTION END;

104 Giugno-Pulvirenti AA Benefici di PL/SQL –Portabile. –Possono essere dichiarati identificatori.

105 Giugno-Pulvirenti AA Benefici di PL/SQL –Si puo programmare con un linguaggio procedurale che possiede strutture di controllo. –Consente la gestione degli errori.

106 Giugno-Pulvirenti AA PL/SQL Struttura Blocco DECLARE – Opzionale – Variabili, cursori, eccezioni definite dallutente BEGIN – Obbligatorio – Comandi SQL – Comandi PL/SQL EXCEPTION – Opzionale – Azioni da effettuare in caso di errori END; – Obbligatorio DECLARE – Opzionale – Variabili, cursori, eccezioni definite dallutente BEGIN – Obbligatorio – Comandi SQL – Comandi PL/SQL EXCEPTION – Opzionale – Azioni da effettuare in caso di errori END; – Obbligatorio DECLARE BEGIN EXCEPTION END;

107 Giugno-Pulvirenti AA PL/SQL Struttura Blocco DECLARE v_variable VARCHAR2(5); BEGIN SELECTcolumn_name INTOv_variable FROMtable_name; EXCEPTION WHEN exception_name THEN... END; DECLARE v_variable VARCHAR2(5); BEGIN SELECTcolumn_name INTOv_variable FROMtable_name; EXCEPTION WHEN exception_name THEN... END; DECLARE BEGIN EXCEPTION END;

108 Giugno-Pulvirenti AA Tipi di Blocchi Anonimi ProcedureFunzioni [DECLARE]BEGIN --statements --statements[EXCEPTION]END;[DECLARE]BEGIN [EXCEPTION]END; PROCEDURE name ISBEGIN --statements --statements[EXCEPTION]END; PROCEDURE name ISBEGIN --statements --statements[EXCEPTION]END; FUNCTION name RETURN datatype ISBEGIN --statements --statements RETURN value; RETURN value;[EXCEPTION]END; FUNCTION name RETURN datatype ISBEGIN --statements --statements RETURN value; RETURN value;[EXCEPTION]END;

109 Giugno-Pulvirenti AA Esempio Oracle PL/SQL Supponiamo che non si accettano ordini con uno scoperto >2.500 CREATE TRIGGER ControlloFido BEFORE INSERT ON Ordini DECLARE DaPagare NUMBER; BEGIN SELECT SUM(Ammontare) INTO DaPagare FROM Ordini WHERE CodiceCliente = :new.CodiceCliente; IF DaPagare > :new.Ammontare THEN RAISE_APPLICATION_ERROR (-2061, fido superato); END IF; END :new valore da inserire o modificato, :old e il valore precedente

110 Giugno-Pulvirenti AA Creazione ed aggiornamento automatico di una tabella CREATE TABLE Totali(CodiceAgente CHAR(3), TotaleOrdini INTEGER) CREATE TRIGGER aggiornaTotali AFTER INSERT ON Ordini FOR EACH ROW DECLARE esiste NUMBER; BEGIN SELECT COUNT(*) INTO esiste FROM Totali WHERE CodiceAgente = :new.CodiceAgente; IF esiste = 0 $agente non ancora presente$ THEN INSERT INTO Totali VALUES (:new.CodiceAgente, :new.Ammontare); ELSE UPDATE Totali SET TotaleOrdini = TotaleOrdini + :new.Ammontare WHERE CodiceAgente = :new.CodiceAgente; END;

111 Giugno-Pulvirenti AA Cancellazione automatica Per cancellare la riga dei Totali relativa ad un agente che viene licenziato CREATE TRIGGER cancellaAgente AFTER DELETE ON Agenti FOR EACH ROW BEGIN DELETE FROM Totali WHERE CodiceAgente = :old.CodiceAgente; END; Nota che per il DELETE e stato usato :old

112 Giugno-Pulvirenti AA Vantaggi sulluso dei Trigger Knowledge Independence, si semplificano le applicazioni che non devono fare i controlli dei trigger Permettono di centralizzare i controlli che quindi non possono essere evitati dagli utenti del DB Arricchimento semantico della base di dati Il controllo diventa parte della transazione stessa, se il controllo fallisce lintera transazione fallisce –Puo anche essere eseguito in differita su alcuni DBMS

113 Giugno-Pulvirenti AA Problemi di Applicabilita dei Trigger Complessita: Bisogna conoscere tutti gli effetti diretti ed indiretti dellazione del trigger (ancora peggio per quelli che attivano altri trigger in cascata) Rigidita: Si potrebbe volere occasionalmente una eccezione al trigger, ma non si puo evitare lattivazione del trigger Debugging: Difficile da eseguire, manca un sistema di controllo e debugging in genere –Stessi problemi dei linguaggi dichiarativi (CLIPS, OPS5)

114 Giugno-Pulvirenti AA Altri problemi semantici Risoluzione di conflitti. Piu trigger sono attivabili allo stesso momento. Varie politiche di gestione –Lordine di esecuzione e quello di definizione (ORACLE) –Lutente specifica un ordine per ogni trigger (e.g., after trig1) –Gestito arbitrariamente dal sistema Trigger in Cascata. Trigger si attivano a vicenda, ricorsivamente. Varie politiche di gestione –Non permesso –Limitazione del numero di attivazioni –Dinamico (Sybase) ammette la ricorsione. In ORACLE la ricorsione e vietata.

115 Giugno-Pulvirenti AA Interazione con le transazioni Se il trigger interagisce con la transazione che lattiva,in generale lazione diventa parte della transazione cosi che se il trigger abortisce anche la transazione abortisce e viceversa. Se invece voglio registrare su una tabella di controllo tutto quello che succede allora questo deve essere fatto anche se la transazione abortisce.

116 Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti Aspetti sistemistici dellSQL

117 Giugno-Pulvirenti AA Schemi Sono collezioni di tabelle, viste, asserzioni, trigger, moduli PSM, ecc. Gli schemi sono lunità di base dellorganizzazione gerarchica e sono vicini al concetto di database che ognuno di noi ha.

118 Giugno-Pulvirenti AA Schemi Esterni Schema Esterno e la definizione di uno schema per un DB per una certa classe di utenti e degli accessi ad essi consentiti

119 Giugno-Pulvirenti AA Modi di definire Schemi esterni Si definisce, con il comando CREATE SCHEMA, un unico schema S e, con il meccanismo dei Grant, si dichiara chi puo accedere alle tabelle o view di S ed in quali modi. Fatto questo si possono definire schemi S i che usano tabelle o view di S. Per ogni schema S i si possono autorizzare alcuni utenti ad usare gli elementi di S i sempre con il meccanismo dei Grant.

120 Giugno-Pulvirenti AA Grant Grant Autorizzazion //select, insert, //update, update(attributi), delete, all //previleges –On Tabella –TO (Public, utente,{, utente}) –With grant option //gli utenti possono //concedere le stesse autorizzaizoni ad //altri Revoke [grant option for] autorizzazioni –ON Tabella –FROM utente {, utente}

121 Giugno-Pulvirenti AA Cataloghi Sono collezioni di schemi. Ogni catalogo ha uno o più schemi. Ogni catalogo ha uno schema speciale chiamato INFORMATION_SCHEMA che contiene informazioni riguardo a tutti gli schemi memorizzati in esso.

122 Giugno-Pulvirenti AA Cataloghi in SQL LINFORMATION_SCHEMA (cataloghi di sistema) contiente delle tabelle speciali che contengono i meta-dati del DB (tabelle, view, vincoli, trigger, utenti, autorizzazioni, indici etc..) Esempi: –PASSWORD(NomeUtente,ParolaChiave) –SYSDB(NomeBaseDati, Proprietario, Cammino, Commenti) –SYSTABLE(NomeTabella, Proprietario, BaseODerivata, NumeroColonne, NomeArchivioFisico, Commenti) –SYSCOLS(NomeColonna, Tabella, Numero, Tipo, Lunghezza, Default, Commenti) –SYSINDEX(NomeIndice, Tabella, Proprietario, NumeroColonna, Commenti)

123 Giugno-Pulvirenti AA Altri Cataloghi Una decina di altre tabelle per view, vincoli, grant ecc.. Altri riguardano aspetti quantitativi sui dati, le statistiche, utilizzate dallottimizzatore delle query.

124 Giugno-Pulvirenti AA Utilizzo dei cataloghi Normalmente consultabili ma non modificabili dagli utenti. Possono tuttavia essere consultate mediante SQL e per questa ragione sono autoreferenziate (ad esempio SYSTABLE conterrà una n-upla corrispondente a se stessa.

125 Giugno-Pulvirenti AA Cluster Sono collezioni di cataloghi. Ogni utente ha un cluster associato, relativo allinsieme di cataloghi che egli può accedere.

126 Giugno-Pulvirenti AA Gerarchia SQL environment Cluster Massimo scope per una Operazione sul DB Catalogo Schema Catalogo

127 Giugno-Pulvirenti AA Locking Consiste nel bloccare un dato in lettura o scrittura rispettivamente prima di modificare o leggere quel dato. Quando una transazione T 1 cerca di ottenere un blocco in scrittura su di un dato già bloccato da T 2 allora T 1 viene messa in attesa finché T 2 termina rilasciando il lock. Si garantisce così la serializzabilità e lisolamento in modo che ogni transazione non veda mai le modifiche di unaltra transazione non ancora terminata. Le richieste di blocco sono fatte dal sistema automaticamente.

128 Giugno-Pulvirenti AA Transazioni nei linguaggi che ospitano SQL I DBMS relazionali permettono di spezzare i programmi in più transazioni mediante i comandi COMMIT e ROLLBACK. Nel caso dellSQL ospitato una transazione viene considerata iniziata dal sistema quando un programma esegue unoperazione su una tabella (SELECT, UPDATE, INSERT, DELETE, OPEN CURSOR)

129 Giugno-Pulvirenti AA Interruzione di transazioni La transazione prosegue finché: –viene eseguito EXEC SQL COMMIT WORK : la transazione termina normalmente con il rilascio dei blocchi sui dati usati che diventano disponibili –viene eseguito EXEC SQL ROLLBACK WORK (abort transaction) : comporta la terminazione prematura della transazione e quindi (a) il disfacimento di tutte le modifiche (atomicità) (b) il rilascio dei blocchi usati. –Il programma termina senza errori, normalmente. –Il programma termina con fallimento e provoca laborto della transazione

130 Giugno-Pulvirenti AA Transazioni con livelli diversi di isolamento Con laumentare del numero di transazioni eseguite concorrentemente in modo serializzabile si può ridurre leffettivo grado di concorrenza del sistema a causa del fatto che aumenta la probabilità di avere transazioni in attesa di dati bloccati da altre o interrotte per il verificarsi di situazioni di stallo Per questa ragione i sistemi commerciali prevedono la possibilità di programmare transazioni rinunciando alla proprietà di serializzabilità e quindi di isolamento delle transazioni.

131 Giugno-Pulvirenti AA SQL-92: SET TRANSACTION SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED| READ COMMITTED | REPEATABLE READ | SERIALIZABLE ]

132 Giugno-Pulvirenti AA READ UNCOMMITTED Il primo livello di isolamento read uncommitted (detto anche dirty read o degree of isolation 0) consente transazioni che fanno solo operazioni di lettura che vengono eseguite dal sistema senza bloccare in lettura i dati. Come conseguenza abbiamo che una transazione può leggere dati modificati da unaltra transazione non ancora completata.

133 Giugno-Pulvirenti AA READ COMMITTED Il livello di isolamento read committed (detto anche cursor stability o degree of isolation 1) stabilisce che i blocchi in lettura vengano rilasciati subito mentre quelli in scrittura vengono rilasciati alla terminazione della transazione. In questo modo una transazione T che modifica un dato, quel dato non può essere letto da altri fino a che T non abbia effettuato un commit o un rollback. Conseguenza: una transazione puo fare letture non ripetibili, letture degli stessi dati possono essere diverse perche nellintervallo sono state modificati da altre transazioni.

134 Giugno-Pulvirenti AA REPEATABLE READ Repeatable read o anche degree of isolation 2 prevede che i blocchi in lettura e scrittura siano assegnati solo su n-uple di tabelle e vengano rilasciati alla terminazione della transazione. Presenta il fenomeno dei fantasmi (phantoms), abbiamo che dati inseriti nella tabella possono non essere visti.

135 Giugno-Pulvirenti AA SERIALIZABLE Degree of isolation 3. Consiste nel blocco temporaneo della tabella; In certe applicazioni troppo restrittivo.

136 Giugno-Pulvirenti AA LivelloLetture sporche Letture non ripetibiliDati fantasmi READ UNCOMMITTED X XX READ COMMITTED-XX REPEATABLE READ--X SERIALIZABLE---

137 Giugno-Pulvirenti AA Altri strumenti per amministrare un DB Strumenti per progettare concettualmente il DB: Erwin,S- Designor,Er/1 Strumenti per definire la memoria da assegnare alle varie strutture e sua riorganizzazione nel caso di eccessiva frammentazione: S-Designor, DB-General,TS-Reorg Strumenti per controllare lesecuzione dei comandi SQL per migliorare le prestazioni nei punti critici: Plan Analyzer Strumenti per la pianificazione ed esecuzione delle procedure per il back-up di sicurezza del DB: Patrol,Platinum Fast Unload (per Oracle) Strumenti per il controllo del funzionamento del DBMS, generazioni di statistiche sullutilizzazione della memoria e del buffer, operazioni di I/O, condizioni di stallo delle transazioni ecc..: SQL Enterprise Manager (Microsoft), Enterprise Manager (Oracle) ecc...


Scaricare ppt "Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Amministrazione e Viste."

Presentazioni simili


Annunci Google