Modello relazionale Il Modello Relazionale • Il modello relazionale dei dati, proposto nel 1970 ed adottato nei sistemi commerciali a partire dal 1978, si è diffuso rapidamente tanto sui sistemi grandi quanto sugli elaboratori personali. • Definizione: I meccanismi per definire database con il modello relazionale sono l’ennupla (o record) e la relazione (o tabella): – una relazione R è definita da un insieme finito di coppie (campi) della forma T = (A1: T1, A2:T2,…, Ak:Tk) dove gli Ai sono detti attributi e i Ti sono tipi elementari – lo schema di una base di dati è un insieme di relazione Ri(Ti); – un’istanza di una relazione R(T) è un insieme finito di ennuple di tipo T, cioe di oggetti della forma (A1:v1, A:v2, …, Ak:vk) dove i vi sono di tipo Ti Modello relazionale Esempio: relazione Studenti Schema Relazione Studenti(Nome: string, Matricola: string, Provincia: string, AnnoNascita:int) attributo Istanza di Studenti ennupla Nome Matricola Provincia AnnoNascita Isaia 171523 PI 1980 Rossi 167459 LU 1975 Bianchi 179856 LI 1078 Bonini PI 1980 175649 Valore di attributo Per semplicità una relazione si rappresenta come una tabella le cui colonne rappresentano gli attributi della relazione e le righe le ennuple della relazione. Modello relazionale Chiavi • Chiave Un insieme di campi di una tabella è una chiave se per ogni istanza di tale tabella non esistono due record che coincidano su tutti i valori di tali campi. • Chiave primaria: una delle chiavi, in genere la più corta – Esempio: (Matricola) e (Nome,Indirizzo) sono chiavi in Studenti(Matricola: Int, Nome: String, Indirizzo: String) Modello relazionale Associazioni • Associazione tra ennuple – rappresentata attraverso i valori di un insieme di attributi (chiave esterna), che assume come valori quelli della chiave primaria di un’altra relazione. • Es. Studenti Nome Matricola Provincia AnnoNascita Isaia 171523 PI 1980 Esami Materia Candidato Data Voto BD 171523 12/01/01 29 Modello relazionale Associazione: esempio Studenti(Nome: string, Matricola: string, Provincia: string, AnnoNascita:int) Esami(Materia: string, Candidato*: string, Data: string, Voto: int) Studenti Nome Matricola Provincia AnnoNascita Studenti Nome Matricola Provincia AnnoNascita Isaia 171523 PI 1980 Rossi 167459 LU 1975 Bianchi 179856 LI 1078 Bonini PI 1980 175649 Esami Materia Esami Materia Data Voto Voto BD Candidato Data *171523 12/01/01 BD 167459 15/01/01 30 FP 179856 13/02/01 30 BD 175649 15/01/01 25 LMM 171523 11/02/01 18 28 Modello relazionale Schema grafico relazionale Studenti(Nome: string, Matricola: string, Provincia: string, AnnoNascita:int) Esami(Materia: string, Candidato*: string, Data: string, Voto: int) Nome Materia Candidato* Matricola Studenti Esami Provincia Data AnnoNascita Voto Legenda: A B In B c’è una chiave esterna per A Modello relazionale Esempio: altre soluzioni 1/2 Studenti(Nome: string, Matricola: string, Provincia: string, AnnoNascita:int, Esame*:int) Esami(Codice :int, Materia: string, Data: string, Voto: int) Nome Matricola Esame* Materia Codice Studenti Esami Provincia Data AnnoNascita Voto Modello relazionale Esempio: altre soluzioni 2/2 Studenti(Nome: string, Matricola: string, Provincia: string, AnnoNascita:int) Esami(Codice :int, Materia: string, Data: string, Voto: int) StudentiEsami(Esame*: int, Candidato*: string) Nome Materia Codice Matricola Studenti Esami Provincia Data AnnoNascita Voto StudentiEsami Candidato* Esame* Conversione ER-relazionale Trasf. di schemi ER in relazionali • Il modello relazionale non si presta alla modellazione concettuale per la sua povertà espressiva – Attributi con tipi elementari – Associazioni con chiavi esterne, (1:1) o (0:n)? • Quindi: – Si modella con diagrammi ER – Regole di trasformazione da ER a formalismo grafico relazionale Conversione ER-relazionale Passi di trasformazione Passi di trasformazione: – – – – – – Trasf. associazioni 1:1 e 0:n Trasf. associazioni n:n Trasf. Gerarchie di inclusione Identificazione chiavi primarie Trasf. attributi multivalore Appiattimento attributi composti Scopo: – – – – Rappresentare le stesse informazioni Minimizzare la ridondanza Schema comprensibile Evitare sprechi di memoria Conversione ER-relazionale Associazioni 0:n Nome Materia Data Voto Matricola Esami Studenti Provincia AnnoNascita Materia Candidato* Nome Matricola Esami Studenti Data Provincia Voto AnnoNascita Regola Chiave esterna aggiunta alla tabella con associazione univoca Conversione ER-relazionale Associazioni 1:1 Nome idFacolta Indirizzo DirettaDa Facolta DirettoreDi Professori Nome Nome idFacolta Direttore* Indirizzo idProfessore Facolta Professori Provincia AnnoNascita Regola Chiave esterna aggiunta a una qualsiasi delle due tabelle coinvolte (precedenza al vincolo di totalità) Conversione ER-relazionale Associazioni unarie Nome compagnoDi idPersona Provincia Persone AnnoNascita Nome idPersona Compagno* Persone Provincia AnnoNascita Regola Si aggiunge una chiave esterna alla tabella stessa Conversione ER-relazionale Associazioni n:n Nome idConto Persone CCorrenti idPersona Saldo idPersona* idConto* Nome idConto Persone idPersona Persone-CC CCorrenti Saldo Regola Si aggiunge una terza tabella che contiene le chiavi esterne relative alle due tabelle coinvolte. Conversione ER-relazionale Associazione con proprietà Data Titolo idLibro Nome Libri Autore Utenti prestatoA libriInPrestito Titolo Utente* Autore idUtente Nome Libri Utenti idUtente Data idLibro Libro* Data Utente* Titolo Autore Libri Prestiti Utenti idLibro Regola Attributi aggiunti alla tabella con chiave esterna, oppure ad una terza tabella con due chiavi esterne Nome idUtente Conversione ER-relazionale Esempio di conversione Editori Editori Libri Prestiti Autori Utenti Libri Prestiti Autori-Libri Autori Utenti Conversione ER-relazionale Attributi multivalore Persone Persone LingueParlate Lingua Persone LingueParlate Lingua LingueParlate Persone LingueParlate Lingue Conversione ER-relazionale Le sottoclassi Persone Studenti [ nome: string Diventa: età: int codice: int ] [ corsoDiLaurea: string matricola: int ] Oppure: Persone Persone Studenti Oppure: ( nome: string età: int codice: int corsoDiLaurea: optional string matricola: optional int ) Persone Studenti ( Nome: string età: int codice: int ) ( codice*: int corsoDiLaurea: string matricola: int ) ( Nome: string età: int codice: int ) ( codice: int Nome: string età: int corsoDiLaurea: string matricola: int ) Conversione ER-relazionale Le sottoclassi (cont.) Persone AttrM AttrM optional AttrF optional Maschi Persone AttrM con chiave esterna ChP Maschi AttrP con chiave ChP Persone AttrF con chiave esterna ChP Femmine AttrP con chiave ChP Femmine AttrF AttrP con chiave ChP Maschi AttrP con chiave ChP e AttrM Femmine AttrP con chiave ChP e AttrF Conversione ER-relazionale Criteri di scelta • Numero di attributi delle sottoclassi • Tipo di operazioni – Riguardano tutte le informazioni di elementi di una sottoclasse? – Riguardano la visita di tutti gli elementi della superclasse? Linguaggi relazionali Linguaggi relazionali Per il modello relazionale sono stati definiti due principali linguaggi che sono stati poi usati per definire e implementare il linguaggio SQL dei DBMS. Algebra relazionale insieme di operatori su relazioni che danno come risultato relazioni. Non si usa come linguaggio di interrogazione dei DBMS ma come rappresentazione interna delle interrogazioni. Calcolo relazionale linguaggio dichiarativo di tipo logico dal quale è stato derivato l'SQL. Linguaggi relazionali Algebra relazionale Notazione ReS relazioni t, s ennuple A,B,C attributi X,Y,Z insiemi di attributi Operatori di base • Proiezione • Restrizione • Ridenominazione • Prodotto • Giunzione Linguaggi relazionali Proiezione Proiezione (): elimina gli attributi che non sono nella lista di proiezione A1...An (R) Qual è il tipo del risultato? Se R ha n elementi quanti ne ha il risultato? Linguaggi relazionali Esempi di proiezione Studenti Nome Matricola Provincia AnnoNascita Isaia 171523 PI 1980 Rossi 167459 LU 1975 Bianch iBonini 179856 LI 1078 175649 PI 1980 Nome, Matricola (Studenti) Nome (Studenti) Nome Matricola Nome Isaia 171523 Isaia Rossi 167459 Rossi Bianchi 179856 Bianchi Bonini 175649 Bonini Linguaggi relazionali Restrizione Restrizione (selezione) (): seleziona le ennuple della relazione che soddisfano la condizione. Condizione (R) Qual è il tipo del risultato? Se R ha n elementi quanti ne ha il risultato? Linguaggi relazionali Esempio di restrizione Studenti Nome Matricola Provincia AnnoNascita Isaia 171523 PI 1980 Rossi 167459 LU 1975 Bianchi 179856 LI 1078 Bonini 175649 PI 1980 AnnoNascita<1979 (Studenti) Nome Matricola Provincia AnnoNascita Rossi 167459 LU 1975 LI 1078 Bianchi 179856 Linguaggi relazionali Es. di composizione di operatori Studenti Nome Matricola Provincia AnnoNascita Isaia 171523 PI 1980 Rossi 167459 LU 1975 Bianchi 179856 LI 1078 Bonini 175649 PI 1980 Il numero di matricola degli studenti nati prima del 1979 Matricola( AnnoNascita<1979 (Studenti) ) Matricola 167459 179856 Linguaggi relazionali Prodotto e ridenominazione Prodotto (): l'operatore ha due argomenti R e S con attributi distinti e il risultato è una relazione con elementi ottenuti concatenando ogni ennupla di R con tutte quelle di S. a A a1 A1 a2 A2 b B b1 B1 b2 B2 b3 B3 a A b B a1 a1 a1 a2 a2 a2 A1 A1 A1 A2 A2 A2 b1 b2 b3 b1 b2 b3 B1 B2 B3 B1 B2 B3 Ridenominazione (): cambia il nome di un attributo di una relazione A B (R) Linguaggi relazionali Giunzione Giunzione naturale ( ) R(ZX) e S(YX) R S = { t | t[XY]R e t[ZX]S } A B a A A1 B1 a1 A1 A3 B2 a2 A2 A1 B3 A2 B3 Giunzione esplicita R a a1 a1 a2 S R.A = S.B A A1 A1 A2 B B1 B3 B3 Linguaggi relazionali Esempi di giunzione 1/4 Trovare i nomi degli studenti che hanno passato un esame con voto inferiore a 28 Studenti Nome Matricola Provincia AnnoNascita Isaia 171523 PI 1980 Rossi 167459 LU 1975 Bianchi 179856 LI 1978 Bonini PI 1980 175649 Esami Materia Voto BD Candidato Data *171523 12/01/01 BD 167459 15/01/01 30 FP 179856 13/02/01 30 BD 175649 15/01/01 25 LMM 171523 11/02/01 18 28 Linguaggi relazionali Esempi di giunzione 2/4 Nome( Voto<28 (Studenti Esami)) Matricola = Candidato Nome Matricola Provincia AnnoNascita Materia Candidato Data Voto Isaia 171523 PI 1980 BD 171523 12/01/01 28 Isaia 171523 PI 1980 LMM 171523 11/02/01 Rossi 167459 LU 1975 BD 167459 15/01/01 30 Bianchi 179856 LI 1978 FP 179856 13/02/01 30 Bonini 175649 PI 1980 BD 175649 15/01/01 25 18 Linguaggi relazionali Esempi di giunzione 3/4 Nome( Voto<28 (Studenti Esami)) Matricola = Candidato Nome Matricola Provincia AnnoNascita Materia Candidato Data Voto Isaia 171523 PI 1980 LMM 171523 11/02/01 18 Bonini 175649 PI 1980 BD 175649 15/01/01 25 Linguaggi relazionali Esempi di giunzione 4/4 Nome( Voto<28 (Studenti Esami)) Matricola = Candidato Nome Isaia Bonini Linguaggi relazionali Trasformazioni algebriche • Basate su regole di equivalenza fra espressione algebriche • Consentono di scegliere diversi ordini di join e di anticipare proiezioni e restrizioni. • Consideriamo la relazione R(A, B, C, D): A (AB (ABC (R))) A(R) C1(C2(C3(R) C1 C2 C3(R) C1 C2(E1 E2) C1 (E1) C2 (E2) R (S T) (R S) T (R S) (S R) • Ottimizzazione algebrica: anticipazione delle proiezioni e delle restrizioni rispetto al prodotto per ridurre la dimensione dei risultati intermedi Linguaggi relazionali Alberi logici e trasformazioni algebriche Consideriamo le relazioni R(A, B, C, D) e S(E, F, G) e l'espressione: A,F(A=100 and F > 5 and A=E (R x S)) A,F A,F A=E A=100 F>5 A=E R A E, F A=100 F>5 S R S Extra su Algebra Relazionale Linguaggi relazionali Algebra relazionale: (cont.) Unione (): l'operatore ha due argomenti R e S dello stesso tipo e il risultato è una relazione ottenuta facendo l'unione delle ennuple di R con quelle di S. RS Differenza (-): l'operatore ha due argomenti R e S dello stesso tipo e il risultato è una relazione contenente le ennuple di R non presenti in S. R - S = { t | tR e tS } Qual è il tipo del risultato? Se R e S hanno n elementi quanti ne ha il risultato? Se t1 è un'ennupla non in R , allora R = (R {t1}) - {t1}) Linguaggi relazionali Algebra relazionale: (cont.) Semi-giunzione ( ) R(ZX) e S(YX) R A B A1 B1 A3 B2 A1 B3 A2 B3 S = { t R | t[X] X(S) } a A A B a1 A1 A1 B1 a2 A2 A1 B3 a2 A4 A2 B3 Linguaggi relazionali Algebra relazionale: (cont.) Operatori derivati Intersezione () R S = { t | t R e t S } Divisione ( \ ) R \ S = { t | {t} S R} vale che (R S)\S = R a A b B a1 a1 a1 a2 a2 a2 A1 A1 A1 A2 A2 A2 b1 b2 b3 b1 b2 b3 B1 B2 B3 B1 B2 B3 b B b1 B1 b2 B2 b3 B3 a A a1 A1 a2 A2