MODELLO RELAZIONALE Definizione di relazione Schema e istanza Chiave Valori nulli Predicati e vincoli di integrità Vincolo di integrità referenziale cesarini-bdsi mod relazionale 1 MODELLO RELAZIONALE E.F.Codd A relational model for large shared data banks, Communication of ACM, vol.13, n.6, pp 377-387, 1970 Da allora fino alla metà degli anni 80 la ricerca sulle basi di dati è stata caratterizzata dallo studio teorico di vari aspetti riguardanti il modello, dalla ricerca di tecniche efficienti per la sua implementazione Primi prototipi realizzati agli inizi anni 70; dalla metà degli anni 80 i sistemi relazionali risultano dominanti sul mercato INGRES, SYSTEM R, DB2, ORACLE, INFORMIX, MYSQL, ACCESS cesarini-bdsi mod relazionale 2 1
RELAZIONE - definizione Consideriamo un insieme di attributi X = {X 1, X 2, X n } X i è un nome, una stringa Es: nome, indirizzo, codice, xyz, titolo, sposato Un insieme di domini base D = {D 1, D 2, D m } D i è un insieme di valori atomici Es: int, real, char, string, boolean, Una funzione dom che associa ad ogni X i un D j dom(x i ) = D j Es: dom(codice) = int, dom(titolo) = string, dom(sposato) = boolean Tupla (tuple): dato X = {X 1, X 2, X n } una tupla su X è una n-pla di coppie [X 1 :v 1, X 2 :v 2, X n :v n ] tali che v i dom(x i ) cesarini-bdsi mod relazionale 3 RELAZIONE - definizione Esempio di tupla X = { libro_id, titolo, autore} dom(libro_id) = int, dom(titolo) = string, dom(autore) = string [libro_id: 321, titolo: codice a zero, autore: Ken Follett ] Relazione: una relazione è un insieme di tuple definite sullo stesso insieme di attributi Es: {[libro_id: 321, titolo: codice a zero, autore: Ken Follett ], [ libro_id: 128, autore: Umberto Eco, titolo: il nome della rosa]} Rappresentazione tabellare di una relazione libro_id autore titolo _ 321 Ken Follett codice a zero 128 Umberto Eco il nome della rosa cesarini-bdsi mod relazionale 4 2
RELAZIONE Rappresentazione di una relazione in forma tabellare: Colonne: ogni colonna è associata ad un attributo Righe: ogni riga rappresenta una tupla L ordine delle colonne e l ordine delle righe non hanno importanza (nella definizione si parla di insiemi ) Non ci sono righe duplicate Arietà di una relazione: numero di attributi su cui è definita (numero delle colonne nella tabella) Cardinalità di una relazione: numero delle tuple che la costituiscono (numero delle righe nella tabella) cesarini-bdsi mod relazionale 5 SCHEMA / ISTANZA Schema di relazione: R(X) R è un nome di relazione X = {A 1, A 2, A n } è un insieme di attributi Ogni attributo ha associato il proprio dominio Schema di base di dati: B = {R 1 (X 1 ), R 2 (X 2 ), R k (X k )} insieme di schemi di relazione Istanza di relazione su uno schema R(X): r un insieme di tuple su X Istanza di base di dati su uno schema B: b b = {r 1,, r k } r i istanza di R i (X i ) cesarini-bdsi mod relazionale 6 3
SCHEMA/ISTANZA esempio Schema LIBRO(inv, autore, titolo) dom(inv) = UTENTE(codfisc, nome, cognome, ind) dom(codfisc) = PRESTITO(libro, utente, data-prest, data-rest) dom(libro) = Istanza libro inv autore titolo _ 124 Umberto Eco Il nome della rosa 125 Ken Follett Codice a zero utente codfisc nome cognome ind _ RSSFRN54T60B028I Franco Rossi Prato BNCCHR80B46F051D Chiara Bianchi Empoli prestito libro utente data-prest data-rest _ 125 RSSFRN54T60B028I 24/10/01 3/12/01 cesarini-bdsi mod relazionale 7 notazione X un insieme di attributi t una tupla t[x] valori che la tupla t assume in corrispondenza degli attributi X Es: t: [inv: 125, autore: Ken Follett, titolo: Codice a zero ] t[inv] = 125 t[autore, titolo] = Ken Follett, Codice a zero Nota: quando non necessario non indicheremo esplicitamente la funzione dom cesarini-bdsi mod relazionale 8 4
CHIAVE Chiave candidata: un insieme di attributi X di R tali che In qualsiasi istanza r di R non possono esistere due tuple t e t tali che t[x] = t [X] La proprietà precedente non vale per nessun sottoinsieme proprio di X Attributo primo: attributo che appare almeno in una chiave candidata Chiave primaria: fra le chiavi candidate ne viene scelta una come chiave primaria Es: PERSONA (cod_fisc, num_sanitario, nome, cognome, età) Chiavi candidate: cod_fisc num_sanitario Superchiave: insieme di attributi che include una chiave cesarini-bdsi mod relazionale 9 CHIAVE - esempi AUTORE (nome, nazionalità, data-nascita, data-morte) Chiave: nome, nazionalità, data-nascita, data-morte AUTORE (codice, nome, nazionalità, data-nascita, data-morte) Chiave: codice STUD (matricola, nome, indirizzo) Chiave: matricola se siamo in uno specifico ateneo STUD ( matricola, ateneo, nome, ind) Chiave: matricola, ateneo ad esempio in una biblioteca cui accedono studenti di vari atenei STUD (matricola, ateneo, cod-fisc, nome, ind) Chiave: matricola, ateneo Chiave: cod-fisc cesarini-bdsi mod relazionale 10 5
Schemi su cui discutere la chiave LIBRO (inv, autore, titolo) STUDENTE (matricola, nome, cognome, corso_di_laurea) PRESTITO (libro, studente, data-prestito, data-restituzione) dom(libro.inv) = dom(prestito.libro) dom(studente.matricola) = dom(libro.studente) FORNITORE (codice, nome, indirizzo) ORDINE (numero, fornitore, data) DETTAGLI (num-ordine, articolo, quantità) dom(fornitore.codice) = dom(ordine.fornitore) dom(dettagli.num-ordine) = dom(ordine.numero) PAZIENTE (cod-san, cod-fisc, nome, cognome, indirizzo) MEDICO (codice, nome, cognome, cod-fiscale, p-iva) VISITA (medico, paziente, data) dom(medico.codice) = dom(visita.medico) dom(visita.paziente) =? APPUNTAMENTO (cliente, operatore, servizio, data, ora) cesarini-bdsi mod relazionale 11 VALORI NULLI Assenza di valore in una tupla per un attributo A: valore nullo, NULL NULL D i i Motivazione valori nulli: Valore sconosciuto esiste ma non lo conosciamo Valore inesistente attributo inapplicabile Senza informazione può esistere o no, se esiste non lo conosciamo CITTA -PREF CAMPIONI città ind-prefettura _ Roma via IV novembre Firenze NULL sconosciuto Empoli NULL inapplicabile nome data-nasc data-morte Rossi 17/10/1910 21/9/1982 Bianchi NULL 3/10/1958 sconosciuto Verdi 14/8/1940 NULL sconosciuto inappl. cesarini-bdsi mod relazionale 12 6
VINCOLI DI INTEGRITA Predicato che associa ad ogni istanza (di relazione o di base di dati) il valore VERO o FALSO Istanza che soddisfa i vincoli di integrità: corretta, legale Esempi di vincoli: di dominio 18 voto 30 età 110 di tupla (NOT (lode = si )) OR (voto = 30) di chiave t[cod-fisc] t [cod-fisc] Vincolo di integrità di una entità La chiave primaria di una relazione non può avere valore nullo o una componente nulla Se un sistema permette di definire dei vincoli di integrità, ogni aggiornamento dei dati che li viola viene rifiutato cesarini-bdsi mod relazionale 13 PREDICATI Predicato semplice A op c con A attributo, c dom(a), op {<,<=,=,>,>=,<>} A op B con A e B attributi con domini confrontabili nota: altri operatori utilizzabili in SQL verranno introdotti successivamente Predicato composto predicato che combina predicati semplici tramite gli operatori logici AND, OR, NOT Esempi (voto>=18) AND (voto<=30) invio= posta OR invio= fax (media>=27) AND (ccl= geologia OR ccl= biologia ) stipendio>200 AND anzianità<3 città-nascita=città-residenza I predicati vengono usati per definire vincoli di integrità (di dominio o di tupla) per definire condizioni di selezione (come vedremo) cesarini-bdsi mod relazionale 14 7
VALUTAZIONE DEI PREDICATI Tabelle di verità (v = vero, f = falso) AND v f OR v f NOT v f v v f v v v f v f f f f v f La valutazione di un predicato semplice dà luogo a uno dei valori vero o falso I predicati composti vengono valutati applicando gli operatori logici (cfr. tabelle di verità) ai valori ottenuti dai predicati semplici Ordine di valutazione degli operatori logici: NOT, AND, OR Possono essere usate le parentesi per specificare un preciso ordine di valutazione cesarini-bdsi mod relazionale 15 VINCOLO DI INTEGRITA REFERENZIALE Consideriamo due schemi R1 e R2; siano X = A 1 A 2 A p un insieme di attributi di R1 K = B 1 B 2 B p la chiave primaria di R2 si ha un vincolo di integrità referenziale tra l insieme X di R1 e la chiave K di R2 se in ogni istanza della base di dati si ha che per ogni tupla t 1 di r1 esiste una tupla t 2 di r2 tale che t 1 [A i ] = t 2 [B i ] i = 1, 2, p Nota: i domini di A i e B i devono essere uguali X è chiamata chiave esterna (foreign key) di R1 cesarini-bdsi mod relazionale 16 8
INTEGRITA REFERENZIALE esempi LIBRO (inv, autore, titolo) STUDENTE (matr, nome, cognome, Ccl) PRESTITO (libro, stud, data) PRESTITO.libro ref LIBRO.inv Ogni valore che compare in PRESTITO.libro deve comparire anche in LIBRO.inv, ma non il viceversa I libri che vengono dati in prestito devono essere inventariati nell archivio LIBRO; ci possono essere libri che nessuno ha chiesto in prestito PRESTITO.stud ref LIBRO.inv ORDINE (num, fornitore, data) DETTAGLI (num-ordine, articolo, quantità) FORNITORE (codice, nome, indirizzo) DETTAGLI.num-ordine ref ORDINE.num ORDINE.fornitore ref FORNITORE.codice cesarini-bdsi mod relazionale 17 INTEGRITA REFERENZIALE esempi PAZIENTE (codice-san, nome, cognome, ind, cod-fisc) MEDICO (codice, nome, cognome, fisc, p-iva) VISITA (medico, paziente, data) VISITA.medico ref MEDICO.codice VISITA.paziente ref PAZIENTE.codice-san) STUDENTE (matr, nome, indirizzo, corso_di_laurea) CORSO (codice, nome, prof) ESAME (matr, corso, voto, data) ESAME.matr ref STUDENTE.matr ESAME.corso ref CORSO.codice cesarini-bdsi mod relazionale 18 9
Trattamento del vincolo di integrità referenziale FORNITORE(codice, nome, indirizzo) ORDINE (num, fornitore, data) ORDINE.fornitore ref FORNITORE.codice Inserimento non si può inserire nella tabella ORDINE una riga con un valore di fornitore che non compare come codice in una riga di FORNITORE database valido: FORNITORE codice nome indirizzo ORDINE num fornitore data _ 212 Rossi FI 5 217 6/3/00 217 Bianchi NA 7 212 4/7/01 18 217 5/8/01 L inserimento in ORDINE della tupla [19 218 6/2/02] viene rifiutato dal sistema cesarini-bdsi mod relazionale 19 Trattamento del vincolo di integrità referenziale FORNITORE(codice, nome, indirizzo) ORDINE (num, fornitore, data) ORDINE.fornitore ref FORNITORE.codice FORNITORE codice nome indirizzo ORDINE num fornitore data _ 212 Rossi FI 5 217 6/3/00 217 Bianchi NA 7 212 4/7/01 18 217 5/8/01 Cancellazione - supponiamo di cancellare dalla tabella FORNITORE la riga relativa al fornitore 212 default: la cancellazione viene rifiutata dal sistema perché risulterebbe una violazione del vincolo cascade: la riga viene cancellata ma vengono anche cancellate da ORDINE tutte le righe con fornitore = 212 nota:queste sono le opzioni previste da ACCESS cesarini-bdsi mod relazionale 20 10
Trattamento del vincolo di integrità referenziale FORNITORE(codice, nome, indirizzo) ORDINE (num, fornitore, data) ORDINE.fornitore ref FORNITORE.codice FORNITORE codice nome indirizzo ORDINE num fornitore data _ 212 Rossi FI 5 217 6/3/00 217 Bianchi NA 7 212 4/7/01 18 217 5/8/01 Modifica - supponiamo di modificare nella tabella FORNITORE il codice 217 in 218 default: la modifica viene rifiutata dal sistema perché risulterebbe una violazione del vincolo cascade: la modifica viene accettata ma vengono anche modificati in ORDINE tutti i valori 217 di fornitore in 218 nota:queste sono le opzioni previste da ACCESS cesarini-bdsi mod relazionale 21 11