19/01/2014 viste. 19/01/2014 viste le viste logiche o viste o view possono essere definite come...

40
28/04/22 Viste

Upload: xaviera-grimaldi

Post on 01-May-2015

218 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste

Page 2: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste

Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni dei dati contenuti nelle tabelle “fisiche” presenti nel database.Le tabelle fisiche sono gli unici veri contenitori di dati. Le viste non contengono dati fisicamente diversi dai dati presenti nelle tabelle, ma forniscono una diversa visione, dinamicamente aggiornata, di quegli stessi dati.

La vista appare all’utente come una normale tabella, in cui può effettuare interrogazioni e, limitatamente ai suoi privilegi, anche modifiche dei dati.

Page 3: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste

Per la stessa natura delle viste, i dati che vengono modificati su ciascuna delle tabelle fisiche utilizzate nella definizione della vista comporterà una modifica del contenuto della vista. Equivalentemente, se i dati vengono modificati in una vista risulteranno modificati anche nella tabella che contiene fisicamente il dato.

Per questo motivo si può limitare il privilegio di modificare le viste ad alcuni utenti. Un modo per limitare l’accessibilità ai dati da parte di alcuni utenti è quello di fare lavorare tali utenti su viste ad accesso limitato

Page 4: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste, Vantaggi• Le viste semplificano la rappresentazione dei dati. Oltre ad assegnare un nome alla vista, la sintassi dell’istruzione CREATE VIEW consente di cambiare i nomi delle colonne• Le viste possono essere anche estremamente convenienti per svolgere una serie di query molto complesse• Le viste consentono di proteggere i database: le view ad accesso limitato possono essere utilizzate per controllare le informazioni alle quali accede un utente del database• Le viste consentono inoltre di convertire le unità di misura e creare nuovi formati

Page 5: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste, Limitazioni• non è possibile utilizzare l’operatore UNION;• non è possibile utilizzare la clausola ORDER BY;• non è possibile utilizzare l’istruzione DELETE su viste di

tabelle multiple;• non è possibile utilizzare l’istruzione INSERT tranne quando

tutte le colonne NOT NULL della tabella sottostante sono incluse nella vista;

• Se vengono inseriti o aggiornati dei record attraverso una vista basata sulla combinazione di più tabelle, tutti i record da aggiornare devono appartenere alla stessa tabella fisica;

• Se si utilizza la clausola DISTINCT per creare una vista, non è possibile inserire o aggiornare dei record nella vista;

• Non è possibile aggiornare una colonna virtuale (una colonna che è il risultato di una espressione o di una frazione)

Page 6: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste, sintassiIl comando DDL che consente di definire una vista ha la seguente sintassi

CREATE VIEW NomeVista [ ( ListaAttributi ) ] AS SelectSQL[ with [ local | cascaded ] check option ]

I nomi delle colonne indicati nella lista attributi sono i nomi assegnati alle colonne della vista, che corrispondono ordinatamente alle colonne elencate nella select. Se questi non sono specificati, le colonne della vista assumono gli stessi nomi di quelli della/e tabella/e a cui si riferisce.

Page 7: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Create View, Esempio

Create view ImpiegatiAmmin (Matricola, Nome, Cognome, Stipendio) AS

Select Matr, Nome, Cognome, StipFrom ImpiegatoWhere Dipart = 'Amministrazione' and Stipendio > 1000

Creare una vista contenente la matricola, il nome, il cognome e lo stipendio degli impiegati del dipartimento di Amministrazione il cui stipendio è maggiore di 1000 euro

Page 8: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Create View, Esempio

Creare una vista che contiene la targa e la cilindrata delle macchine con cilindrata <1500

Create view PiccolaCilindrata (PC_Targa, PC_cilindrata)As Select targa, cilindrataFrom VeicoliWhere cilindrata<1500

La vista ottenuta è composta da due colonne denominate PC_targa e PC_cilindrata corrispondenti a Targa e Cilindrata di Veicoli e alle righe della stessa tabella in cui la cilindrata è minore di 1500

Page 9: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

With check optionL’opzione With Check Option messa alla fine della definizione della vista assicura che le operazioni di inserimento e di modifica dei dati effettuate utilizzando la vista soddisfino la clausola Where della subquery.

Esempio: creare una vista degli impiegati del settore Amministrazione che guadagnano meno di 1000 euro.

create view ImpiegatiAmminPoveri asselect *from ImpiegatiAmminwhere Stipendio < 1000with check option

