Informazione incompleta
Le tuple che compongono la base di dati devono essere omogenee. Quindi ad ogni attributo deve essere associato un
valore in ogni tupla. Non sempre questo è possibile.
Es. Persone(Cognome, Nome, Indirizzo, Telefono)Potrebbe esserci una persona che non ha telefono, o di cui non conosciamo l’indirizzo.
Oppure:
Franklin RooseveltDelano
Nome CognomeSecondoNome
Winston Churchill
Charles De Gaulle
Josip Stalin
Informazione incompleta: soluzioni?
• non conviene (anche se spesso si fa) usare valori del dominio (0, stringa nulla, “99”, ...):
– potrebbero non esistere valori “non utilizzati” – valori “non utilizzati” potrebbero diventare significativi – in fase di utilizzo (nei programmi) sarebbe necessario
ogni volta tener conto del “significato” di questi valori
Informazione incompleta
Nel modello relazionale è definito un valore convenzionale, detto valore nullo, che indica la non disponibilità dell’informazione.
Il valore nullo può rappresentare 3 tipi di informazione:– sconosciuta– inesistente– indeterminata (nei DBMS disponibili si
considera in genere questo caso)
Vincoli di Integrità
Non tutte le combinazioni possibili di valori dei domini su cui è definita una relazione sono accettabili.
• Alcuni attributi possono assumere valori in un certo range
• Alcuni attributi devono essere diversi in ogni tupla della stessa relazione
Es. valori dell’attributo Matricola in una relazione del tipo
Studenti(Matricola, Cognome, Nome, DataNascita)
Vincoli di Integrità
• Alcuni valori possono essere incompatibili con altri all’interno della stessa relazioneEs. data la relazione
Esami(Matricola, Voto, Lode, CodCorso)– una stessa coppia Matricola,Corso può apparire una sola
volta– Il valore Vero per l’attributo Lode è corretto solo se Voto=30
• Alcuni valori possono essere incompatibili con i valori di un’altra relazioneEs. Data la relazione Esami e la relazione
Corsi(CodCorso, Titolo, Docente)ogni valore di CodCorso in Esami deve essere un valore esistente di CodCorso in Corsi
Vincoli di Integrità
Sono condizioni, sotto forma di predicati logici, che sono inserite nella base di dati per garantirne la consistenza.
Ogni istanza della base di dati deve soddisfare i vincoli di integrità (il predicato deve assumere valore vero).
Una istanza che soddisfi tutti i vincoli è detta corretta (o lecita o ammissibile)
Vincoli di Integrità
Possono essere di vario tipo:
•Intrarelazionale se coinvolge attributi della stessa relazione
– Vincoli di tuplapossono essere valutati su ciascuna tupla indipendentemente dalle altre
• Vincoli di dominio sono definiti su singoli valori
•Interrelazionale se coinvolge più relazioni
Vincoli di tupla
Possono essere definiti attraverso operatori booleani
Es.
(Voto >= 18) AND (Voto <= 30)
(NOT (lode=Vero)) OR (Voto=30)
oppure, data la relazione
Pagamenti(Data, Importo, Ritenute, Netto)
Netto = Importo - Ritenute
Identificazione delle tuple
– non ci sono due tuple con lo stesso valore sull’attributo Matricola
– non ci sono due tuple uguali su tutti e tre gli attributi Cognome, Nome e Data di Nascita
Matricola276557876365432
NomeMario
PieroMario87654
67653
Mario
CognomeRossi
NeriNeri
Rossi
Rossi Piero
CorsoIng Inf
Ing MeccIng Inf
Ing Inf
Ing Mecc
Nascita5/12/78
10/7/793/11/76
3/11/76
5/12/78
Chiavi
Una chiave è un insieme minimale di attributi utilizzato per identificare univocamente le tuple di una relazione.
Formalmente:
Un insieme di attributi K è superchiave per una relazione r se r non contiene due tuple t1 e t2 tali che
t1[K] = t2[K]
Un insieme di attributi K è chiave per r se è superchiave minimale, cioè se non esiste un’altra superchiave K’ che sia sottoinsieme di K
Una chiave
• Matricola è una chiave:– è superchiave– contiene un solo attributo e quindi è minimale
Matricola276557876365432
NomeMario
PieroMario87654
67653
Mario
CognomeRossi
NeriNeri
Rossi
Rossi Piero
CorsoIng Inf
Ing MeccIng Inf
Ing Inf
Ing Mecc
Nascita5/12/78
10/7/793/11/76
3/11/76
5/12/78
Chiavi
• Una chiave è tale se soddisfa la definizione per tutte le possibili tuple appartenenti alla relazione, e non solo per quelle che effettivamente appaiono come istanze della relazione stessa.
• Quindi la chiave è legata allo schema della relazione.
• Ogni relazione, per definizione, possiede una chiave.
Infatti l’insieme X su cui è definita è sicuramente superchiave.
Chiavi
La presenza di valori nulli in una chiave può creare può vanificare la proprietà di unicità delle tuple identificate da una certa chiave.
Si impone quindi che almeno una chiave non contenga valori nulli. Tale chiave è detta chiave primaria.
Di solito la chiave primaria è sottolineata nello schema di una relazione.
Es.
Studenti(Matricola, Cognome, Nome, Nascita, Corso)
Vincoli di Integrità Referenziale
In alcuni casi (corrispondenze fra relazioni) è necessario che i valori degli attributi di una relazione R1 si possano trovare anche in attributi corrispondenti di R2.
Un vincolo di integrità referenziale (o foreign key) fra un insieme di attributi X di R1 e un’altra relazione R2 è soddisfatto se i valori su X di ciascuna tupla di R1 compaiono come valori della chiave (primaria) di R2.
Non tutti i DBMS consentono di definire una chiave come primaria, in presenza di più chiavi. Quindi sarà necessario esprimere il vincolo specificando per esteso gli attributi dell’una e dell’altra relazione collegati da tale vincolo.
Algebra Relazionale
Linguaggio procedurale, in cui le operazioni vengono descritte descrivendo la procedura per ottenere la soluzione.
Operatori:
•unione intersezione differenza derivati dalla teoria degli insiemi
•ridenominazione selezione proiezione specifici dell’algebra relazionale
•join che può assumere diverse forme (naturale, theta-join, prodotto cartesiano)
Operatori derivati dagli insiemi
Le relazioni sono insiemi e quindi è naturale estendere ad esse le operazioni relative.
Tuttavia le relazioni sono insiemi di tuple omogenee, e quindi ha senso definire ed applicare tali operatori solo a tuple definite sugli stessi attributi.
Es. l’unione fra due relazioni su tuple non omogenee non è una relazione.
Operatori derivati dagli insiemi
• UnioneL’unione fra due relazioni r1 e r2 definite sullo stesso insieme di attributi X è indicata con r1 r2 ed è una relazione su X contenente le tuple che appartengono a r1 o r2 oppure ad entrambe.
• IntersezioneL’intersezione fra due relazioni r1 e r2 definite sullo stesso insieme di attributi X è indicata con r1 r2 ed è una relazione su X contenente le tuple che appartengono sia a r1 che a r2.
• DifferenzaLa differenza fra due relazioni r1 e r2 definite sullo stesso insieme di attributi X è indicata con r1 - r2 ed è una relazione su X contenente le tuple che appartengono a r1 e non a r2.
Laureati
Matricola
74329824
Età
5445
Nome
NeriVerdi
7274 42Rossi
Quadri
Matricola
74329824
9297Età
5445
33Nome
NeriVerdi
Neri
Laureati Quadri
Matricola EtàNome
7432 54Neri9824 45Verdi9297 33Neri
7274 42Rossi7432 54Neri9824 45Verdi
7274 42Rossi7432 54Neri9824 45Verdi9297 33Neri
7432 54Neri9824 45Verdi9297 33Neri
7274 42Rossi
Unione
Laureati
Matricola
74329824
Età
5445
Nome
NeriVerdi
7274 42Rossi
Quadri
Matricola
74329824
9297Età
5445
33Nome
NeriVerdi
Neri
Laureati Quadri
Matricola EtàNome7432 54Neri9824 45Verdi
7432 54Neri9824 45Verdi
7432 54Neri9824 45Verdi
7432 54Neri9824 45Verdi
Intersezione
Laureati
Matricola EtàNome
7432 54Neri9824 45Verdi
7274 42Rossi
Quadri
Matricola
74329824
9297Età
5445
33Nome
NeriVerdi
Neri
Laureati – Quadri
Matricola EtàNome
7432 54Neri9824 45Verdi
7274 42Rossi7432 54Neri9824 45Verdi
7274 42Rossi
Differenza
Ridenominazione
E’ un operatore che consente di modificare i nome di un attributo per poterlo associare ad un altro attributo in una operazione algebrica.
Si indica con nuovonome vecchionome (Relazione)
Es. date le relazioni
Paternità(Padre, Figlio) e Maternità(Madre, Figlio)
è possibile ottenere Genitore Padre(Paternità) Genitore Madre (Maternità)
RENGenitore Padre (Paternità)
RENGenitore Madre (Maternità)
Genitore Figlio
Adamo CainoAbramo Isacco
Adamo Abele
Genitore Figlio
Eva SetSara Isacco
Eva Abele
Genitore Figlio
Adamo CainoAbramo Isacco
Adamo Abele
Eva SetSara Isacco
Eva Abele
RENGenitore Padre (Paternità)
RENGenitore Madre (Maternità)
Selezione e Proiezione
Le operazioni di selezione e di proiezione si applicano ad una relazione e ne restituiscono una porzione.
Possono essere considerate ortogonali o complementari, in quanto una opera sulle righe e l’altra sulle colonne.
La selezione produce un insieme di tuple, su tutti gli attributi.
La proiezione produce un risultato definito su un insieme di attributi, cui contribuiscono tutte le tuple.
Selezione
La selezione produce una nuova relazione definita sugli stessi attributi, contenente solamente le tuple di una relazione che soddisfano una specifica condizione di selezione.
Si indica con F ( r )
dove:
F è una condizione da verificare
r è la relazione a cui la selezione è applicata
Quindi, F ( r ) produce una relazione sugli stessi attributi di r contenente le tuple su cui F è vera.
Selezione, sintassi e semantica
• sintassi
SEL Condizione (Operando)
– Condizione: espressione booleana (come quelle dei vincoli di ennupla)
• semantica– il risultato contiene le tuple dell'operando che
soddisfano la condizione
Selezione
F è una formula preposizionale su X, cioè una formula ottenuta combinando con i simboli (and) (or) (not) espressioni del tipo
A B o A c
dove :• è un operatore di confronto (, , , , )• A e B sono attributi di X su cui i confronto abbia senso• c è una costante tale che il confronto con A sia definito
E’ definito un valore di verità di F su una tupla t:• A B è vera se e solo se t[A] t[B] è vero• A c è vera se t[A] c è vera
• F1 F2, F1 F2, F hanno l’usuale significato
Impiegati Cognome Filiale StipendioMatricola
Neri Milano 645998Rossi Roma 557309
Neri Napoli 645698Milano Milano 449553
Cognome Filiale StipendioMatricola
Neri Milano 645998Rossi Roma 557309
Neri Napoli 645698Milano Milano 449553
Impiegati (che guadagnano piu’ di 50)
Milano Milano 449553 Neri Napoli 645698
SELStipendio > 50 (Impiegati)
Selezione con valori nulli
Cognome Filiale EtàMatricola
Neri Milano 455998Rossi Roma 327309
Bruni Milano NULL9553
Impiegati
SEL Età>30 (Persone) SEL Età30 (Persone) Persone
• Perché? Perché le selezioni vengono valutate separatamente!
• Ma anche
SEL Età>30 Età30 (Persone) Persone
• Perché? Perché anche le condizioni atomiche vengono valutate separatamente!
Selezione con valori nulli
Per riferirsi ai valori nulli esistono forme apposite di condizioni:
IS NULLIS NOT NULL
SEL Età>30 (Persone) SEL Età30 (Persone) SEL Età IS NULL
(Persone) =
SEL Età>30 Età30 Età IS NULL (Persone) =
Persone
Proiezione
Dati una relazione r(X) e un sottoinsieme Y di X
la proiezione di r su Y si indica con Y ( r ) ed è l’insieme di tuple su Y ottenute dalle tuple di r considerando solo i valori su Y.
Y ( r ) = { t[Y] | t r }
Una proiezione ha un numero di tuple minore o uguale rispetto alla relazione r cui è applicata. Il numero di tuple è uguale se e solo se Y è superchiave per r.
Proiezione• operatore monadico• produce un risultato che
– ha parte degli attributi dell'operando– contiene tuple cui contribuiscono tutte le tuple
dell'operando
• sintassiPROJ ListaAttributi (Operando)
• semanticail risultato contiene le tuple ottenute da tutte le tuple dell'operando ristrette agli attributi nella lista
Cognome Filiale StipendioMatricola
Neri Milano 645998Neri Napoli 557309
Rossi Roma 645698Rossi Roma 449553
– visualizzare matricola e cognome di tutti gli impiegati
PROJ Matricola, Cognome (Impiegati)
Cognome Filiale StipendioMatricola
Neri Milano 645998Neri Napoli 557309
Rossi Roma 645698Rossi Roma 449553
PROJ Cognome, Filiale (Impiegati)
Join
E’ l’operatore più caratteristico, che evidenzia la proprietà del modello relazionale di essere basato su valori.
L’operatore di join (naturale) correla dati in relazioni diverse, producendo una relazione definita sull’unione degli insiemi di attributi degli operandi, le cui tuple sono ottenute combinando le tuple degli operandi con valori uguali su attributi comuni.
Join
Il join naturale r1 r2 di r1(X1) e r2(X2) è una relazione definita su X1X2 ( che si può scrivere X1X2 ) :
r1 r2 = { t su X1X2 | t[X1] r1 e t[X2] r2}
Il grado della relazione ottenuta è minore o uguale al grado della somma dei gradi delle due relazioni in quanto gli attributi omonimi compaiono una sola volta.
Se X1 X2 è vuoto il join naturale equivale al prodotto cartesiano fra le relazioni.
Se X1=X2 il join naturale equivale all’intersezione fra le relazioni
Join
Se ciascuna tupla di ciascuno degli operandi contribuisce ad almeno una tupla del risultato il join si dice completo.
Se per alcune tuple non è verificata la corrispondenza e non contribuiscono al risultato, le tuple si dicono dangling.
Ai due estremi si pongono il join vuoto in cui nessuna tupla degli operandi è combinabile, e quello in cui ciascuna delle tuple di un operando è combinabile con tutte le tuple dell’altro. In questo caso la cardinalità della relazione risultante è pari al prodotto della
cardinalità degli operandi
Join
Proprietà
• se il join di r1 e r2 è completo allora contiene un numero di tuple pari almeno al massimo fra |r1|e |r2|
• se X1X2 contiene una chiave per r2, allora il join di r1 (X1) e r2(X2) contiene al più |r1| tuple.
• r1 r2 = r1 r2 il join è commutativo
• (r1 r2) r3 = r1 (r2 r3) il join è associativoQuindi sequenze di join possono essere scritte senza parentesi
Join
Se si devono correlare attributi con nome diverso è possibile fare il theta-join, definito come un prodotto cartesiano seguito da una selezione
r1 F r2 = F (r1 r2 )
Se F è una relazione di uguaglianza, con un attributo della pima relazione e uno della seconda, allora siamo in presenza di un equi-join.
Sono importanti formalmente:
il join naturale è basato sui nomi degli attributi
equi-join e theta-join sono basati sui valori