Viste 12252021 Viste Le Viste Logiche o Viste

  • Slides: 40
Download presentation
Viste 12/25/2021

Viste 12/25/2021

Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle

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 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. 12/25/2021

Viste Per la stessa natura delle viste, i dati che vengono modificati su ciascuna

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 12/25/2021

Viste, Vantaggi • Le viste semplificano la rappresentazione dei dati. Oltre ad assegnare un

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 12/25/2021

Viste, Limitazioni • non è possibile utilizzare l’operatore UNION; • non è possibile utilizzare

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) 12/25/2021

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

Viste, sintassi Il comando DDL che consente di definire una vista ha la seguente sintassi CREATE VIEW Nome. Vista [ ( Lista. Attributi ) ] AS Select. SQL [ 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. 12/25/2021

Create View, Esempio Creare una vista contenente la matricola, il nome, il cognome e

Create View, Esempio 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 Create view Impiegati. Ammin (Matricola, Nome, Cognome, Stipendio) AS Select Matr, Nome, Cognome, Stip From Impiegato Where Dipart = 'Amministrazione' and Stipendio > 1000 12/25/2021

Create View, Esempio Creare una vista che contiene la targa e la cilindrata delle

Create View, Esempio Creare una vista che contiene la targa e la cilindrata delle macchine con cilindrata <1500 Create view Piccola. Cilindrata (PC_Targa, PC_cilindrata) As Select targa, cilindrata From Veicoli Where 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 12/25/2021

With check option L’opzione With Check Option messa alla fine della definizione della vista

With check option L’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 1500 euro. create view Impiegati. Ammin. Poveri as select * from Impiegati. Ammin where Stipendio < 1500 with check option 12/25/2021

Local, Cascaded Le opzioni Local e Cascaded sono alternative. Se la specifica è omessa

Local, Cascaded Le opzioni Local e Cascaded sono alternative. Se la specifica è omessa il valore di default è Cascaded. In Oracle l’unica opzione concessa, che è quella di default, è Cascaded. Una vista V 1 può essere definita in dipendenza di una vista V 2. Se è specificata l’opzione Cascaded nella vista V 2, non è permesso modificare dati nella vista V 1 che violano le condizioni di V 2. L’opzione Local specifica che il controllo deve avvenire solo sulla tabella locale. Se una modifica viene fatta in V 1, non viene fatto nessun controllo su V 2 12/25/2021

Modifica di una vista Sebbene il contenuto di una vista sia dinamico, la sua

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 T 1 E in seguito alla tabella T 1 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 T 1. 12/25/2021

Vista basata su due tabelle Categorie Cod_cat Nome_cat Veicoli Targa Cod_mod Categoria Cilindrata Cod_comb.

Vista basata su due tabelle Categorie Cod_cat Nome_cat Veicoli Targa Cod_mod Categoria Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm Creare una vista che descrive la targa, il codice del modello e il nome della categoria dei veicoli. Create view A 2 as Select targa, Cod_Modello, Nome_Categoria From Veicoli, Categorie Where Categorie. cod_cat=Veicoli. Cod_cat Si noti che manca la specifica dei nomi delle colonne della vista. In tal caso vengono acquisiti i nomi delle colonne della tabella madre. 12/25/2021

Viste di gruppo Una vista di gruppo è una vista in cui una delle

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 12/25/2021

Vista di Gruppo, Esempio Modelli Cod_Mod Nome_Mod Cod_Fab Cilind_Media num_versioni Creare una vista che

Vista di Gruppo, Esempio Modelli Cod_Mod Nome_Mod Cod_Fab Cilind_Media num_versioni Creare una vista che per ciascuna fabbrica riporti il numero globale delle versioni dei modelli prodotti Create view A 3 (cod_Fabbrica, numero_versioni) AS Select cod_Fabbrica, sum(num_versioni) From Modelli Group by Cod_Fabbrica 12/25/2021

Viste di gruppo E’ una vista di gruppo anche una vista che è definita

Viste di gruppo E’ una vista di gruppo anche una vista che è definita in base ad una vista di gruppo Esempio: Create view A 4 AS Select num_versioni From A 3 12/25/2021

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

Eliminazione delle viste Le 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 In Oracle la sola opzione ammessa è Restrict ed è quella di default. Non occorre quindi specificarla 12/25/2021

Esempio Create view A 3 (cod_Fabbrica, num_versioni) AS Select cod_Fabbrica, sum(numero_versioni) From Modelli Group

Esempio Create view A 3 (cod_Fabbrica, num_versioni) AS Select cod_Fabbrica, sum(numero_versioni) From Modelli Group by Cod_Fabbrica Create view A 4 AS Select num_versioni From A 3 L’istruzione Drop View A 3 Cascade elimina oltre che la vista A 3, anche la vista A 4 che dipende da essa. Invece Drop View A 3 Restrict impedisce la cancellazione di A 3, finchè è presente A 4, che dipende da essa 12/25/2021

Esercizio Creare una vista che mostri i codici dell’ordine e del negozio per gli

Esercizio Creare una vista che mostri i codici dell’ordine e del negozio per gli ordini effettuati dopo il 31/01/2004. Create view Dopo 31 Gen (Ordine, Negozio) AS Select ord_cod, neg_cod From Ordini Where ord_data> to_date (‘ 31 -GEN-2004’) 12/25/2021

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

Esercizio Creare una vista che calcoli i codici dei componenti utilizzati nella composizione dell’articolo L 100 Create view comp. L 100 (codici_comp. L 100) AS Select com_cod From compart Where art_cod=‘L 100’ 12/25/2021

Esercizio Creare una vista che mostri le descrizioni dei componenti utilizzati nella composizione dell’articolo

Esercizio Creare una vista che mostri le descrizioni dei componenti utilizzati nella composizione dell’articolo L 100 Create view descomp. L 100 (descrizione) As Select com_descrizione From Componenti join Comp. L 100 ON (codici_comp. L 100=com_cod) 12/25/2021

Esercizio Creare una vista che mostri le descrizioni dei componenti utilizzati nella composizione degli

Esercizio Creare una vista che mostri le descrizioni dei componenti utilizzati nella composizione degli articoli della categoria L 10 Create view comp. L 10(componente) As Select com_descrizione From Componenti Join compart Using(com_cod) join Articoli Using (Art_cod) Where cat_cod=‘L 10’ Create view comp. L 10(componente) As Select com_descrizione From Componenti Where com_cod in (Select com_cod From compart Where art_cod in (Select art_cod From Articoli Where cat_cod=‘L 10’) 12/25/2021

Esercizio Creare una vista che mostri la massima quantità richiesta in un ordine per

Esercizio Creare una vista che mostri la massima quantità richiesta in un ordine per ciascun articolo ordinato Create view massimordine(Articolo, Massimaquantità) AS Select art_cod, max(ordart_qta) From Ordart Group by art_cod 12/25/2021

Esercizio Eliminare la vista creata all’esercizio precedente Drop view massimordine Restirict 12/25/2021

Esercizio Eliminare la vista creata all’esercizio precedente Drop view massimordine Restirict 12/25/2021

Selezione dei dati tramite viste di gruppo In generale si può utilizzare una vista

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 12/25/2021

Esercizio Utilizzare la vista creata da Create view Dopo 31 Gen (Ordine, Negozio) AS

Esercizio Utilizzare la vista creata da Create view Dopo 31 Gen (Ordine, Negozio) AS Select ord_cod, neg_cod From Ordini Where ord_data>to date(‘ 31 -01 -2004’) in un esercizio precedente per far vedere solo il codice del negozio Select Negozio From Dopo 31 Gen 12/25/2021

Esercizio Utilizzare la vista dell’esercizio 1 Create view Dopo 31 Gen (Ordine, Negozio) AS

Esercizio Utilizzare la vista dell’esercizio 1 Create view Dopo 31 Gen (Ordine, Negozio) AS Select ord_cod, neg_cod From Ordini Where ord_data> to_date ‘ 31 -GEN-2004’ per far vedere solo i codici degli ordini fatti da parte di negozi di Trento Select Ordine, Neg_nome From Dopo 31 Gen, Negozi Where Negozio=neg_cod and Neg_citta=‘Trento’ 12/25/2021

Esercizio Trovare per ciascuno dei componenti utilizzati nella composizione dell’articolo L 100, il laboratorio

Esercizio Trovare per ciascuno dei componenti utilizzati nella composizione dell’articolo L 100, il laboratorio in cui tale componente è prodotto. Select Lab_cod From Componenti, Comp. L 100 Where com_cod=codici_comp. L 100 12/25/2021

Viste Aggiornabili Una vista si dice aggiornabile se mediante questa è possibile l’aggiornamento dei

Viste Aggiornabili Una vista si dice aggiornabile se mediante questa è possibile l’aggiornamento dei dati del database, ossia il loro inserimento, cancellazione e modifica. Una vista è aggiornabile se: 1. Non utilizza la specifica DISTINCT 2. Nella clausola FROM è presente una sola tabella, o una sola vista, che sia a sua volta aggiornabile 3. 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 subquery 5. Non è presente nè la clausola Group by, nè la clausola Having 12/25/2021

Esempio La seguente vista è aggiornabile Create view A 1 (A 1_Targa, A 1_cilindrata)

Esempio La seguente vista è aggiornabile Create view A 1 (A 1_Targa, A 1_cilindrata) As Select targa, cilindrata From Veicoli Where cilindrata<1500 Quest’altra invece non lo è Create view A 2 as Select targa, Cod_Modello, Nome_Categoria From Veicoli, Categorie Where Categorie. cod_cat=Veicoli. Cod_cat 12/25/2021 Due tabelle

Vantaggi delle viste: facilitazione nell’accesso ai dati In generale uno dei requisiti per la

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. 12/25/2021

Vantaggi delle viste: diverse visioni dei dati Esistono dei dati che sono presenti nelle

Vantaggi delle viste: diverse visioni dei dati Esistono dei dati che sono presenti nelle tabelle del database, che sono poco significativi per l’utente, 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 12/25/2021

Vantaggi delle Viste: Indipendenza Logica Un vantaggio delle viste è l’indipendenza logica delle applicazioni

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. 12/25/2021

Esempio Veicoli Targa Cod_mod Categoria Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm Supponiamo che

Esempio Veicoli 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, Veicoli 1 e Veicoli 2, Il primo contenente Targa, Codice modello e codice categoria, e il secondo contenente targa, cilindrata, codice combustibile, cavalli fiscali, velocita, posti e immatricolazione 12/25/2021

Esempio, creazione sottotabelle Veicoli Targa Cod_mod Categoria Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm

Esempio, creazione sottotabelle Veicoli Targa Cod_mod Categoria Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm Veicoli 1 Veicoli 2 Targa Cod_mod Categoria Targa Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm Create table Veicoli 1 (Targa char(10) Cod_Modello Char(3) Categoria char(2)) 12/25/2021 Create table Veicoli 2 (Targa char(10), Cilindrata number(4), Cod_comb char(2), Cav. Fisc number(3), Velocita Number(6), Posti number(2), Imm date)

Esempio, inserimento dati Veicoli Targa Cod_mod Categoria Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm

Esempio, inserimento dati Veicoli Targa Cod_mod Categoria Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm Veicoli 1 Veicoli 2 Targa Cod_mod Categoria Targa Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm Insert into Veicoli 1 (Targa, Cod_mod, Categoria) Select Targa, Cod_mod, Categoria From Veicoli Drop Table Veicoli 12/25/2021 Insert into Veicoli 2 (Targa, Cilindrata, Cod_comb, Cav_Fisc, Velocita’, Posti , Imm) Select Targa, Cilindrata, Cod_comb, Cav_fisc, Velocita, Posti, Imm From Veicoli

Esempio, creazione vista Veicoli 1 Veicoli 2 Targa Cod_mod Categoria Targa Cilindrata Cod_comb. cav.

Esempio, creazione vista Veicoli 1 Veicoli 2 Targa Cod_mod Categoria Targa Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm Create view Veicoli (Targa, cod_Mod, Cod_Categoria, Cilindrata, Cod_comb, Cav. Fisc, Velocita’, Posti, Imm) AS Select Veicoli 1. targa, cod_mod, Categoria, cod_comb, cav. Fisc, velocita, posti, Imm FROM Veicoli 1, Veicoli 2 WHERE Veicoli 1. Targa=Veicoli 2. Targa Veicoli Targa Cod_mod Categoria Cilindrata Cod_comb. cav. Fisc Velocita Posti Imm 12/25/2021

Esempio, conclusioni A questo punto l’applicazione che faceva uso della tabella Veicoli, farà uso

Esempio, conclusioni A questo punto l’applicazione che faceva uso della tabella Veicoli, farà uso della Vista Veicoli, che , anche se non è “fisicamente” una tabella, ne ha tutte le caratteristiche informative. 12/25/2021

Un’interrogazione non standard Il dipartimento che impiega il massimo budget in stipendi dei dipendenti

Un’interrogazione non standard Il dipartimento che impiega il massimo budget in stipendi dei dipendenti Select Dipart from Impiegato group by Dipart having sum(Stipendio) >= all (select sum(Stipendio) from Impiegato group by Dipart) E’ sbagliata perché la nidificazione nella having non è ammessa 12/25/2021

Soluzione con le viste CREATE VIEW Budget. Stipendi(Dipartimento, Totale. Stipendi) AS SELECT Dipart, sum(Stipendio)

Soluzione con le viste CREATE VIEW Budget. Stipendi(Dipartimento, Totale. Stipendi) AS SELECT Dipart, sum(Stipendio) FROM Impiegato GROUP BY Dipart SELECT Dipartimento FROM Budget. Stipendi WHERE Totale. Stipendi =(SELECT max(Totale. Stipendi) FROM Budget. Stipendi) 12/25/2021

Ancora sulle viste Calcolare la media degli uffici distinti presenti in ogni dipartimento Interrogazione

Ancora sulle viste Calcolare la media degli uffici distinti presenti in ogni dipartimento Interrogazione scorretta select avg(count(distinct Ufficio)) from Impiegato group by Dipart Con una vista Due operatori aggregati annidati create view Uffici. Dipart (Nome. Dip, Nro. Uffici) as select Dipart, count(distinct Ufficio) from Impiegato group by Dipart select avg(Nro. Uffici) from Uffici. Dipart 12/25/2021