Page 10: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Local, Cascaded

Le opzioni Local e Cascaded sono alternative. Se la specifica è omessa il valore di default è Cascaded.

Una vista V1 può essere infatti definita in dipendenza di una vista V2. Se è specificata l’opzione Cascaded nella vista V2, non è permesso modificare dati nella vista V1 che violano le condizioni di V2.L’opzione Local specifica che il controllo deve avvenire solo sulla tabella locale.Se una modifica viene fatta in V1, non viene fatto nessun controllo su V2

Su Oracle non è possibile scegliere fra le due opzioni. L’unica permessa (default) è Cascated

Page 11: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Modifica di una vista

Sebbene il contenuto di una vista sia dinamico, la sua struttura non lo è. Se una vista è definita su una subquery

Select * From T1

E in seguito alla tabella T1 viene aggiunta una colonna, questa nuova definizione non si estende alla vista. Ossia la vista conterrà sempre le stesse colonne che aveva prima dell’inserimento della nuova colonna in T1.

Page 12: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Vista basata su due tabelle

Create view A2 asSelect targa, Cod_Modello, Nome_CategoriaFrom Veicoli, CategorieWhere Categorie.cod_cat=Veicoli.Cod_cat

Creare una vista che descrive la targa, il codice del modello e il nome della categoria dei veicoli.

Si noti che manca la specifica dei nomi delle colonne della vista. In tal caso vengono acquisiti i nomi delle colonne della tabella madre.

Cod_cat Nome_catVeicoli

Targa Cod_mod

Categoria

Cilindrata

Cod_comb.

cav.Fisc

Velocita Posti Imm

Categorie

Page 13: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste di gruppo

Una vista di gruppo è una vista in cui una delle colonne è una funzione di gruppo.

In questo caso è obbligatorio assegnare un nome alla colonna della vista corrispondente alla funzione di gruppo

Page 14: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Vista di Gruppo, Esempio

Cod_Mod

Nome_Mod

Cod_Fab

Cilind_Media

Modelli

Creare una vista che per ciascuna fabbrica riporti il numero globale delle versioni dei modelli prodotti

Create view A3 (cod_Fabbrica, num_versioni) ASSelect cod_Fabbrica, sum(numero_versioni)From ModelliGroup by Cod_Fabbrica

Page 15: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste di gruppo

E’ una vista di gruppo anche una vista che è definita in base ad una vista di gruppoEsempio:

Create view A4 ASSelect num_versioniFrom A3

Page 16: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Eliminazione delle visteLe viste si eliminano col comando Drop View. Sintassi:

Drop View nome_view {Restrict/Cascade}

Le opzioni Restrict/Cascade sono alternative ed è obbligatorio specificare una o l’altra.

Restrict: la vista viene eliminata solo se non è riferita nella definizione di altri oggetti

Cascade: oltre che essere eliminata la vista, vengono eliminate tutte le dipendenza da tale vista di altre definizioni dello schema

Su Oracle l’unica opzione possibile è restrict, che non deve essere specificata poiché è il default.

Page 17: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esempio

Create view A3 (cod_Fabbrica, num_versioni) ASSelect cod_Fabbrica, sum(numero_versioni)From ModelliGroup by Cod_Fabbrica

Create view A4 ASSelect num_versioniFrom A3

L’istruzione Drop View A3 Cascade elimina oltre che la vista A3, anche la vista A4 che dipende da essa.Invece Drop View A3 Restrict impedisce la cancellazione di A3, finchè è presente A4, che dipende da essa

Page 18: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esercizio

Creare una vista che mostri i codici dell’ordine e del negozio per gli ordini effettuati dopo il 31/01/2004.

Create view Dopo31Gen (Ordine, Negozio) ASSelect ord_cod, neg_codFrom OrdiniWhere ord_data> to_date (‘31-GEN-2004’)

Page 19: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esercizio

Creare una vista che calcoli i codici dei componenti utilizzati nella composizione dell’articolo L100

Create view compL100 (codici_compL100) ASSelect com_codFrom compartWhere art_cod=‘L100’

Page 20: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esercizio

Creare una vista che mostri le descrizioni dei componentiutilizzati nella composizione dell’articolo L100

Create view descompL100 (descrizione) AsSelect com_descrizioneFrom Componenti join CompL100 ON (codici_compL100=com_cod)

Page 21: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

EsercizioCreare una vista che mostri le descrizioni dei componenti utilizzati nella composizione degli articoli della categoria L10

