Esempi di TRC Matricole degli studenti che hanno sostenuto matematica ma non basi di dati { t t1 ESAME, t2 CORSO ( t[matr]=t1[matr] t1[codcorso]=t2[codcorso] t2[titolo]= matematica ) ( t3 ESAME, t4 CORSO (t[matr]=t3[matr] t3[codcorso]=t4[codcorso] Correttezza Si devono evitare formule unsafe: { t t R } dà un risultato infinito Si considerano corrette solo formule indipendenti dal dominio la soluzione non dipende dal dominio degli attributi, ma solo dall istanza del DB t4[titolo]= basi di dati ))) } 99 100 E sufficiente mostrare che si possono realizzare i cinque operatori fondamentali: Selezione, σ A=1 R: { t t R (t[a]=1) } Proiezione, Π AC R: { t t1 R (t[a,c]=t1[a,c]) } Prodotto cartesiano, R(A,B,C) S(D,E,F): (t[a,b,c]=t1[a,b,c] t[d,e,f]=t2[d,e,f] ) } Esempio di join, R(A,C) >< A=B S(B,D): (t[a,c] = t1[a,c] t[b,d] = t2[b,d] t[a] = t[b] ) } 101 102 Anche TRC è esprimibile tramite AR Unione, R S: ( t = t1 t = t2 ) } Differenza, R S: { t t R ( t S) } La prova è più complicata Si devono escludere espressioni unsafe e dipendenti dal dominio Sotto queste ipotesi TRC e AR hanno lo stesso potere espressivo 103 104
In che modo si differenziano i linguaggi formali? L algebra è un linguaggio PROCEDURALE: si dice esattamente in che modo valutare le interrogazioni (e si può ottimizzare) TRC è un linguaggio DICHIARATIVO: si dice cosa si vuole ottenere ma non come ottenerlo. Perchè vi abbiamo raccontato tutto ciò? SQL assomiglia al calcolo relazionale L algebra assomiglia a quanto viene effettivamente valutato da un DBMS 126 127 Viste (relazioni derivate) Rappresentazioni diverse per gli stessi dati (schema ) Relazioni derivate: relazioni il cui contenuto è funzione del contenuto di altre relazioni (definito per mezzo di interrogazioni) Relazioni di base: contenuto autonomo Le relazioni derivate possono essere definite su altre derivate, ma Architettura standard (ANSI/SPARC) a tre livelli per DBMS logico interno BD 128 129 Viste virtuali e materializzate Due tipi di relazioni derivate: viste materializzate relazioni virtuali (o viste) Viste materializzate relazioni derivate memorizzate nella base di dati vantaggi: immediatamente disponibili per le interrogazioni svantaggi: ridondanti appesantiscono gli aggiornamenti sono raramente supportate dai DBMS 130 131
Viste virtuali relazioni virtuali (o viste): sono supportate dai DBMS (tutti) una interrogazione su una vista viene eseguita "ricalcolando" la vista (o quasi) Viste, esempio Afferenza Impiegato Reparto Direzione Rossi A Reparto Capo Neri B A Mori Bianchi B B Bianchi B B una vista: Supervisione = Π Impiegato, Capo (Afferenza >< Direzione) 132 133 Interrogazioni sulle viste Sono eseguite sostituendo alla vista la sua definizione: σ Capo='Leoni' (Supervisione) viene eseguita come σ Capo='Leoni' ( Π Impiegato, Capo (Afferenza >< Direzione)) Viste, motivazioni : ogni vede solo ciò che gli interessa e nel modo in cui gli interessa, senza essere distratto dal resto ciò che e' autorizzato a vedere (autorizzazioni) Strumento di programmazione: si può semplificare la scrittura di interrogazioni: espressioni complesse e sottoespressioni ripetute Utilizzo di programmi esistenti su schemi ristrutturati Invece: L'utilizzo di viste non influisce sull'efficienza delle interrogazioni 134 135 Viste come strumento di programmazione Trovare gli impiegati che hanno lo stesso capo di Rossi Senza vista: Π Impiegato (Afferenza >< Direzione) >< ρ ImpR,RepR Impiegato,Reparto ( σ Impiegato='Rossi' (Afferenza >< Direzione)) Con la vista: Π Impiegato (Supervisione) >< ρ ImpR Impiegato ( σ Impiegato='Rossi' (Supervisione)) Viste e aggiornamenti, attenzione Afferenza Direzione Impiegato Reparto Reparto Capo Rossi A A Mori Neri B B Verdi A BC Supervisione Impiegato Rossi Neri Verdi Capo Mori Mori Vogliamo inserire, nella vista, il fatto che Lupi ha come capo ; oppure che Belli ha come capo Falchi; come facciamo? 136 137
Viste e aggiornamenti "Aggiornare una vista": modificare le relazioni di base in modo che la vista, "ricalcolata" rispecchi l'aggiornamento L'aggiornamento sulle relazioni di base corrispondente a quello specificato sulla vista deve essere univoco In generale però non è univoco! Ben pochi aggionamenti sono ammissibili sulle viste Una convenzione e notazione alternativa per i join Nota: è sostanzialmente l'approccio usato in SQL Ignoriamo il join naturale (cioè non consideriamo implicitamente condizioni su attributi con nomi uguali) Per "riconoscere" attributi con lo stesso nome gli premettiamo il nome della relazione Usiamo "assegnazioni" (viste) per ridenominare le relazioni (e gli attributi solo quando serve per l'unione) 138 139 Trovare gli impiegati che guadagnano più del proprio capo, mostrando matricola, nome e stipendio dell'impiegato e del capo Π Matr,Nome,Stip,MatrC,NomeC,StipC (σ Stip>StipC ( ρ MatrC,NomeC,StipC,EtàC Matr,Nome,Stip,Età (Impiegati) >< MatrC=Capo (Supervisione >< Impiegato=Matr Impiegati))) Π Matr,Nome,Stip,MatrC,NomeC,StipC (σ Stip>StipC ( ρ MatrC,NomeC,StipC,EtàC Matr,Nome,Stip,Età (Imp) >< MatrC=Capo (Sup >< Imp=Matr Imp))) Capi := ρ MatrC,NomeC,StipC,EtàC Matr,Nome,Stip,Età (Imp) Π Imp.Matr, Imp.Nome, Imp.Stip,Capi.Matr,Capi.Nome, Capi.Stip (σ Imp.Stip>Capi.Stip ( Capi >< Capi.Matr=Capo (Sup >< Imp=Imp.Matr Imp))) 140 141 Basi di dati Linguaggi di Interrogazione: SQL Prof.Angela Bonifati SQL Il nome stava per Structured Query Language Più che un semplice linguaggio di query: si compone di una parte DDL e di una DML DDL: definizione di domini, tabelle, indici, autorizzazioni, viste, vincoli, procedure, trigger DML: linguaggio di query, linguaggio di modifica, comandi transazionali Storia: Prima proposta: SEQUEL (IBM Research, 1974) Prima implementazione commerciale in SQL/DS (IBM, 1981) 143
Standardizzazione di SQL La standardizzazione è stata cruciale per la diffusione di SQL (nell ambito di ANSI e ISO) Dal 1983, standard de facto Prima versione ufficiale nel 1986 (SQL-1), rivista nel 1989 (SQL-89) Seconda versione nel 1992 (SQL-2 o SQL-92) Terza versione nel 1999 (SQL-3 o SQL:1999) In SQL-92 si distinguono tre livelli: Entry SQL (più o meno equivalente a SQL-89) Intermediate SQL Full SQL La maggior parte dei sistemi è conforme al livello Entry e Potere espressivo di standard e sistemi commerciali un tipico sistema commerciale SQL-89 SQL-2 offre delle estensioni proprietarie per le funzioni avanzate 144 145 SQL-1 SQL-3 Domini I domini specificano i valori ammissibili per gli attributi Simili ai meccanismi di definizione dei tipi dei linguaggi di programmazione Due categorie Elementari (predefiniti dallo standard, elementary o built-in) SQL-2 prevede 6 famiglie Definiti dall (user-defined) 146 Domini elementari, 1 Caratteri Caratteri singoli o stringhe Le stringhe possono avere lunghezza variabile Possono usare una famiglia di caratteri (character set) diversa da quella di default (es., Latin, Greek, Cyrillic, etc.) Sintassi: character [ varying ] [ (Lunghezza) ] [ character set FamigliaCaratteri ] Si possono usare le alternative più compatte char e varchar, rispettivamente per character e character varying Esempi: char(6) 147