Discendente
Vincenzo
Elena
Vincenzo
Alessandro
Alessandro
Laura
Alessandro
Rosa
Elena
Guido
Spiegare l'uso della ripresa a caldo e della ripresa a freddo nel processo di restart. Mostrare
un esempio.
Le riprese a caldo e a freddo sono delle procedure per il ripristino del corretto funzionamento di un
DBMS a seguito di un guasto. In particolare, la ripresa a caldo si attiva nei casi di guasti di sistema,
che comportano la perdita del contenuto della sola memoria centrale, mentre la ripresa a freddo si
attiva nei casi di guasti di dispositivo, che comportano la pi grave perdita del contenuto della
memoria secondaria.
La ripresa a caldo si articola in quattro fasi successive:
si accede all'ultimo punto del log e lo si ripercorre a ritroso fino all'ultimo punto di
checkpoint;
si costruiscono due insiemi, detti di UNDO e REDO, inizializzati rispettivamente con le
transazioni attive al momento del checkpoint e l'insieme vuoto. Si ripercorre poi il log in
avanti aggiungendo a UNDO tutte le transazioni di cui presente un record di begin e
spostando da UNDO a REDO tutte le transazioni di cui presente il record di commit. Al
termine di questa fase, UNDO e REDO contengono rispettivamente le transazioni da disfare
e quelle da rifare;
si ripercorre a ritroso il log disfacendo le transazioni in UNDO, risalendo fino alla prima
azione della transazione meno recente presente nei due insiemi (si pu arrivare anche a
prima del checkpoint);
infine, si applicano le transazioni in REDO nell'ordine in cui sono registrate nel log.
Di seguito un esempio di applicazione del protocollo. Si supponga che nel log vengano registrate le
seguenti azioni:
B(T1), B(T2), U(T2, O1, B1, A1), I(T1, O2, A2), B(T3), C(T1), B(T4), U(T3, O2, B3, A3), U(T4,
O3, B4, A4), CK(T2, T3, T4), C(T4), B(T5), U(T3, O3, B5, A5), U(T5, O4, B6, A6), D(T3, O5,
B7), A(T3), C(T5), I(T2, O6, A8).
Al momento di un guasto, il protocollo opera come segue:
si accede al record di checkpoint;
UNDO = {T2, T3, T4}, REDO = {}. Si ripercorre in avanti il log, aggiornando gli insiemi:
C(T4) UNDO = {T2, T3}, REDO = {T4}
B(T5) UNDO = {T2, T3, T5}, REDO = {T4}
C(T5) UNDO = {T2, T3}, REDO = {T4, T5}
si ripercorre indietro il log fino all'azione U(T2, O1, B1, A1), disfacendo le transazioni in
UNDO:
D(O6)
O5 = B7
O3 = B5
O2 = B3
O1 = B1
Spiegare e mostrare mediante un esempio l'uso degli operatori CUBE e ROLLUP in SQL .
L'operatore CUBE effettua tutte le possibili aggregazioni su una tabella basate sugli attributi di
raggruppamento specificati. Se ad esempio lanciassimo la seguente query:
SELECT Citta, Categoria, COUNT(Quantita) AS VenditeCC
FROM Vendite AS V, Articolo AS A, Luogo AS L
WHERE V.CodiceArticolo = A.CodiceArticolo AND V.CodiceLuogo = L.CodiceLuogo
GROUP BY CUBE(Citta, Categoria)
il risultato corrisponderebbe alla quantit delle vendite per ogni possibile combinazione degli
attributi Citta e Categoria presenti nella clausola GROUP BY CUBE. Inoltre, presente il valore
polimorfo ALL che corrisponde all'insieme di tutti i possibili valori presenti nel dominio di ciascun
attributo.
Poich la complessit della valutazione di CUBE cresce esponenzialmente col crescere del numero
di attributi di raggruppamento, possibile adoperare in sua vece l'operatore ROLLUP grazie al
quale le aggregazioni sono progressive rispetto all'ordine degli attributi di raggruppamento e,
quindi, crescono solo linearmente col crescere di tali attributi.
La sostituzione della parole chiave ROLLUP a CUBE nell'interrogazione precedente restituisce gli
stessi risultati con l'eccezione dell'assenza delle vendite per citt che non vengono calcolate.
implicazioni applicative dai pattern scoperti nella fase precedente, valutando quali esperimenti
svolgere successivamente o quali conseguenze trarre dall'intero processo di scoperta di conoscenza.
In questa fase, tecniche di visualizzazione grafica, come statistiche descrittive, curve di regressione,
rappresentazioni di cluster o alberi di decisione, possono essere di grande aiuto all'analisi.
e il passo di consolidamento dei dati?
la prima fase del processo di KDD e consiste nel condensare in un'unica base di dati i dati
provenienti da pi fonti alternative ed eterogenee e nell'eseguire una preliminare fase di pulitura dei
dati, necessaria a rimuovere valori mancanti e anomali.
e il passo di selezione e preprocessamento dei dati?
la seconda fase del processo di KDD e consiste in quell'insieme di operazioni necessarie a
preparare il dataset da fornire in input all'algoritmo di data mining. Ad esempio, si applicano
operazioni di trasformazione dei dati (discretizzazione, normalizzazione) e di riduzione della
dimensionalit dei dati (rimozione di attributi ridondanti o irrilevanti e mantenimento dei soli
attributi pi significativi).
e il passo di data mining?
la terza fase nonch quella centrale del processo di KDD e consiste nell'applicazione di un
algortimo di data mining vero e proprio ai dati d'interesse, opportunamente preprocessati. Il fine
scovare pattern e modelli significativi. Esistono algoritmi di data mining differenti a seconda del
determinato task che si vuole soddisfare; in genere possibile distinguere fra tecniche orientate alla
predizione del valore di dati ignoti (classificazione, regressione) e tecniche orientate alla
descrizione di dati noti (apprendimento di regole di associazione, clustering, rilevamento di
anomalie, ).
gruppi di variabili;
clustering: l'identificazione di gruppi di oggetti non noti a priori in cui sia minima la
varianza fra gli elementi di uno stesso gruppo e massima la varianza fra elementi di
gruppi diversi;
profiling: mira a fornire una descrizione compatta dei dati d'interesse;
modellazione delle dipendenze: consiste nello scoprire modelli che descrivano le
dipendenze significative esistenti fra le variabili;
anomaly detection: si concentra sulla scoperta di cambiamenti significativi nei dati
rispetto al loro comportamento normale.
Descrivere i concetti su cui si basano le Basi di Dati Parallele e la loro correlazione con le Basi
di Dati Distribuite.
Le basi di dati parallele sono basi di dati che, al fine di garantire prestazioni migliori, supportano il
parallelismo. Si distinguono, in particolare, due tipologie di parallelismo:
inter-query: quando si eseguono interrogazioni diverse in parallelo;
intra-query: quando si eseguono parti di una stessa interrogazione in parallelo.
Le basi di dati parallele sono in stretta correlazione con le basi di dati distribuite proprio perch la
maggior efficienza prestazionale si ottiene frammentando i dati e distribuendoli su pi dischi
distinti. In questo modo, infatti, si ottengono tempi di risposta che, in linea di principio,
approssimano il valore ideale di (1/n), dove n il numero di frammenti, rispetto al tempo di risposta
originale.
tipi di dati, i messaggi scambiati e le operazioni offerte, ed una concreta, che specifica le modalit
di scambio dei messaggi e la dislocazione fisica dei servizi.
Esempio:
<message name="richiestaTraduzione">
<part name="vocabolo" type="xs:string"/>
</message>
<message name="rispostaTraduzione">
<part name="traduzione" type="xs:string"/>
</message>
<portType name="servizioDizionario">
<operation name="traduci">
<input message="richiestaTraduzione"/>
<output message="rispostaTraduzione"/>
</operation>
</portType>
<binding type="servizioDizionario" name="bind1">
<soap:binding style="document" transport=''http://schemas.xmlsoap.org/soap/http'' />
<operation>
<soap:operation soapAction=''http://www.esempio.org/getTr''/>
<input> <soap:body use="literal"/> </input>
<output> <soap:body use="literal"/> </output>
</operation>
</binding>
<service name="dizionario">
<port name="servizioDizionario" binding="bind1">
<soap:address location=''http://www.esempio.org''/>
</port>
</service>
Classificare il seguente schedule: r1(x) w2(x) r3(x) r1(y) w2(y) r1(v) w3(v) r4(v) w4(y) w5(y) .
Si distinguono le transazioni:
t1: r1(x) r1(y) r1(v)
t2: w2(x) w2(y)
t3: r3(x) w3(v)
t4: r4(v) w4(y)
t5: w5(y)
t1
t2
t3
t4
t5
r1(x)
w2(x)
r3(x)
r1(y)
w2(y)
r1(v)
w3(v)
r4(v)
w4(y)
w5(y)
Si disegna il grafo dei conflitti. Il grafo costruito facendo corrispondere un nodo ad ogni
transazione e tracciando un arco orientato da un nodo ti a tj se esiste almeno un conflitto tra
un'azione ai e un'azione aj e ai precede aj. Date due azioni ai e aj, con i j, si dice che ai in conflitto
con aj se esse operano sullo stesso oggetto e almeno una di esse una scrittura. Possono quindi
esistere conflitti lettura-scrittura (rw o wr) e scrittura-scrittura.
transazioni in dubbio, per ciascuna di esse necessario richiederne l'esito finale al coordinatore.
La caduta del coordinatore avviene durante la trasmissione dei messaggi e comporta la loro
eventuale perdita. Lo stato del coordinatore caratterizzato dai seguenti tre casi:
quando l'ultimo record nel log di prepare, la caduta del coordinatore pu aver
effettivamente posto alcuni partecipanti in una situazione di blocco. Il loro ripristino avviene
normalmente decidendo per un global abort e poi svolgendo la seconda fase del protocollo;
quando l'ultimo record nel log una decisione globale, la caduta del coordinatore pu aver
causato una situazione in cui alcuni partecipanti sono stati correttamente avvertiti e altri no.
In questo caso, il cordinatore deve ripetere la seconda fase del protocollo;
quando l'ultimo record nel log di complete, la caduta del coordinatore non ha effetto sulla
transazione.
Nel contesto dei sistemi informativi su web, spiegare pro e contro delle soluzioni basate su
server conosciute.
L'accesso ad una base di dati tramite CGI presenta una serie di limitazioni: un elevato sovraccarico
delle prestazioni del server dovuto alla continua creazione e distruzione di processi e l'inesistenza di
strutture dati condivise fra richieste successive che permettano, ad esempio, di mantenere attiva la
connessione alla base di dati.
Per superare queste limitazioni sono state proposte soluzioni basate sia su client che su server.
Esistono diverse soluzioni basate su server:
l'uso di specifici server Web che utilizzano la base di dati stessa per memorizzare le pagine
Web. Questo approccio rende semplice ed efficiente la programmazione delle operazioni
ma, di contro, lega l'evoluzione del Web server a quanto messo a disposizione dalla casa
produttrice del DBMS;
l'architettura basata su servlet: ai fini del calcolo dinamico delle pagine, viene utilizzato
l'ambiente di esecuzione dei programmi Java, la JVM, e in particolare il programma speciale
denominato servlet container per l'esecuzione delle servlet. Le servlet svolgono funzioni
simili agli script CGI con la differenza che sono scritte in un linguaggio di programmazione
specifico (Java) e sono eseguite all'interno di un ambiente a oggetti. Il maggiore limite delle
servlet consiste nel fatto che il codice Java si occupa di stampare non solo la parte dinamica
della pagina ma anche la parte statica, che resta tale e quale da chiamata a chiamata. Questa
considerazione rilevante perch un'eventuale revisione all'estetica della pagina comporta la
revisione dell'intero programma servlet;
template di pagina e linguaggi di scripting lato server: questa soluzione consente una
migliore separazione tra le parti fisse e le istruzioni per il calcolo delle parti dinamiche di
una pagina e rende pertanto pi semplice aggiornare la parte grafica in modo indipendente
dalle istruzioni di programmazione. Un esempio popolare di questa architettura costituita
dalle JSP: una tecnologia per l'esecuzione di template programmati in Java all'interno del
servlet container.
primaria alle secondarie avviene in due passi: prima si catturano i cambiamenti effettuati
dalle transazioni andate in commit (passo capture) e poi questi cambiamenti vengono
effettuati (passo apply).
quale meccanismo di replicazione utilizzato di pi e perch?
Il meccanismo di replicazione maggiormente utilizzato quello asincrono. Il motivo risiede nel
minor costo computazionale. Nella replicazione sincrona, infatti, prima che una transazione possa
effettuare il commit deve ottenere lock su tutte le copie modificate, quindi: deve inviare richieste di
lock ai siti remoti e, in attesa della risposta, tenere bloccati altri dati; se un sito o un collegamento si
guasta deve attenderne il ripristino; anche in assenza di guasti il commit deve seguire un protocollo
con molti messaggi e quindi molto costoso.
Spiegare i diversi livelli di trasparenza previsti nelle basi di dati distribuite. Esemplificare la
risposta.
La distinzione tra frammentazione e allocazione consente di individuare vari livelli di trasparenza
nelle applicazioni. I livelli di trasparenza pi significativi sono:
trasparenza di frammentazione: il programmatore non deve curarsi del fatto che la base di
dati sia o meno distribuita e frammentata; la sua interrogazione identica a quella che
verrebbe scritta per una relazione non frammentata. Consideriamo una tabella che descrive i
fornitori di prodotti di un'impresa e che essa sia frammentata orizzontalmente in due
frammenti relativi alle citt di Roma e Milano. Allora, l'interrogazione del nome di un
fornitore dato un determinato codice realizzabile come di seguito:
SELECT Nome FROM Fornitore WHERE codice = 'codice'
La classe VSR la pi generale. Essa si compone degli schedule view-equivalenti, cio quelli tali
da possedere la stessa relazione legge-da (un'operazione di lettura legge-da una di scrittura
quando quest'ultima precede l'operazione di lettura e non vi nessun'altra operazione di scrittura fra
le due) e le stesse scritture finali (un'operazione di scrittura finale l'ultima operazione di scrittura
di un oggetto che compare nello schedule). Il problema di determinare se uno schedule viewequivalente ad un altro un problema NP-hard, ci rende inutilizzabile nella pratica tale nozione.
La classe CSR strettamente inclusa nella VSR e si compone degli schedule conflict-equivalenti.
Uno schedule conflict-equivalente ad un altro se i due schedule presentano le stesse operazioni e
ogni coppia di operazioni in conflitto nello stesso ordine in entrambi (due azioni si dicono in
conflitto se operano sullo stesso oggetto e almeno una di esse di scrittura). possibile
determinare la conflict-serializzabilit di uno schedule tramite il cosiddetto grafo dei conflitti; se il
grafo aciclico, allora la condizione sussiste. Tuttavia, l'analisi di ciclicit di un grafo ha una
complessit lineare rispetto alle dimensioni del grafo stesso e risulta essere ancora onerosa all'atto
pratico.
I meccanismi di controllo effettivamente utilizzati superano le limitazioni finora discusse; i pi noti
sono il locking a due fasi (2PL) e il metodo dei timestamp (TS). Si pu dimostrare che sia la classe
2PL che la classe TS sono strettamente incluse nella CSR e a loro volta presentano un'intersezione
non nulla.
Il locking a due fasi piuttosto semplice: tutte le operazioni di lettura e scrittura devono essere
protette dai cosiddetti lock. Quest'ultimi possono essere condivisi, nei casi di sola lettura, esclusivi
nei casi di anche solo una scrittura, nel senso che l'accesso al dato su cui si vuole scrivere
concesso solo alla transazione che l'ha richiesto. Ci implica che quando una richiesta di lock in
scrittura concessa, la corrispondente risorsa viene acquisita dalla transazione richiedente e tutte le
altre vengono poste in attesa del suo rilascio. In pratica, le transazioni in scrittura agiscono in mutua
esclusione; solo quando un oggetto bloccato in lettura possibile assegnarlo ad un altra
transazione in lettura.
Il metodo dei timestamp associa ad ogni evento temporale degli identificatori, i timestamp appunto,
che definiscono un ordinamento totale sugli eventi. Si accetta quindi uno schedule solo se esso
riflette l'ordinamento seriale delle transazioni in base al valore di timestamp di ciascuna transazione.
In pratica, ogni transazione non pu leggere o scrivere un dato scritto da una transazione con
timestamp superiore, e non pu scrivere su un dato che gi stato letto da una transazione con
timestamp superiore. Il metodo comporta l'uccisione di un gran numero di transazioni.
differenze fra 2PL e TS.
Fra le due tecniche emergono differenze significative:
nel 2PL le transazioni sono poste in attesa, mentre nel TS uccise e poi riavviate;
l'ordine di serializzazione nel 2PL imposto dai conflitti, mentre nel TS dai timestamp;
la necessit di attendere l'esito della transazione comporta l'allungarsi del tempo di blocco
nel 2PL e la creazione di condizioni di attesa nel TS;
il 2PL pu presentare il problema del deadlock;
il restart usato dal TS in genere pi costoso dell'attesa imposta dal 2PL. Per questa ragione,
conviene pi il 2PL.
differenze fra 2PL e 2PL stretto.
Il locking a due fasi garantisce che le transazioni che lavorano sulla base di dati accedano ai dati in
mutua esclusione. Per avere per la garanzia che le transazioni seguano uno schedule serializzabile
necessario imporre la seguente restrizione: una transazione, dopo aver rilasciato una risorsa, non
pu acquisirne altre.
Questa restrizione permette di risolvere le anomalie di lettura inconsistente, di perdita di
Data una tabella Dipendenti, progettare una Servlet in grado di stampare tutte le
informazioni sui dipendenti.
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*; import java.sql.*;
public class MostraDipendenti extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
try {
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Connection conn = DriverManager.getConnection(jdbc:odbc:DB, user,
password);
PreparedStatement pstmt = conn.prepareStatement(select * from
dipendenti);
ResultSet result = pstmt.executeQuery();
response.setContentType(text/html);
PrintWriter out = response.getWriter();
out.println(<HTML>);
out.println(<BODY>);
while(result.next()) {
out.println(<P>);
out.println(Codice fiscale: + result.getString(CF) + +
out.println(</P>);
}
out.println(</BODY>);
out.println(</HTML>);
result.close();
pstmt.close();
conn.close();
}
catch (ClassNotFoundException e) {
throw new ServletException(e);
}
catch (SQLException e) {
throw new ServletException(e);
}
}
}
</P>
<% } %>
</BODY>
</HTML>
<%
%>
result.close();
pstmt.close();
conn.close();
applicazioni; conseguenza di questa legge che in genere il buffer gi contiene le pagine cui viene
fatta la maggior parte degli accessi.
Mostrare esempi di applicazione di metodi di data mining che svolgano il task di regressione.
Aiutarsi graficamente se necessario.
Il task di regressione un tipico task di data mining di tipo predittivo che mira, sulla base di
osservazioni campionarie di un determinato fenomeno, ad individuare una relazione di tipo
funzionale fra alcune veriabili indipendenti, dette regressori, e una variabile dipendente, detta
risposta, il cui valore atteso si vuole stimare.
Esempi di applicazione di metodi di data mining che svolgano regressione sono: la predizione del
livello di domanda di un nuovo prodotto da immettere sul mercato in funzione della spesa
promozionale; la predizione del debito pubblico delle casse dello Stato in funzione del reddito procapite; la predizione della percorrenza urbana di un'automobile in funzione della cilindrata.
Nell'ultimo caso, ed esempio, la funzione di regressione calcolata sulla percorrenza urbana in
funzione della cilindrata potrebbe assumere la forma di un'iperbole (essendo la prima inversamente
proporzionale alla seconda):
Discendente
Vincenzo
Elena
Vincenzo
Alessandro
Alessandro
Laura
Alessandro
Rosa
Elena
Guido
Spiegare le propriet ACIDE delle Basi di Dati e spiegare quali moduli del DBMS le
garantiscono.
Le propriet ACIDE sono propriet auspicabili in basi di dati orientate alle transazioni. Esse sono:
atomicit: una transazione dev'essere eseguita nella sua interezza o non dev'essere eseguita
affatto;
consistenza: l'esecuzione di una transazione non deve violare i vincoli d'integrit definiti
sulla base di dati;
isolamento: l'esecuzione di una transazione deve avvenire indipendentemente
dall'esecuzione contemporanea di altre transazioni;
persistenza: l'effetto di una transazione andata a buon fine deve essere definitivo.
Tali propriet sono garantite da moduli specifici di un DBMS. In particolare, aotmicit e persistenza
sono garantite dal gestore dell'affidabilit, l'isolamento dal gestore della concorrenza ed, infine, la
consistenza dai compilatori del DDL.
Descrivere le tecniche comunemente impiegate per risolvere il problema del blocco critico.
Il blocco critico, o deadlock, un problema rilevante nel controllo di concorrenza di transazioni e si
identifica in quella situazione di stallo in cui due o pi transazioni restano indefinitamente bloccate
con ciascuna di esse in attesa del rilascio di una risorsa detenuta dalle altre e viceversa.
Le tecniche comunemente utilizzare per risolvere il problema del blocco critico sono tre:
uso del timeout: le transazioni rimangono in attesa della risorsa per un tempo prefissato
esaurito il quale alla richiesta della risorsa viene dato esito negativo. Per la sua semplicit,
questa tecnica si lascia preferire nella stragrande maggioranza dei DBMS commerciali;
prevenzione: esistono tecniche diverse volte a prevenire il deadlock, piuttosto che risolverlo.
Una tecnica prevede di richiedere il lock di tutte le risorse necessarie alla transazione in una
sola volta. Essa presenta per il problema che le transazioni spesso non conoscono a priori le
risorse di cui potrebbero aver bisogno. Inoltre, pu causare il sorgere di un ulteriore
problema, la starvation, nel senso che una transazione, prima di vedersi assegnate tutte le
risorse di cui ha bisogno, pu restare un tempo arbitrariamente lungo in attesa;
rilevamento: questa tecnica prevede di non porre vincoli al comportamento del sistema, ma
di controllare periodicamente il contenuto delle tabelle di lock per rilevare eventuali
situazioni indesiderate. Il rilevamento consiste nell'analisi del cosiddetto grafo dei conflitti e
nella determinazione se esso aciclico o meno. Questa soluzione risulta essere abbastanza
efficiente.
pagina ricercata gi presente nel buffer, l'accesso al disco si rivela non necessario.
Le primitive per la gestione del buffer sono le seguenti:
fix: indica che una pagina attualmente utilizzata da una transazione;
setDirty: indica che una pagina stata modificata;
unfix: indica che una pagina utilizzata da una transazione stata rilasciata;
force: trasferisce una pagina in modo sincrono in memoria secondaria;
flush: esegue l'operazione precedente in modo asincrono.
Descrivere le principali differenze fra uno schema a stella e uno schema a fiocco di neve.
Lo schema a stella e lo schema a fiocco di neve sono schemi relazionali per la realizzazione di un
data warehouse.
Lo schema a stella si compone di una relazione principale, detta tabella dei fatti, che memorizza
le istanze di un fatto; varie relazioni ausiliarie, chiamate tabelle dimensione, che memorizzano i
membri delle dimensioni associate al fatto; un insieme di vincoli di integrit referenziale ognuno dei
quali collega un attributo della tabella dei fatti ad una tabella dimensione. Disponendo la tabella dei
fatti al centro e le tabelle dimensione intorno a essa si ottiene la configurazione a stella che d
appunto il nome allo schema.
La tabella dei fatti ha una chiave composta da attributi che si riferiscono alle chiavi delle tabelle
dimensione e soddisfa la forma normale di Boyce-Codd. Le tabelle dimensione, invece, hanno una
chiave semplice e sono generalmente denormalizzate.
Le tabelle dimensione si mantengono in genere denormalizzate per motivi di efficienza. In questa
maniera, infatti, pur generando una certa ridondanza, si evitano nelle interrogazioni onerose
operazioni di join tra le tabelle.
Nel caso in cui si decide di normalizzare (sia pur parzialmente) uno schema a stella per ridurre la
ridondanza degli schemi dimensionali, si ottiene uno schema a fiocco di neve. In pratica, lo schema
ottenuto normalizzando le tabelle dimensione e decomponendole in ulteriori tabelle.
livello logico: a questo livello viene descritta la struttura degli insiemi di dati e delle
relazioni fra loro, secondo un certo modello di dati, senza nessun riferimento alla loro
organizzazione fisica in memoria permanente. La descrizione della struttura della base dati
viene chiamata schema logico;
livello di vista logica: a questo livello si definisce come deve apparire la struttura della base
di dati ad una certa applicazione. Questa descrizione viene spesso chiamata vista, per
evidenziare il fatto che essa si riferisce a ci che un utente immagina che sia la base di dati.
Questa architettura garantisce:
indipendenza fisica: possibile modificare le strutture fisiche senza influire sulle descrizioni
dei dati ad alto livello e quindi sui programmi che utilizzano i dati stessi;
indipendenza logica: consente di interagire con il livello esterno della base di dati in modo
indipendente dal livello logico (es. aggiungere un nuovo schema esterno senza modificare lo
schema logico).
Descrivere la sintassi per la creazione di una vista e gli usi per cui pu essere utilizzata.
Una vista una tabella virtuale costruita a partire da tabelle di base o altre viste, che non
memorizzata effettivamente, ma espansa solo quando coinvolta in un'interrogazione.
La sintassi per la creazione di una vista in SQL la seguente:
CREATE VIEW NomeVista(Lista attributi) AS espressione di SELECT [WITH CHECK OPTION]
Le operazioni di modifica di una vista sono soggette a forti restrizioni, poich non sono in genere
riconducibili a modifiche sulle tabelle di base usate per definire la vista stessa. In particolare, le
modifiche sono ammesse solo quando la vista definita soddisfacendo le seguenti condizioni:
la clausola SELECT non ha l'opzione DISTINCT, n funzioni calcolate o aggregative;
la clausola FROM riguarda una sola tabella di base o una sola vista a sua volta modificabile;
la clausola WHERE non contiene sotto-query;
non sono presenti gli operatori GROUP BY e HAVING;
le colonne definite nella tabella di base con il vincolo NOT NULL devono far parte della
vista.