Create view compL10(componente) AsSelect com_descrizioneFrom Componenti Join compart Using(com_cod) join Articoli Using (Art_cod)Where cat_cod=‘L10’

Create view compL10(componente) AsSelect com_descrizioneFrom Componenti Where com_cod in (Select com_cod From compart Where art_cod in (Select art_cod From Articoli Where cat_cod=‘L10’)

Page 22: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esercizio

Creare una vista che mostri la massima quantità richiesta in un ordine per ciascun articolo ordinato

Create view massimordine(Articolo, Massimaquantità) ASSelect art_cod, max(ordart_qta)From OrdartGroup by art_cod

Page 23: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esercizio

Eliminare la vista creata all’esercizio precedente

Drop view massimordine Restirict

Page 24: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Selezione dei dati tramite viste di gruppo

In generale si può utilizzare una vista ovunque possa essere indicata una tabella, con le seguenti eccezioni:

• Una clausola from che contenga una vista di gruppo non può contenere riferimenti ad altre tabelle;• Un comando di selezione che utilizza una clausola From che contenga una vista di gruppo, non può utilizzare clausole Where, Group by, Having

In alcuni DBMS non ci sono queste restrizioni, nel senso che il DBMS “corregge” l’istruzione

Page 25: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esercizio

Utilizzare la vista creata da

Create view Dopo31Gen (Ordine, Negozio) ASSelect ord_cod, neg_codFrom OrdiniWhere ord_data>’31-01-2004’

in un esercizio precedente per far vedere solo il codice del negozio

Select NegozioFrom Dopo31Gen

Page 26: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

EsercizioUtilizzare la vista dell’esercizio 1

Create view Dopo31Gen (Ordine, Negozio) ASSelect ord_cod, neg_codFrom OrdiniWhere ord_data> to_date ‘31-GEN-2004’

per far vedere solo i codici degli ordini partiti da negozi di Trento

Select Ordine, Neg_nomeFrom Dopo31Gen, Negozi Where Negozio=neg_codand Neg_citta=‘Trento’

Page 27: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esercizio

Trovare per ciascuno dei componenti utilizzati nella composizione dell’articolo L100, il laboratorio in cui tale componente è prodotto.

Select Lab_codFrom Componenti, CompL100Where com_cod=codici_compL100

Page 28: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Viste AggiornabiliUna vista si dice aggiornabile se mediante questa èpossibile l’aggiornamento dei dati del database, ossia il

loroinserimento, cancellazione e modifica.Una vista è aggiornabile se:

1. Non utilizza la specifica DISTINCT2. Nella clausola FROM è presente una sola tabella, o

una sola vista, che sia a sua volta aggiornabile3. Nella lista di selezione non sono presenti altri

elementi che riferimenti puri (ossia non espressioni) alla tabella o alla vista della clausola FROM

4. Nella clausola WHERE non è presente una subquery5. Non è presente nè la clausola Group by, nè la

clausola Having

Page 29: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esempio

Create view A1 (A1_Targa, A1_cilindrata)As Select targa, cilindrataFrom VeicoliWhere cilindrata<1500

La seguente vista è aggiornabile

Quest’altra invece non lo è

Create view A2 asSelect targa, Cod_Modello, Nome_CategoriaFrom Veicoli, CategorieWhere Categorie.cod_cat=Veicoli.Cod_cat

Due tabelle

Page 30: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Vantaggi delle viste: facilitazione nell’accesso ai dati

In generale uno dei requisiti per la progettazione di un database relazionale è la normalizzazione dei dati. Sebbene la forma normalizzata del database permette una corretta modellazione della realtà che il DB rappresenta, a volte dal punto di vista dell’utente comporta una maggiore difficoltà di comprensione rispetto a una rappresentazione non normalizzata.

Le viste permettono di fornire all’utente i dati in una forma più intuitiva.

Page 31: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Vantaggi delle viste: diverse visioni dei dati

Esistono dei dati che sono presenti nelle tabelle del database, che sono poco significativi per l’utente (esempio, il codice di un prodotto), e altri che devono essere nascosti all’utente (esempio: lo stipendio di un dipendente, la password di un account etc.). L’uso delle viste da parte dell’utente permette di limitare il suo accesso ai dati del database, eliminando quelli non interessanti per lui e quelli che devono essere tenuti nascosti.

L’uso delle viste può essere considerato come una tecnica per assicurare la sicurezza dei dati

Page 32: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Vantaggi delle Viste: Indipendenza Logica

Un vantaggio delle viste è l’indipendenza logica delle applicazioni e delle operazioni eseguite dagli utenti rispetto alla struttura logica dei dati.

Ciò significa che è possibile poter operare modifiche allo schema senza dover apportare modifiche alle applicazioni che utilizzano il database.

Page 33: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

EsempioVeicoli

Targa Cod_mod

Categoria

Cilindrata

Cod_comb.

cav.Fisc

Velocita Posti Imm

Supponiamo che a un certo punto vogliamo suddividere la tabella Veicoli in due sottotabelle, Veicoli1 e Veicoli2, Il primo contenente Targa, Codice modello e codice categoria, e il secondo contenente targa, cilindrata, codice combustibile, cavalli fiscali, velocita, posti e immatricolazione

Page 34: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esempio, creazione sottotabelleVeicoli

Targa Cod_mod

Categoria

Cilindrata

Cod_comb.

cav.Fisc

Velocita Posti Imm

Create table Veicoli1(Targa char(10)Cod_Modello Char(3)Categoria char(2))

Create table Veicoli2(Targa char(10),Cilindrata number(4),Cod_comb char(2),Cav.Fisc number(3),Velocita Number(6),Posti number(2),Imm date)

Targa Cod_mod

Categoria

Targa Cilindrata

Cod_comb.

cav.Fisc

Velocita Posti Imm

Veicoli1

Veicoli2

Page 35: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esempio, inserimento datiVeicoli

Targa Cod_mod

Categoria

Cilindrata

Cod_comb.

cav.Fisc

Velocita Posti Imm

Insert into Veicoli1 (Targa, Cod_mod, Categoria)Select Targa, Cod_mod, CategoriaFrom Veicoli

Insert into Veicoli2(Targa, Cilindrata,Cod_comb,Cav_Fisc,Velocita’,Posti ,Imm)Select Targa, Cilindrata, Cod_comb, Cav_fisc, Velocita,Posti, ImmFrom VeicoliDrop Table Veicoli

Targa Cod_mod

Categoria

Targa Cilindrata

Cod_comb.

cav.Fisc

Velocita Posti Imm

Veicoli1

Veicoli2

Page 36: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esempio, creazione vistaTarga Cod_mo

dCategoria

Targa Cilindrata

Cod_comb.

cav.Fisc

Velocita Posti Imm

Veicoli1

Veicoli2

Create view Veicoli(Targa, cod_Mod, Cod_Categoria, Cilindrata, Cod_comb, Cav.Fisc, Velocita’, Posti, Imm) ASSelect Veicoli1.targa, cod_mod, Categoria, cod_comb, cav.Fisc, velocita, posti,ImmFROM Veicoli1, Veicoli2WHERE Veicoli1.Targa=Veicoli2.Targa

Veicoli

Targa Cod_mod

Categoria

Cilindrata

Cod_comb.

cav.Fisc

Velocita Posti Imm

Page 37: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Esempio, conclusioni

A questo punto l’applicazione che faceva uso della tabella Veicoli, farà uso (inconsapevolmente) della Vista Veicoli, che , anche se non è “fisicamente” una tabella, ne ha tutte le caratteristiche informative.

Page 38: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Un’interrogazione non standard

Il dipartimento che impiega il massimo budget in stipendi dei dipendenti

Select Dipartfrom Impiegatogroup by Diparthaving sum(Stipendio) >= all (select sum(Stipendio) from Impiegato group by Dipart)

E’ sbagliata perché la nidificazione nella having non è ammessa

Page 39: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Soluzione con le viste

CREATE VIEW BudgetStipendi(Dipartimento,TotaleStipendi) AS

SELECT Dipart, sum(Stipendio)FROM ImpiegatoGROUP BY Dipart

SELECT DipartimentoFROM BudgetStipendiWHERE TotaleStipendi =(SELECT max(TotaleStipendi) FROM BudgetStipendi)

Page 40: 19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni

11/04/23

Ancora sulle viste

Interrogazione scorrettaselect avg(count(distinct Ufficio))from Impiegatogroup by Dipart

Con una vista

create view UfficiDipart (NomeDip,NroUffici) asselect Dipart, count(distinct Ufficio)from Impiegatogroup by Dipart

select avg(NroUffici)from UfficiDipart

Due operatori aggregati annidati

Calcolare la media degli uffici distinti presenti in ogni dipartimento