Resúmenes

Apuntes universitarios en formato Markdown desde Obsidian.

Una vista è una relazione derivata a partire dalle relazioni di base o di altre viste per mezzo di interrogazioni. Essa consente di mettere a disposizione degli utenti rappresentazioni diverse degli stessi dati. Una vista è:

  • dotata di uno schema

  • utilizzabile nelle interrogazioni alla stregua delle tabelle di base Due tipologie di viste:

  • virtuali: prive di estensione (tuple);

  • materializzate: tabelle derivate il cui contenuto (tuple) viene effettivamente memorizzato nella base di dati (problema: mantenimento della allineamento con le tabelle di base). Lo schema logico di riferimento comprende le seguenti relazioni di base :

  • Imp(matr, nome, dip, stipendio, sup)

  • Dip(cod, nome, azienda*, direttore)

  • Azienda(cod, nome, città, regione, fatturato) A partire dalle suddette relazioni, possiamo definire varie viste, ad esempio, la vista Info-Dip che, per ogni dipartimento, riporta codice, nome, stipendio totale, stipendio massimo, numero di impiegati e azienda di appartenenza.

CREATE VIEW Info-Dip(cod, nome, stip-tot, max-stip, num-imp, azienda) AS
    SELECT cod, Dip.nome, sum(stipendio), max(stipendio), count(*), azienda
    FROM Imp, Dip
    WHERE cod=dip
    GROUP BY cod, Dip.nome, azienda

Il suddetto costrutto genera una relazione il cui schema è Info-Dip(cod, nome, stip-tot, max-stip, num-imp, azienda) e le cui tuple potrebbe, ad esempio, essere le seguenti:

vista1
vista1

Lo schema della vista è visibile nello schema logico della BD alla stregua degli schemi delle relazioni di base. Lo schema logico della BD esteso con la vista Info-Dip equivale a:

  • Imp(matr, nome, dip, stipendio, sup)
  • Dip(cod, nome, azienda*, direttore)
  • Azienda(cod, nome, città, regione, fatturato)
  • Info-Dip(cod, nome, stip-tot, max-stip, num-imp, azienda)

Altre viste possono essere definite a partire dalle relazioni (sia di base sia derivate) presenti nel suddetto schema.

Le viste possono essere utilizzate nella formulazione di interrogazioni alla stessa stregua di qualsiasi altra relazione. Di seguito riportiamo alcuni esempi:

SELECT azienda, stip-tot, num-imp
FROM Info-Dip
WHERE nome = "ricerca"

vista2
vista2

SELECT azienda, sum(stipendio), count(*)
FROM Imp AS I, Dip AS D
WHERE D.cod = I.dip AND D.nome = "ricerca"
GROUP BY cod, azienda
SELECT nome
FROM Info-Dip
WHERE num-imp >= ALL (SELECT num-imp
                        FROM Info-Dip)
SELECT Dip.nome
FROM Imp, Dip
WHERE Imp.dip = Dip.Cod
GROUP BY Dip.cod, Dip.nome
HAVING count(*) >= ALL (SELECT count(*)
                        FROM Imp, Dip
                        WHERE Imp.dip = Dip.Cod
                        GROUP BY Dip.cod)

POTERE ESPRESSIVO: ci sono query esprimibili solo grazie alle viste (le sole tabelle di base non sono sufficienti) – quindi le viste incrementano il potere espressivo di SQL. In particolare, si tratta di query in cui vi è una applicazione in cascata di funzioni di aggregazione.

ESEMPIO 3: per ogni azienda, numero medio di impiegati nei dipartimenti:

SELECT azienda, avg(num-imp)
FROM Info-Dip
GROUP BY azienda

vista3
vista3

ESEMPIO 4: per ogni regione, numero medio di imprese per città:

CREATE VIEW Info-Aziende(città, regione, #aziende) AS
    SELECT citta', regione, count(*) 
    FROM Azienda
    GROUP BY citta', regione
```sql
SELECT regione, avg(#aziende)
FROM Info-Aziende
GROUP BY regione

Esecuzione di query

  • virtuale: trasformazione della query sulla vista in una query equivalente sulle relazioni di base – a tempo di compilazione;
  • materializzata: quando una query sulla vista viene eseguita per la prima volta, le tuple generate vengono memorizzate come per le relazioni di base. Problema: aggiornamento necessario ogniqualvolta le relazioni di base, in funzione delle quali è definita la vista, vengono aggiornate.

Vantaggi uso viste

  • semplicità interrogazioni;
  • maggiore potere espressivo - viste ricorsive;
  • protezione dei dati: gruppi di utenti, per motivi di sicurezza/privacy, possono accedere alla BD attraverso opportune viste;
  • indipendenze logica: se viene modificato lo schema logico della BD, si può definire un insieme di viste tali da mantenere inalterato lo schema iniziale – per gli utenti non cambia quindi la percezione della BD.