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 Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Amministrazione e Viste

2 Giugno-Pulvirenti AA 2005-2006 SQL per definire ed amministrare Ad ogni utente tipicamente viene associata una base di dati, creata dall’amministratore del sistema. L’utente diventa l’amministratore 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.

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

4 Giugno-Pulvirenti AA 2005-2006 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

5 Giugno-Pulvirenti AA 2005-2006 Definizione dei dati in SQL Istruzione CREATE TABLE: –definisce uno schema di relazione e ne crea un’istanza vuota –specifica attributi, domini e vincoli

6 Giugno-Pulvirenti AA 2005-2006 Create Table CREATE TABLE Nome “(“Attributo Tipo[Vincolo {,Vincolo}] {,Attributo Tipo[Vincolo {,Vincolo}]}”)” [VincoloDiTabella {, VincoloDiTabella}]

7 Giugno-Pulvirenti AA 2005-2006 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) )

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

9 Giugno-Pulvirenti AA 2005-2006 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.)

10 Giugno-Pulvirenti AA 2005-2006 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.

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

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

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

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

15 Giugno-Pulvirenti AA 2005-2006 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) )

16 Giugno-Pulvirenti AA 2005-2006 Matricola CHAR(6) PRIMARY KEY Matricola CHAR(6), …, PRIMARY KEY (Matricola) PRIMARY KEY, alternative

17 Giugno-Pulvirenti AA 2005-2006 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) )

18 Giugno-Pulvirenti AA 2005-2006 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!

19 Giugno-Pulvirenti AA 2005-2006 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

20 Giugno-Pulvirenti AA 2005-2006 Matricola 3987 3295 9345 Vigili Cognome Rossi Neri Nome Luca Piero Mario MoriGino7543 Infrazioni Codice 34321 73321 64521 53524 Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile 3987 3295 9345 ProvNumero MI TO PR 39548K E39548 839548

21 Giugno-Pulvirenti AA 2005-2006 Infrazioni Codice 34321 73321 64521 53524 Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile 3987 3295 9345 ProvNumero MI TO PR 39548K E39548 839548 Auto ProvNumero MI TO PR 39548K E39548 839548 Cognome Rossi Neri Nome Mario Luca

22 Giugno-Pulvirenti AA 2005-2006 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) )

23 Giugno-Pulvirenti AA 2005-2006 Modifiche degli schemi ALTER DOMAIN ALTER TABLE DROP DOMAIN DROP TABLE...

24 Giugno-Pulvirenti AA 2005-2006 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

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

26 Giugno-Pulvirenti AA 2005-2006 Insert INSERT INTO Tabella [“(”Attributo {,Attributo} “)”] VALUES “(” Valore {,Valore} “)” Esempio –INSERT INTO Esami VALUES (‘DB1’, 123456, 27)

27 Giugno-Pulvirenti AA 2005-2006 Delete DELETE FROM Tabella WHERE Condizione Esempio: –DELETE FROM Esami WHERE Matricola = 123456

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

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

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

31 Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: vincoli d’Integrità

32 Giugno-Pulvirenti AA 2005-2006 Vincoli d’integrita’ Riguardano i valori ammissibili degli attributi di una tupla –Vincoli Intrarelazionali: nell’ambito 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, l’utente puo’ opzionalmente definire della azioni (correttive) da intraprendere per ripristinare l’integrita’

33 Giugno-Pulvirenti AA 2005-2006 A cosa servono i vincoli d’integrita’ 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 l’esecuzione

34 Giugno-Pulvirenti AA 2005-2006 Esempio di DB semanticamente errato StudenteVotoLodeCorso 3201276545 30e lode02 78764327e lode03 7394302404 Esami Matricola 276545 787643 Cognome Rossi Neri Bianchi Nome Mario Piero Luca Studenti 787643 32 27e lode 739430

35 Giugno-Pulvirenti AA 2005-2006 Vincoli su una n-upla NOT NULL : –e’ implicito se l’attributo 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

36 Giugno-Pulvirenti AA 2005-2006 Vincoli Intrarelazionali UNIQUE: –l’attributo 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

37 Giugno-Pulvirenti AA 2005-2006 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 l’inserzione di n-uple con il valore della chiave esterna che non corrisponde ad un valore della chiave primaria della TabellaRef. Se un’operazione di cancellazione su TabellaRef viola il vincolo referenziale allora vengono applicate le tre azioni:

38 Giugno-Pulvirenti AA 2005-2006 Azioni per Vincoli su Chiavi Esterne ON DELETE NO ACTION : –rifiuta l’operazione (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

39 Giugno-Pulvirenti AA 2005-2006 Vincoli sui valori della tupla NOT NULL –implicito se l’attributo 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’ un’espressione booleana per il controllo di attributi, costanti ed espressioni –Dev’essere valutata True per la corretta esecuzione della transazione –Vincoli sul dominio: Esempio: specifica i valori ammissibili nell’attributo Voto della tabella Esami: –Voto NOT NULL –(18  Voto AND Voto  30) –Vincoli basati su piu’ attributi (Lode <> ‘Si’) OR (Voto = 30)

40 Giugno-Pulvirenti AA 2005-2006 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)

41 Giugno-Pulvirenti AA 2005-2006 Vincoli d’integrita’ 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 un’altra tabella –Esempio: Esami(...,Matricola), Studenti( Matricola,...)

42 Giugno-Pulvirenti AA 2005-2006 Matricola 3987 3295 9345 Vigili Cognome Rossi Neri Nome Luca Piero Mario MoriGino7543 Infrazioni Codice 34321 73321 64521 53524 Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile 3987 3295 9345 ProvNumero MI TO PR 39548K E39548 839548 3295 3987 9345 3987 9345 3295

43 Giugno-Pulvirenti AA 2005-2006 Auto ProvNumero MI TO PR 39548K E39548 839548 Cognome Rossi Neri Nome Mario Luca Infrazioni Codice 34321 73321 64521 53524 Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile 3987 3295 9345 ProvNumero MI TO PR 39548K E39548 839548 MI TO PR 39548K E39548 839548 MI TO PR 39548K E39548 839548

44 Giugno-Pulvirenti AA 2005-2006 Un vincolo di integrità referenziale (“foreign key”) fra gli attributi X di una relazione R 1 e un’altra relazione R 2 impone ai valori su X in R 1 di comparire come valori della chiave primaria di R 2 Nell‘esempio precedente: –vincoli di integrità referenziale fra: l’attributo 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

45 Giugno-Pulvirenti AA 2005-2006 Infrazioni Codice 34321 73321 64521 53524 Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile 3987 3295 9345 ProvNumero MI TO PR 39548K E39548 839548 Auto ProvNumero MI TO PR E39548 F34268 839548 Cognome Rossi Neri Nome Mario Luca TOE39548 TO E39548 Violazione di vincolo di integrità referenziale

46 Giugno-Pulvirenti AA 2005-2006 Integrità referenziale e valori nulli Impiegati Matricola 34321 64521 53524 Cognome Rossi Neri Verdi Progetto IDEA XYZ NULL Progetti Codice IDEA BOH XYZ Inizio 01/2000 07/2001 09/2001 Durata 36 24 Costo 200 120 150 73032BianchiIDEA

47 Giugno-Pulvirenti AA 2005-2006 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

48 Giugno-Pulvirenti AA 2005-2006 Rifiuto della cancellazione Impiegati Matricola 34321 64521 53524 Cognome Rossi Neri Verdi Progetto IDEA XYZ NULL 73032BianchiIDEA Progetti Codice IDEA BOH XYZ Inizio 01/2000 07/2001 09/2001 Durata 36 24 Costo 200 120 150 XYZ07/200124120 XYZ07/200124120 XYZ07/200124120 53524NeriXYZ 53524NeriXYZ La transazione fallisce e XYZ non puo’ essere cancellato dalla relazione Progetti

49 Giugno-Pulvirenti AA 2005-2006 Eliminazione in cascata Impiegati Matricola 34321 64521 53524 Cognome Rossi Neri Verdi Progetto IDEA XYZ NULL 73032BianchiIDEA Progetti Codice IDEA BOH XYZ Inizio 01/2000 07/2001 09/2001 Durata 36 24 Costo 200 120 150 XYZ07/200124120 XYZ07/200124120 XYZ07/200124120 53524NeriXYZ La transazione termina e XYZ viene cancellato anche dalla relazione Impiegati

50 Giugno-Pulvirenti AA 2005-2006 Introduzione di valori nulli Impiegati Matricola 34321 64521 53524 Cognome Rossi Neri Verdi Progetto IDEA XYZ NULL 73032BianchiIDEA Progetti Codice IDEA BOH XYZ Inizio 01/2000 07/2001 09/2001 Durata 36 24 Costo 200 120 150 XYZ07/200124120 XYZ07/200124120 XYZ07/200124120 NULL La transazione termina e all’attributo Impiegati.Progetto viene assegnato NULL

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

52 Giugno-Pulvirenti AA 2005-2006 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 l’inserimento di tuple con il valore della chiave esterna che non corrisponde ad un valore della chiave primaria della TabellaRef

53 Giugno-Pulvirenti AA 2005-2006 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)

54 Giugno-Pulvirenti AA 2005-2006 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

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

56 Giugno-Pulvirenti AA 2005-2006 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.

57 Giugno-Pulvirenti AA 2005-2006 Definizione VIEW Sintassi creazione VIEW: CREATE VIEW NomeVista [“(” Attributo {,Attributo} “)”] AS Query-Select

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

59 Giugno-Pulvirenti AA 2005-2006 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 l’uso di RESTRICT e CASCADE –La distruzione di una VIEW non altera le tabelle su cui la VIEW si basa

60 Giugno-Pulvirenti AA 2005-2006 Le VIEW possono essere usate come tabelle Una VIEW puo’ essere definita sulla base di un’altra 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.

61 Giugno-Pulvirenti AA 2005-2006 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.

62 Giugno-Pulvirenti AA 2005-2006 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

63 Giugno-Pulvirenti AA 2005-2006 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

64 Giugno-Pulvirenti AA 2005-2006 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

65 Giugno-Pulvirenti AA 2005-2006 Mascherare l’organizzazione 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

66 Giugno-Pulvirenti AA 2005-2006 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…

67 Giugno-Pulvirenti AA 2005-2006 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 l’accesso 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 l’operazione fallisce

68 Giugno-Pulvirenti AA 2005-2006 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’,…)

69 Giugno-Pulvirenti AA 2005-2006 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 l’opzione “WITH CHECK OPTION”: CREATE VIEW ImpiegatoRossi AS SELECT * FROM Impiegato WHERE Cognome=‘Rossi’ WITH CHECK OPTION Adesso l’insert con ‘Bianchi’ fallisce, quella con ‘Rossi’ viene invece eseguita.

70 Giugno-Pulvirenti AA 2005-2006 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 nell’altra In genere quest’operazione non e’ consentita Alcuni DBMS consentirebbero l’INSERT se “Impiegati.Dipart” fosse una foreign key su “Dipartimenti.Dipart” e quest’ultima fosse chiave primaria

71 Giugno-Pulvirenti AA 2005-2006 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 l’aggiornamento 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


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

Presentazioni simili


Annunci Google