org
Base di dati
Capitolo 1:
Introduzione
24/09/2002
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 2
Basi di dati, Capitolo 1
• modelli per l'organizzazione dei dati • studio individuale, con riflessione sui
• linguaggi per l'utilizzo dei dati concetti e riferimento alle esperienze
personali
• sistemi per la gestione dei dati
• metodologie di progettazione di basi • svolgimento di esercizi
di dati • sviluppo di progetti, con
realizzazione con opportuno
strumento (MS Access, Oracle, DB2,
SQLServer, Informix, …)
Il corso
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Sistema organizzativo e
Sistemi informativi e automazione
sistema informativo
• Il concetto di “sistema informativo”
• Il sistema informativo è parte del è indipendente da qualsiasi
sistema organizzativo automatizzazione:
• Il sistema informativo – esistono organizzazioni la cui
esegue/gestisce processi informativi ragion d’essere è la gestione di
(cioè i processi che coinvolgono informazioni (p. es. servizi
informazioni) anagrafici e banche) e che operano
da secoli
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Nelle attività standardizzate dei sistemi • Nei sistemi informatici (e non solo),
informativi complessi, sono state le informazioni vengono
introdotte col tempo forme di
organizzazione e codifica delle rappresentate in modo essenziale,
informazioni spartano: attraverso i dati
• Ad esempio, nei servizi anagrafici si è
iniziato con registrazioni discorsive e poi
– nome e cognome
– estremi anagrafici
– codice fiscale
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Le basi di dati sono ... grandi Le basi di dati sono ... persistenti
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Problemi
• Ridondanza:
– informazioni ripetute
• Rischio di incoerenza:
– le versioni possono non coincidere
Base di dati
Gestione Archivio 2: Gestione
ricevimento ricevimento ricevimento
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Nei programmi tradizionali che accedono • Rappresentazioni dei dati a livelli diversi
a file, ogni programma contiene una – permettono l’indipendenza dei dati dalla
descrizione della struttura del file stesso, rappresentazione fisica:
con i conseguenti rischi di incoerenza fra
• i programmi fanno riferimento alla
le descrizioni (ripetute in ciascun struttura a livello più alto, e le
programma) e i file stessi rappresentazioni sottostanti possono
• Nei DBMS, esiste una porzione della base essere modificate senza necessità di
di dati (il catalogo o dizionario) che modifica dei programmi
contiene una descrizione centralizzata dei – Precisiamo attraverso il concetto di
dati, che può essere utilizzata dai vari
programmi • modello dei dati
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 45 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 46
Basi di dati, Capitolo 1 Basi di dati, Capitolo 1
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
9
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Architettura standard
Indipendenza dei dati (ANSI/SPARC)
a tre livelli per DBMS
• Il livello logico è indipendente da utente
utente utente utente utente
quello fisico:
Schema Schema Schema
– una tabella è utilizzata nello stesso esterno esterno esterno
modo qualunque sia la sua
realizzazione fisica (che può anche Schema logico
cambiare nel tempo)
• Perciò in questo corso vedremo solo Schema interno
il livello logico e non quello fisico
BD
10
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
11
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Un'operazione DDL
Personaggi e interpreti
(sullo schema)
• progettisti e realizzatori di DBMS
• progettisti della base di dati e
CREATE TABLE orario ( amministratori della base di dati (DBA)
insegnamento CHAR(20) , • progettisti e programmatori di applicazioni
docente CHAR(20) , • utenti
aula CHAR(4) , – utenti finali (terminalisti): eseguono
ora CHAR(5) ) applicazioni predefinite (transazioni)
– utenti casuali: eseguono operazioni non
previste a priori, usando linguaggi
interattivi
12
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Contro Esercizi su
• costo dei prodotti e della transizione verso
di essi Basi di dati e DBMS
• non scorporabilità delle funzionalità (con
riduzione di efficienza)
13
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Quali delle seguenti affermazioni sono vere? • Quali delle seguenti affermazioni sono vere?
– l'indipendenza dei dati permette di scrivere – il fatto che le basi di dati siano condivise
programmi senza conoscere le strutture favorisce l'efficienza dei programmi che le
fisiche dei dati utilizzano
– l'indipendenza dei dati permette di modificare – il fatto che le basi di dati siano condivise
le strutture fisiche dei dati senza dover permette di ridurre ridondanze e inconsistenze
modificare i programmi che accedono alla – il fatto che le basi di dati siano persistenti ne
base di dati garantisce l'affidabilità
– l'indipendenza dei dati permette di scrivere – il fatto che le basi di dati siano persistenti
programmi conoscendo solo lo schema favorisce l'efficienza dei programmi
concettuale della BD – il fatto che le basi di dati siano condivise rende
– l'indipendenza dei dati permette di formulare necessaria la gestione della privatezza e delle
interrogazioni senza conoscere le strutture autorizzazioni
fisiche
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 79 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 80
Basi di dati, Capitolo 1 Basi di dati, Capitolo 1
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 83
Basi di dati, Capitolo 1
14
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 2
Basi di dati, Capitolo 2
• relazione matematica : come nella teoria • D1, …, Dn (n insiemi anche non distinti)
degli insiemi • prodotto cartesiano D1×…×Dn:
• relazione (dall’inglese relationship) che • l’insieme di tutte le n-uple (d1, …, dn)
rappresenta una classe di fatti, nel tali che d1∈D1, …, dn ∈ Dn
modello Entity-Relationship; tradotto • relazione matematica su D1, …, Dn:
anche con associazione o correlazione • un sottoinsieme di D1×…×Dn.
• relazione secondo il modello relazionale • D1, …, Dn sono i domini della relazione
dei dati
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• La struttura è posizionale
• Una tabella rappresenta una relazione se • i riferimenti fra dati in relazioni diverse
• i valori di ogni colonna sono fra loro sono rappresentati per mezzo di valori
omogenei dei domini che compaiono nelle ennuple
• le righe sono diverse fra loro
• le intestazioni delle colonne sono diverse
tra loro
• In una tabella che rappresenta una relazione
• l’ordinamento tra le righe è irrilevante
• l’ordinamento tra le colonne è irrilevante
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
studenti Matricola Cognome Nome Data di nascita studenti Matricola Cognome Nome Data di nascita
6554 Rossi Mario 05/12/1978 6554 Rossi Mario 05/12/1978
8765 Neri Paolo 03/11/1976 8765 Neri Paolo 03/11/1976
9283 Verdi Luisa 12/11/1979 9283 Verdi Luisa 12/11/1979
3456 Rossi Maria 01/02/1978 3456 Rossi Maria 01/02/1978
esami Studente Voto Corso esami Studente Voto Corso
3456 30 04 30
3456 24 02 24
9283 28 01 28
6554 26 01 26
corsi Codice Titolo Docente corsi Codice Titolo Docente
01 Analisi Mario 01 Analisi Mario
02 Chimica Bruni 02 Chimica Bruni
04 Chimica Verdi 04 Chimica Verdi
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 13 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 14
Basi di dati, Capitolo 2 Basi di dati, Capitolo 2
Definizioni, 2 Definizioni, 3
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Informazione incompleta:
Informazione incompleta: soluzioni?
motivazioni
• non conviene (anche se spesso si fa) usare
Nome SecondoNome Cognome valori del dominio (0, stringa nulla, “99”, ...):
Franklin Delano Roosevelt • potrebbero non esistere valori “non
utilizzati”
Winston Churchill
Charles De Gaulle • valori “non utilizzati” potrebbero diventare
significativi
Josip Stalin
• in fase di utilizzo (nei programmi) sarebbe
necessario ogni volta tener conto del
“significato” di questi valori
Informazione incompleta
Troppi valori nulli
nel modello relazionale
studenti Matricola Cognome Nome Data di nascita
• Tecnica rudimentale ma efficace: 6554 Rossi Mario 05/12/1978
• valore nullo: denota l’assenza di un valore 9283 Verdi Luisa 12/11/1979
del dominio (e non è un valore del dominio) NULL Rossi Maria 01/02/1978
• t[A], per ogni attributo A, è un valore del esami Studente Voto Corso
dominio dom(A) oppure il valore nullo NULL NULL 30 NULL
• Si possono (e debbono) imporre restrizioni NULL 24 02
9283 28 01
sulla presenza di valori nulli
corsi Codice Titolo Docente
01 Analisi Mario
02 NULL NULL
04 Chimica Verdi
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 27 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 28
Basi di dati, Capitolo 2 Basi di dati, Capitolo 2
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Tipi di vincoli
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Chiave primaria
Matricola Cognome Nome Corso Nascita
NULL NULL
NULL Mario Ing Inf 5/12/78 • Chiave su cui non sono ammessi nulli
78763 Rossi Mario Ing Civile 3/11/76 • Notazione: sottolineatura
65432 Neri Piero Ing Mecc 10/7/79
Matricola Cognome Nome Corso Nascita
87654
87654 Neri
Neri Mario
Mario Ing
Ing Inf
Inf NULL
NULL 86765 NULL Mario Ing Inf 5/12/78
NULL
NULL Neri
Neri Mario
Mario NULL
NULL 5/12/78
5/12/78 78763 Rossi Mario Ing Civile 3/11/76
65432 Neri Piero Ing Mecc 10/7/79
• La presenza di valori nulli nelle chiavi 87654 Neri Mario Ing Inf NULL
deve essere limitata
43289 Neri Mario NULL 5/12/78
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 51 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 52
Basi di dati, Capitolo 2 Basi di dati, Capitolo 2
Infrazioni
Integrità referenziale Codice Data Vigile Prov Numero
34321 1/2/95 3987 MI 39548K
• informazioni in relazioni diverse sono 53524 4/3/95 3295 TO E39548
correlate attraverso valori comuni 64521 5/4/96 3295 PR 839548
• in particolare, valori delle chiavi 73321 5/2/98 9345 PR 839548
(primarie)
• le correlazioni debbono essere Vigili Matricola Cognome Nome
"coerenti" 3987 Rossi Luca
3295 Neri Piero
9345 Neri Mario
9
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
10
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Progetti Codice Inizio Durata Costo Auto Prov Numero Cognome Nome
IDEA 01/2000 36 200 MI 39548K Rossi Mario
XYZ 07/2001 24 120 TO E39548 Rossi Mario
BOH 09/2001 24 150 PR 839548 Neri Luca
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 65
Basi di dati, Capitolo 2
11
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Linguaggi di interrogazione
Linguaggi di interrogazione
per basi di dati relazionali
• Dichiarativi • Algebra relazionale: procedurale
• specificano le proprietà del risultato • Calcolo relazionale:
("che cosa") dichiarativo (teorico)
• Procedurali • SQL (Structured Query Language):
• specificano le modalità di parzialmente dichiarativo (reale)
generazione del risultato ("come") • QBE (Query by Example):
dichiarativo (reale)
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Intersezione Differenza
Paternità ∪ Maternità
??
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Impiegati
Selezione
Matricola Cognome Filiale Stipendio
7309 Rossi Roma 55
• operatore monadico 5998 Neri Milano 64
• produce un risultato che 9553 Milano Milano 44
5698 Neri Napoli 64
• ha lo stesso schema dell'operando
• contiene un sottoinsieme delle • impiegati che
ennuple dell'operando, • guadagnano più di 50
• quelle che soddisfano una condizione • guadagnano più di 50 e lavorano a Milano
• hanno lo stesso nome della filiale presso
cui lavorano
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• sintassi
SEL Condizione (Operando) Impiegati
• Condizione: espressione booleana Matricola Cognome Filiale Stipendio
7309 Rossi Roma 55
(come quelle dei vincoli di ennupla)
5998 Neri Milano 64
• semantica 9553
5698 Milano
Neri Milano
Napoli 44
64
• il risultato contiene le ennuple 5698 Neri Napoli 64
dell'operando che soddisfano la SELStipendio > 50 (Impiegati)
condizione
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 19 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 20
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
• impiegati che guadagnano più di 50 • impiegati che hanno lo stesso nome della
e lavorano a Milano filiale presso cui lavorano
Impiegati Impiegati
Matricola Cognome Filiale Stipendio Matricola Cognome Filiale Stipendio
7309
5998 Rossi
Neri Milano
Roma 55
64 7309
9553 Milano
Rossi Milano
Roma 55
44
5998 Neri Milano 64 5998 Neri Milano 64
9553 Milano Milano 44 9553 Milano Milano 44
5698 Neri Napoli 64 5698 Neri Napoli 64
SEL Stipendio > 50 AND Filiale = 'Milano' (Impiegati) SEL Cognome = Filiale (Impiegati)
Selezione e proiezione
selezione
• operatori "ortogonali"
• selezione :
• decomposizione orizzontale
proiezione
• proiezione :
• decomposizione verticale
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Impiegati
Proiezione
Matricola Cognome Filiale Stipendio
7309 Neri Napoli 55
• operatore monadico 5998 Neri Milano 64
• produce un risultato che 9553 Rossi Roma 44
5698 Rossi Roma 64
• ha parte degli attributi dell'operando
• per tutti gli impiegati:
• contiene ennuple cui contribuiscono
• matricola e cognome
tutte le ennuple dell'operando
• cognome e filiale
• sintassi
PROJ ListaAttributi (Operando) Matricola Cognome Filiale Stipendio
• semantica 7309 Neri Napoli 55
5998 Neri Milano 64
• il risultato contiene le ennuple 9553 Rossi Roma 44
ottenute da tutte le ennuple 5698 Rossi Roma 64
dell'operando ristrette agli attributi
nella lista PROJ Matricola, Cognome (Impiegati)
• una proiezione
Matricola Cognome Filiale Stipendio • contiene al più tante ennuple quante
7309 Neri Napoli 55 l'operando
5998 Neri Milano 64 • può contenerne di meno
9553 Rossi Roma 44
5698 Rossi Roma 64
• se X è una superchiave di R, allora
PROJ Cognome, Filiale (Impiegati) PROJX (R) contiene esattamente tante
ennuple quante R
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 29 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 30
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Join
• Combinando selezione e proiezione, • il join è l'operatore più interessante
possiamo estrarre informazioni da dell'algebra relazionale
una relazione • permette di correlare dati in relazioni
• non possiamo però correlare diverse
informazioni presenti in relazioni
diverse
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Join e proiezioni
Impiegati Reparti
Impiegato Reparto Reparto Capo Impiegato Reparto Reparto Capo
Rossi A B Mori Rossi A B Mori
Neri B C Bruni Neri B C Bruni
Bianchi B Bianchi B
Proiezioni e join
Impiegato Reparto Capo Join e proiezioni
Neri B Mori
Bianchi B Bruni • R 1 (X 1), R 2(X 2 )
Verdi A Bini
Impiegato Reparto Reparto Capo
Neri B B Mori PROJX1 (R 1 JOIN R2 ) ⊆ R 1
Bianchi B B Bruni
Verdi A A Bini • R(X), X = X 1 ∪ X2
Impiegato Reparto Capo
Neri B Mori
Bianchi B Bruni (PROJX 1 (R)) JOIN (PROJX 2 (R)) ⊇ R
Neri B Bruni
Bianchi B Mori
24/09/2002
Verdi A
Atzeni-Ceri-Paraboschi-Torlone,
Bini 53 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 54
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
9
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Impiegati Reparti
Prodotto cartesiano Impiegato Reparto Codice Capo
Rossi A A Mori
Neri B B Bruni
Bianchi B
• un join naturale su relazioni senza
Impiegati JOIN Reparti
attributi in comune
Impiegato Reparto Codice Capo
• contiene sempre un numero di ennuple
Rossi A A Mori
pari al prodotto delle cardinalità degli Rossi A B Bruni
operandi (le ennuple sono tutte Neri B A Mori
combinabili ) Neri B B Bruni
Bianchi B A Mori
Bianchi B B Bruni
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 55 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 56
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
Perché "theta-join"?
• Il prodotto cartesiano, in pratica, ha
senso (quasi) solo se seguito da • La condizione C è spesso una congiunzione
selezione: (AND) di atomi di confronto A1ϑ A2 dove ϑ è
SELCondizione (R1 JOIN R2) uno degli operatori di confronto (=, >, <, …)
• L'operazione viene chiamata theta -join e • se l'operatore è sempre l'uguaglianza (=)
allora si parla di equi-join
indicata con
R1 JOINCondizione R2
Impiegati Reparti
Impiegato Reparto Codice Capo
Rossi A A Mori
Neri B B Bruni Impiegati Reparti
Bianchi B Impiegato Reparto Reparto Capo
Impiegati JOINReparto=Codice Reparti Rossi A A Mori
Neri B B Bruni
Impiegato Reparto Codice Capo Bianchi B
Rossi A A Mori
Rossi
Neri A
B B Bruni
Bianchi
Neri B A
B Bruni
Mori Impiegati JOIN Reparti
Neri B B Bruni
Bianchi B A Mori
Bianchi B B Bruni
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 59 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 60
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
10
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Esempi
Join naturale ed equi-join
Impiegati Matricola Nome Età Stipendio
7309
Rossi 34 45
Impiegati Reparti 5998
Bianchi 37 38
Impiegato Reparto Reparto Capo 9553
Neri 42 35
5698
Bruni 43 42
4076
Mori 45 50
Impiegati JOIN Reparti 8123
Lupi 46 60
Supervisione Impiegato Capo
PROJImpiegato,Reparto,Capo ( SEL Reparto=Codice 7309 5698
5998 5698
( Impiegati JOINRENCodice ← Reparto (Reparti) )) 9553 4076
5698 4076
4076 8123
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 61 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 62
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
11
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Trovare le matricole dei capi degli • Trovare nome e stipendio dei capi degli
impiegati che guadagnano più di 40 impiegati che guadagnano più di 40
milioni milioni
• Trovare gli impiegati che guadagnano più • Trovare le matricole dei capi i cui
del proprio capo, mostrando matricola, impiegati guadagnano tutti più di 40
nome e stipendio dell'impiegato e del milioni
capo
PROJCapo (Supervisione ) -
PROJMatr,Nome,Stip,MatrC,NomeC,StipC PROJCapo (Supervisione
(SEL Stipendio>StipC (
JOIN Impiegato=Matricola
RENMatrC,NomeC,StipC,Et àC ← Matr,Nome,Stip,Età(Impiegati)
JOIN MatrC=Capo
(SEL Stipendio ≤ 40(Impiegati)))
(Supervisione JOIN Impiegato=Matricola Impiegati)))
12
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
13
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Schema interno
BD
14
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
15
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
PROJMatr,Nome,Stip,MatrC,NomeC,StipC
(SEL Stip>StipC( Calcolo relazionale
RENMatrC,NomeC,StipC,Et àC ← Matr,Nome,Stip,Età(Imp)
JOIN MatrC=Capo • Una famiglia di linguaggi dichiarativi,
(Sup JOIN Imp=Matr Imp)))
basati sul calcolo dei predicati del primo
ordine
Capi := Imp
• Diverse versioni:
PROJImp.Matr, Imp.Nome, Imp.Stip,Capi.Matr,Capi.Nome, Capi.Stip • calcolo relazionale su domini
(SEL Imp.Stip>Capi.Stip(
• calcolo su ennuple con dichiarazioni
Capi JOIN Capi.Matr=Capo (Sup JOIN Imp=Imp.Matr Imp)))
di range
SEL Stipendio>40(Impiegati)
16
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Esempio 0b Esempio 1
• Trovare matricola, nome ed età di tutti gli impiegati • Trovare matricola, nome ed età degli
impiegati che guadagnano più di 40 milioni
PROJ Matricola, Nome, Età(Impiegati )
PROJMatricola, Nome, Età(SEL Stipendio>40(Impiegati))
{ Matricola: m, Nome: n, Età: e |
∃s (Impiegati(Matricola: m, Nome: n, Età: e, Stipendio:
s)} { Matricola: m, Nome: n, Età: e |
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)
{ Matricola: m, Nome: n, Età: e | ∧ s > 40 }
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)}
Esempio 2 Esempio 3
• Trovare le matricole dei capi degli impiegati • Trovare nome e stipendio dei capi degli impiegati che
guadagnano più di 40 milioni
che guadagnano più di 40 milioni
PROJ NomeC,StipC
PROJCapo (Supervisione JOINImpiegato=Matricola (RENMatrC,NomeC,StipC,Et àC← Matr,Nome, Stip,Et à(Impiegati )
(SEL Stipendio>40(Impiegati))) JOIN MatrC=Capo
(Supervisione JOIN Impiegato=Matricola
(SELStipendio>40(Impiegati))))
{ Capo: c | Supervisione(Capo:c,Impiegato:m) ∧
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) { NomeC: nc, StipC: sc |
∧ s > 40 } Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) ∧
s > 40 ∧ Supervisione (Capo:c,Impiegato:m) ∧
Impiegati(Matricola:c, Nome:nc, Età:ec, Stipendio: sc) }
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 99 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 100
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
Esempio 4 Esempio 5
• Trovare gli impiegati che guadagnano più del • Trovare matricola e nome dei capi i cui impiegati guadagnano
rispettivo capo, mostrando matricola, nome e tutti più di 40 milioni.
stipendio di ciascuno di essi e del capo
PROJ Matr,Nome, Stip,MatrC,NomeC,StipC PROJMatricola ,Nome (Impiegati JOIN Matricola =Capo
(SELStipendio>StipC(RENMatrC,NomeC,S t i p C,Età C ← (PROJCapo (Supervisione) -
PROJCapo (Supervisione JOIN Impiegato=Matricola (
Matr,Nome, Stip,Età(Impiegati )
SELStipendio ≤ 40(Impiegati))))
JOIN MatrC=Capo
(Supervisione JOIN Impiegato=Matricola ( (Impiegati ))))
{Matricola: c, Nome: n |
Impiegati(Matricola: c, Nome: n, Età: e, Stipendio: s) ∧
{ Matr: m, Nome: n, Stip: s, MatrC: c, NomeC: nc, StipC: sc |
Supervisione(Capo:c, Impiegato:m) ∧
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) ∧
Supervisione(Capo:c,Impiegato:m) ∧ ¬ ∃m'(∃n'(∃e'(∃s'(Impiegati( Matr: m', Nome: n', Età: e', Stip: s') ∧
Impiegati(Matricola: c, Nome: nc, Età: ec, Stipendio: sc) ∧ s > sc} Supervisione(Capo:c, Impiegato:m') ∧ s' ≤ 40))))}
17
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Quantificatori esistenziali o
Calcolo su domini, discussione
universali?
• Sono intercambiabili, per le leggi di De Morgan: • Pregi:
• dichiaratività
{Matricola: c, Nome: n | • Difetti:
Impiegati(Matricola: c, Nome: n, Età: e, Stipendio: s) ∧ • "verbosità": tante variabili!
Supervisione(Capo:c, Impiegato:m) ∧
¬ ∃m'(∃n'(∃e'(∃s'(Impiegati( Matr: m', Nome: n', Età: e', Stip: s') ∧ • espressioni senza senso:
Supervisione(Capo:c, Impiegato:m') ∧ s' ≤ 40))))} { A: x | ¬ R(A: x) }
{ A: x, B: y | R(A: x) }
{Matricola: c, Nome: n | { A: x, B: y | R(A: x) ∧ y=y }
Impiegati(Matricola: c, Nome: n, Età: e, Stipendio: s) ∧ queste espressioni sono "dipendenti dal dominio"
Supervisione(Capo:c, Impiegato:m) ∧ e vorremmo evitarle;
∀m'(∀n'(∀e'(∀s'(¬(Impiegati( Matr:m', Nome:n', Età:e', Stip:s') ∧
nell'algebra espressioni come queste non sono
Supervisione(Capo:c, Impiegato:m')) ∨ s' > 40))))}
formulabili: l'algebra è indipendente dal dominio
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 103 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 104
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
Calcolo su ennuple
Calcolo e algebra
con dichiarazioni di range
• Calcolo e algebra sono "equivalenti " • Per superare le limitazioni del calcolo su
• per ogni espressione del calcolo relazionale che domini:
sia indipendente dal dominio esiste • dobbiamo "ridurre" le variabili; un buon
un'espressione dell'algebra relazionale
equivalente a essa modo: una variabile per ciascuna ennupla
• per ogni espressione dell'algebra relazionale • far si' che i valori provengano dalla base di
esiste un'espressione del calcolo relazionale dati
equivalente a essa (e di conseguenza • Il calcolo su ennuple con dichiarazioni di
indipendente dal dominio) range risponde ad entrambe le esigenze
Calcolo su ennuple
Esempio 0a
con dichiarazioni di range, sintassi
• Le espressioni hanno la forma: • Trovare matricola, nome, età e stipendio degli
{ TargetList | RangeList| Formula } impiegati che guadagnano più di 40 milioni
• RangeList elenca le variabili libere della Formula
ognuna con il relativo campo di variabilità (una SELStipendio>40(Impiegati)
relazione)
• TargetList ha elementi del tipo Y: x.Z (oppure x.Z o
anche x.*) { Matricola: m, Nome: n, Età: e, Stipendio: s |
• Formula ha: Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)
• atomi di confronto x.A ϑ c, x.A ϑ y.B ∧ s > 40 }
• connettivi
• quantificatori che associano un range alle { i.* | i(Impiegati) | i.Stipendio > 40 }
variabili
∃x(R)(...) ∀x(R)(...)
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 107 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 108
Basi di dati, Capitolo 3 Basi di dati, Capitolo 3
18
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Esempio 0b Esempio 1
• Trovare matricola, nome ed età di tutti gli impiegati • Trovare matricola, nome ed età degli impiegati che
guadagnano più di 40 milioni
PROJ Matricola, Nome, Età(Impiegati )
PROJ Matricola, Nome, Età(SELStipendio>40(Impiegati ))
{ Matricola: m, Nome: n, Età: e |
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)} { Matricola: m, Nome: n, Età: e |
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)
{ i.(Matricola,Nome,Età) | i(Impiegati) | } ∧ s > 40 }
Esempio 2 Esempio 3
• Trovare le matricole dei capi degli impiegati • Trovare nome e stipendio dei capi degli impiegati che
guadagnano più di 40 milioni
che guadagnano più di 40 milioni
{ NomeC: nc, StipC: sc |
{ Capo: c | Supervisione(Capo:c,Impiegato:m) ∧ Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) ∧
Impiegati(Matricola: m, Nome: n, Età: e, s > 40 ∧
Supervisione(Capo:c,Impiegato:m) ∧
Stipendio: s) ∧ s > 40 } Impiegati(Matricola:c, Nome:nc, Età:ec, Stipendio:sc) }
Esempio 4 Esempio 5
• Trovare gli impiegati che guadagnano più del rispettivo capo, • Trovare matricola e nome dei capi i cui impiegati guadagnano
mostrando matricola, nome e stipendio di ciascuno di essi e del tutti più di 40 milioni.
capo
{ Matr: m, Nome: n, Stip: s, NomeC : nc, StipC: sc | {Matricola: c, Nome: n |
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) ∧ Impiegati(Matricola: c, Nome: n, Età: e, Stipendio: s) ∧
Supervisione(Capo:c,Impiegato:m) ∧ Supervisione(Capo:c, Impiegato:m) ∧
Impiegati(Matricola: c, Nome: n c, Età: ec, Stipendio: sc) ∧ ¬ ∃m'(∃n'(∃e'(∃s'(Impiegati( Matr: m', Nome: n', Età: e', Stip: s') ∧
s > sc} Supervisione(Capo:c, Impiegato:m') ∧ s' ≤ 40}
19
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Non esiste in algebra e calcolo relazionale la • Un linguaggio di programmazione logica per basi di
possibilità di esprimere l'interrogazione che, dati derivato dal Prolog
per ogni relazione binaria, ne calcoli la • Utilizza predicati di due tipi:
chiusura transitiva • estensionali: relazioni della base di dati
• intensionali: corrispondono alle viste
• Per ciascuna relazione, è possibile calcolare
• Il linguaggio è basato su regole utilizzate per
la chiusura transitiva, ma con un'espressione "definire" i predicati estensionali
ogni volta diversa:
• quanti join servono?
• non c'è limite!
20
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Esempio 0a Esempio 0b
• Trovare matricola, nome, età e stipendio degli impiegati che • Trovare matricola, nome ed età di tutti gli impiegati
guadagnano più di 40 milioni
PROJMatricola , Nome, Età(Impiegati)
{ Matricola: m, Nome: n, Età: e, Stipendio: s |
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) ∧ s > 40 } { Matricola: m, Nome: n, Età: e |
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)}
• Serve un predicato intensionale
InfoPubbliche(Matricola: m, Nome: n, Età: e)
ImpRicchi(Matricola: m, Nome: n, Età: e, Stipendio: s) ← ← Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) , s >40
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) , s >40
? InfoPubbliche(Matricola: m, Nome: n, Età: e)
? ImpRicchi(Matricola: m, Nome: n, Età: e, Stipendio: s)
Esempio 2 Esempio 5
• Trovare le matricole dei capi degli impiegati che guadagnano più • Trovare matricola e nome dei capi i cui impiegati guadagnano
di 40 milioni tutti più di 40 milioni.
• serve la negazione
{ Capo: c | Supervisione(Capo:c,Impiegato:m) ∧
Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) ∧ s > 40 } CapiDiNonRicchi (Capo:c) ←
Supervisione (Capo:c,Impiegato:m),
Impiegati (Matricola: m, Nome: n, Età: e, Stipendio: s) ,
CapiDeiRicchi (Capo:c) ← s ≤ 40
ImpRicchi(Matricola: m, Nome: n, Età: e, Stipendio: s), CapiSoloDiRicchi (Matricola: c, Nome: n) ←
Supervisione (Capo:c,Impiegato:m) Impiegati (Matricola: c, Nome: n, Età: e, Stipendio: s) ,
Supervisione (Capo:c,Impiegato:m),
? CapiDeiRicchi (Capo:c) not CapiDiNonRicchi (Capo:c)
21
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Per ogni impiegato, trovare tutti i superiori. • La definizione della semantica delle regole ricorsive è
delicata (in particolare con la negazione)
• Serve la ricorsione • Potere espressivo:
• Datalog non ricorsivosenza negazione è
equivalente al calcolo senza negazione e senza
Superiore (Impiegato: i, SuperCapo: c) ← quantificatore universale
Supervisione (Impiegato: i, Capo: c) • Datalog non ricorsivocon negazione è equivalente
al calcolo e all'algebra
Superiore (Impiegato: i, SuperCapo: c) ← • Datalog ricorsivo senza negazione e calcolo sono
incomparabili
Supervisione (Impiegato: i, Capo: c'),
• Datalog ricorsivocon negazione è più espressivo
Superiore (Impiegato: c', SuperCapo: c) di calcolo e algebra
22
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
SQL
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 2
Basi di dati, Capitolo 4
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Infrazioni Infrazioni
Codice Data Vigile Prov Numero Codice Data Vigile Prov Numero
34321 1/2/95 3987 MI 39548K 34321 1/2/95 3987 MI 39548K
53524 4/3/95 3295 TO E39548 53524 4/3/95 3295 TO E39548
64521 5/4/96 3295 PR 839548 64521 5/4/96 3295 PR 839548
73321 5/2/98 9345 PR 839548 73321 5/2/98 9345 PR 839548
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Persone
Nome Reddito
Età Reddito SELECT, abbreviazioni
Andrea 2721 21
Aldo 2515 15
select nome, reddito
Filippo
Maria 26
5530 30
42
Anna 50 35
from persone
Filippo 26 30 where eta < 30
Luigi 50 40
select p.nome as nome,
Franco 60 20
Olga 30 41 p.reddito as reddito
Sergio 85 35 from persone p
Luisa 75 87 where p.eta < 30
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• R(A,B)
• Nome e reddito di tutte le persone
select *
PROJ Nome, Reddito (Persone) from R
Condizione complessa
Espressioni nella target list
Condizione “LIKE”
Gestione dei valori nulli
• Le persone che hanno un nome che Impiegati
inizia per 'A' e ha una 'd' come terza Matricola Cognome Filiale Età
lettera 7309
5998 Rossi
Neri Milano
Roma 32
45
5998
9553 Bruni
Neri Milano 45
NULL
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• prodotto cartesiano (FROM) PROJ A1,A4 (SEL A2=A3 (R1 JOIN R2))
• selezione (WHERE)
• proiezione (SELECT)
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
9
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
select paternita.figlio, padre, madre • Nome e reddito delle persone con meno
from maternita join paternita di trenta anni in ordine alfabetico
on maternita.figlio = paternita.figlio
10
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Persone Nome Età Reddito • di chi sarebbe il nome? La target list deve
Andrea 27 30 essere omogenea
Aldo 25 NULL
Maria 55 36
Anna 50 36 select min(eta), avg(reddito)
from persone
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 65 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 66
Basi di dati, Capitolo 4 Basi di dati, Capitolo 4
11
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Semantica di interrogazioni
con operatori aggregati e Raggruppamenti e target list
raggruppamenti
scorretta
select padre, avg(f.reddito), p.reddito
1. interrogazione senza group by e senza from persone f join paternita on figlio = nome join
operatori aggregati persone p on padre =p.nome
select * group by padre
from paternita
corretta
2. si raggruppa e si applica l’operatore
select padre, avg(f.reddito), p.reddito
aggregato a ciascun gruppo from persone f join paternita on figlio = nome join
persone p on padre =p.nome
group by padre, p.reddito
• I padri i cui figli hanno un reddito medio maggiore di • I padri i cui figli sotto i 30 anni hanno un reddito
25 medio maggiore di 20
12
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
13
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Differenza Intersezione
select Nome
select Nome from Impiegato
from Impiegato intersect
except select Cognome as Nome
select Cognome as Nome from Impiegato
from Impiegato
• equivale a
• vedremo che si può esprimere con select nidificate
select I.Nome
from Impiegato I, Impiegato J
where I.Nome = J.Cognome
Interrogazioni nidificate
14
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
15
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
select Nome
from Impiegato I select *
where not exists (select * from persone
from Impiegato where reddito = ( select max(reddito)
where Cognome = I.Nome) from persone)
16
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
17
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
18
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
create view NomeVista [ ( ListaAttributi ) ] as SelectSQL • Ammessi (di solito) solo su viste
[ with [ local | cascaded ] check option ]
definite su una sola relazione
create view ImpiegatiAmmin • Alcune verifiche possono essere
(Matricola, Nome, Cognome, Stipendio) as imposte
select Matricola, Nome, Cognome, Stipendio
from Impiegato
where Dipart = 'Amministrazione' and
Stipendio > 10
19
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Per ogni impiegato, trovare tutti i superiori, avendo with recursive Superiore(Imp,Supercapo
Supervisione (Impiegato, Capo) ( ( select Imp, Capo as Supercapo
from Supervisione)
• Serve la ricorsione ; in Datalog: union
( select Superiore.Imp, Supercapo
from Supervisione, Superiore
Superiore (Impiegato: i, SuperCapo: c) ←
where Supervisione.Capo = Superiore.Imp) )
Supervisione (Impiegato: i, Capo: c) select *
from Superiore
Superiore (Impiegato: i, SuperCapo: c) ←
Supervisione (Impiegato: i, Capo: c'),
Superiore (Impiegato: c', SuperCapo: c)
24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 115 24/09/2002 Atzeni-Ceri-Paraboschi-Torlone, 116
Basi di dati, Capitolo 4 Basi di dati, Capitolo 4
20
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
21
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
begin transaction;
update ContoCorrente
set Saldo = Saldo – 10
where NumeroConto = 12345 ;
update ContoCorrente
set Saldo = Saldo + 10
where NumeroConto = 55555 ;
commit work;
22
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
SQL e applicazioni
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 2
Basi di dati, Capitolo 5
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
}
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 9 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 10
Basi di dati, Capitolo 5 Basi di dati, Capitolo 5
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Esercizio Output
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Una API (Application Programming Interface) • (A titolo di curiosità; può bastare il primo tipo)
Esistono quattro tipi di driver (chiamati, in modo molto
di Java (intuitivamente: una libreria) per anonimo, tipo 1, tipo 2, tipo 3, tipo 4):
l'accesso a basi di dati, in modo indipendente 1. Bridge JDBC-ODBC: richiama un driver ODBC, che deve
essere disponibile sul client; è comodo ma potenzialmente
dalla specifica tecnologia
inefficiente
• JDBC è una interfaccia, realizzata da classi 2. Driver nativo sul client: richiama un componente
chiamate driver: proprietario (non necessariamente Java) sul client
3. Driver puro Java con server intermedio ("middleware
• l'interfaccia è standard, mentre i driver server"): comunica via protocollo di rete con il server
contengono le specificità dei singoli DBMS intermedio, che non deve risiedere sul client
4. Driver puro Java, con connessione al DBMS: interagisce
(o di altre fonti informative)
direttamente con il DBMS
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Esecuzione dell'interrogazione ed
Statement
elaborazione del risultato
Esecuzione dell'interrogazione • Un'interfaccia i cui oggetti consentono di inviare, tramite una
connessione, istruzioni SQL e di ricevere i risultati forniti
Statement query = con.createStatement(); • Un oggetto di tipo Statement viene creato con il metodo
ResultSet result = createStatement di Connection
query.executeQuery("select * from Corsi"); • I metodi dell'interfaccia Statement:
• executeUpdate per specificare aggiornamenti o istruzioni
Elaborazione del risultato DDL
• executeQuery per specificare interrogazioni e ottenere un
while (result.next()){ risultato
String nomeCorso = • execute per specificare istruzioni non note a priori
result.getString("NomeCorso"); • executeBatch per specificare sequenze di istruzioni
System.out.println(nomeCorso); • Vediamo executeQuery
}
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Studio di fattibilità
Schema fisico
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 9 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 10
Basi di dati, Capitolo 6 Basi di dati, Capitolo 6
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• modelli logici: utilizzati nei DBMS esistenti per • Proviamo a modellare una applicazione
l’organizzazione dei dati definendo direttamente lo schema logico della
• utilizzati dai programmi
base di dati:
• indipendenti dalle strutture fisiche
esempi: relazionale, reticolare, gerarchico, a oggetti • da dove cominciamo?
• modelli concettuali: permettono di rappresentare i • rischiamo di perderci subito nei dettagli
dati in modo indipendente da ogni sistema
• dobbiamo pensare subito a come
• cercano di descrivere i concetti del mondo reale
• sono utilizzati nelle fasi preliminari di correlare le varie tabelle (chiavi etc.)
progettazione • i modelli logici sono rigidi
il più noto è il modello Entity-Relationship
Progettazione
fisica
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 17 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 18
Basi di dati, Capitolo 6 Basi di dati, Capitolo 6
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Città Vendita
Rappresentazione grafica
Relationship di relationship
• Chiamata anche:
Impiegato Residenza Città
• relazione , correlazione , associazione
Studente Corso
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 29 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 30
Basi di dati, Capitolo 6 Basi di dati, Capitolo 6
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Sede di
lavoro Fornitore Fornitura Prodotto
Relationship ricorsiva:
Relationship ricorsiva con “ruoli”
coinvolge “due volte” la stessa entità
Successione
Conoscenza
Sovrano
Persona Successore Predecessore
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Tennista
Matricola Codice
Cognome Telefono
Rappresentazione grafica Direzione
Impiegato Dipartimento
Cognome Afferenza
Codice Nome
Partecipazione Composizione
Impiegato Età Via Data
Indirizzo Numero
Progetto Sede
CAP Via
Indirizzo Città
Budget Nome
CAP
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 41 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 42
Basi di dati, Capitolo 6 Basi di dati, Capitolo 6
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• di attributo
• specificano il numero minimo e massimo di
• Identificatore occorrenze delle relationship cui ciascuna
• interno occorrenza di una entità può partecipare
• esterno
• Generalizzazione
Esempio di cardinalità
• per semplicità usiamo solo tre simboli:
• 0 e 1 per la cardinalità minima:
• 0 = “partecipazione opzionale”
(1,5) (0,50) • 1 = “partecipazione obbligatoria”
Impiegato Assegnamento Incarico • 1 e “N” per la massima:
• “N” non pone alcun limite
R1
S1 C1
(1,1) (0,N)
S2 C2
S3 R2 Studente Residenza Città
S4
R3 C3
C4
R4
Studente Città
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 47 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 48
Basi di dati, Capitolo 6 Basi di dati, Capitolo 6
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
(1,N) (1,N)
Macchinista Abilitazione Locomotore
(1,1) (1,N)
Comune Ubicazione Provincia
(1,1) (1,1)
Professore Cattedra
di ruolo Titolarità coperta
9
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Persona Cognome
10
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
(0,N)
Se E (genitore) è generalizzazione di E1, E2, Codice
Nascita
..., En (figlie): fiscale
(1,1)
• ogni proprietà di E è significativa per E1,
E2, ..., En Persona Nome
• ogni occorrenza di E1, E2, ..., En è
Età
occorrenza anche di E
Stipendio
Lavoratore Studente
11
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Persona Persona
• possono esistere gerarchie a più livelli e • Le persone hanno CF, cognome ed età; gli
multiple generalizzazioni allo stesso livello uomini anche la posizione militare; gli
impiegati hanno lo stipendio e possono
• un'entità può essere inclusa in più gerarchie,
essere segretari, direttori o progettisti (un
come genitore e/o come figlia progettista può essere anche responsabile
• se una generalizzazione ha solo un’entità di progetto); gli studenti (che non possono
figlia si parla di sottoinsieme essere impiegati) un numero di matricola;
• alcune configurazioni non hanno senso esistono persone che non sono né
impiegati né studenti (ma i dettagli non ci
• il genitore di una generalizzazione totale può interessano)
non avere identificatore, purché …
CF Età
Persona Documentazione associata agli schemi
Cognome
Stipendio Matr. concettuali
Responsabile
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 71 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 72
Basi di dati, Capitolo 6 Basi di dati, Capitolo 6
12
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
13
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Progettazione
concettuale
Atzeni, Ceri, Paraboschi, Torlone Schema concettuale
Basi di dati
McGraw -Hill, 1996-2002 Progettazione
logica
Capitolo 7:
Schema logico
Progettazione concettuale
Progettazione
17/10/2002 fisica
Schema fisico
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 2
Basi di dati, Capitolo 7
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• top-down
• bottom -up
• inside-out
Schema
Schema
Schema
Schema finale
intermedio
iniziale
Specifiche
intermedio
SpecificheSpecifiche
1 Specifiche 2
Schema finale
Studente Impiegato
Persona
Esame
Esame Corso
Specifiche1,2
Schema 1,2 Specifiche
Schema 2,2 2,2
Uomo Donna
Stipendio
Persona
Strategia inside-out:
Studente
Specifica su Corso un esempio
Impiegato
Esame
impiegato
Uomo Donna
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Progetto Sede
Via
Indirizzo Città
Budget Nome
CAP
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 31 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 32
Basi di dati, Capitolo 7 Basi di dati, Capitolo 7
Un esempio di progettazione
concettuale Frasi di carattere generale
Si vuole realizzare una base di dati per
una società che eroga corsi, di cui
vogliamo rappresentare i dati dei
• Società di formazione partecipanti ai corsi e dei docenti.
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Schema scheletro
Data fine
Data inizio N.Part.
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Telefono
(1,N) CF
Frasi relative ai docenti
Per i docenti (circa 300), rappresentiamo il Docente Cognome
cognome, l'età, la città di nascita, tutti i Città nascita
numeri di telefono, il titolo del corso che Età
insegnano, di quelli che hanno insegnato
nel passato e di quelli che possono
insegnare. I docenti possono essere
dipendenti interni della società di Collaboratore Interno
formazione o collaboratori esterni.
Integrazione
(0,N) (0,N)
partecipazione
Corso passata
Partecipante Docente
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
9
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Progettazione
concettuale
Atzeni, Ceri, Paraboschi, Torlone Schema concettuale
Basi di dati
McGraw -Hill, 1996-2002 Progettazione
logica
Capitolo 8:
Schema logico
Progettazione logica
Progettazione
17/10/2002 fisica
Schema fisico
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 2
Basi di dati, Capitolo 7
Schema
logico
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 5 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 6
Basi di dati, Capitolo 7 Basi di dati, Capitolo 7
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• Operazione:
Concetto Tipo Volume
• trova tutti i dati di un impiegato, del
Sede E 10
dipartimento nel quale lavora e dei
Dipartimento E 80
progetti ai quali partecipa
Impiegato E 2000
Progetto E 500
Composizione R 80 • Si costruisce una tavola degli accessi basata
Afferenza R 1900 su uno schema di navigazione
Direzione R 80
Partecipazione R 6000
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Cognome Telefono
Tavola degli accessi
(1,N)
Impiegato Dipartimento
(0,1) (1,N)
Codice Afferenza Nome Concetto Costrutto Accessi Tipo
(0,N) (1,1)
Impiegato Entità 1 L
(0,1)
Partecipazione Afferenza Relazione 1 L
Data Dipartimento Entità 1 L
(1,N) Partecipazione Relazione 3 L
Progetto Entità 3 L
Progetto
Budget Nome
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 13 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 14
Basi di dati, Capitolo 7 Basi di dati, Capitolo 7
• Partizionamento/accorpamento di
• in questa fase si decide se eliminare le
entità e relationship
ridondanze eventualmente presenti o
• Scelta degli identificatori primari mantenerle
• Vantaggi
• semplificazione delle interrogazioni • attributi derivabili:
• Svantaggi • da altri attributi della stessa entità (o
• appesantimento degli aggiornamenti relazione)
• maggiore occupazione di spazio • da attributi di altre entità (o relazioni)
• relazioni derivabili dalla composizione di altre
relazioni in presenza di cicli
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
(1,N) (1,N)
Impiegato IVA
Acquisto Composizione Prodotto
Importo lordo
(0,N)
Frequenza Numero abitanti
(1,N) (0,N)
Ridondanza dovuta a
ciclo Corso Docenza
Persona Residenza Città
(1,1) (1,N)
Insegnamento
(1,1)
Professore
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 21 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 22
Basi di dati, Capitolo 7 Basi di dati, Capitolo 7
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Operazione 1 • Costi:
Concetto Costrutto Accessi Tipo • Operazione 1: 1500 accessi in scrittura e
Persona Entità 1 S 500 accessi in lettura al giorno
Residenza Relazione 1 S • Operazione 2: trascurabile.
• Contiamo doppi gli accessi in scrittura
Operazione 2 • Totale di 3500 accessi al giorno
Concetto Costrutto Accessi Tipo
Città Entità 1 L
Residenza Relazione 5000 L
• Costi:
• Operazione 1: 1000 accessi in scrittura • Analisi delle ridondanze
• Operazione 2: 10000 accessi in lettura al • Eliminazione delle generalizzazioni
giorno
• Partizionamento/accorpamento di
• Contiamo doppi gli accessi in scrittura entità e relazioni
• Totale di 12000 accessi al giorno
• Scelta degli identificatori primari
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
(0,..)
E1 E2 R2 R2
A11 A21
E4 E4
A01 A02
R11
E0 R1 E3 R12 E3
E1 E2 R2 E1 E2 R2
E0 R1 E3 E0 R1 E3
(0,1) (0,1)
RG1 RG2
(1,1) (1,1)
E1 E2 R2 E1 E2 R2
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
• è possibile seguire alcune semplici regole • sono anche possibili soluzioni “ibride”,
generali soprattutto in gerarchie a più livelli
(0,1)
TIPO RG2
(1,1)
E1 E2 R2 E2 R2
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Cognome Codice
• partizionamento verticale di entità
Livello
• partizionamento orizzontale di
Indirizzo
relationship Impiegato Stipendio
• eliminazione di attributi multivalore Data
Ritenute
• accorpamento di entità/ relationship nascita
Indirizzo
(1,1) (1,1)
Dati Dati Città
R Agenzia
anagrafici lavorativi
(1,N) Telefono
Indirizzo Data Ritenute
nascita
Codice
Città Nome Numero Cognome fiscale Interno Indirizzo
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Codice
Cognome fiscale Ruolo Cognome Città Nome
Interno
Indirizzo (0,1) (1,N) (1,N)
Persona Giocatore Composizione Squadra
Data
Indirizzo (0,1)
nascita
(0,1) Data Data
acquisto cessione
Data
acquisto Attività della ristrutturazione
Ruolo (1,1) Comp. (1,N) Nome
attuale • Analisi delle ridondanze
• Eliminazione delle generalizzazioni
Giocatore Squadra
• Partizionamento/accorpamento di entità
Comp. e relazioni
(1,N)
passata (1,N) • Scelta degli identificatori primari
Cognome Città
Data Data
acquisto cessione
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 51 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 52
Basi di dati, Capitolo 7 Basi di dati, Capitolo 7
9
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
(1,N)
Composto Componente
Prodotto Nome
Dipartimento
Telefono
Costo Nome Codice
Fornitore(PartitaIVA, Nome)
Prodotto(Codice , Nome, Costo) Prodotto(Codice, Genere)
Dipartimento(Nome, Telefono)
Composizione(Composto, Componente , Quantità) Fornitura(Fornitore, Prodotto, Dipartimento, Quantità)
10
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
(1,1) (1,1)
(1,1) (1,N)
Direttore Direzione Dipartimento
Studente Iscrizione Università
Indirizzo
AnnoDiCorso Stipendio Telefono
Studente(Matricola, Università , Cognome, AnnoDiCorso) • varie possibilità:
Università(Nome, Città, Indirizzo) • fondere da una parte o dall'altra
• fondere tutto?
• con vincolo …
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 63 17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 64
Basi di dati, Capitolo 7 Basi di dati, Capitolo 7
11
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Impiegato Dipartimento
(0,1) (1,N) Impiegato(Codice, Cognome,
Afferenza Nome Dipartimento*,Sede*, Data*)
Codice (0,N) (1,1)
(0,1) Composizione
Partecipazione Dipartimento( Nome, Città, Telefono, Direttore)
Data
(1,N) Sede(Città, Via, CAP)
(1,N)
Strumenti di supporto
17/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 71
Basi di dati, Capitolo 7
12
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Forme normali
1
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Proprietà
2
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Impiegato → Stipendio
Progetto → Bilancio
• abbiamo usato un'unica relazione per Impiegato Progetto → Funzione
rappresentare informazioni eterogenee • Impiegato Progetto è chiave
• gli impiegati con i relativi stipendi • Impiegato solo no
• Progetto solo no
• i progetti con i relativi bilanci
• Le anomalie sono causate dalla presenza di concetti
• le partecipazioni degli impiegati ai progetti eterogenei:
con le relative funzioni • proprietà degli impiegati (lo stipendio)
• proprietà di progetti (il bilancio)
• proprietà della chiave Impiegato Progetto
3
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
4
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Un altro problema
• Supponiamo di voler inserire una nuova
ennupla che specifica la partecipazione
dell'impiegato Neri, che opera a Milano, al
Impiegato Progetto
progetto Marte
Impiegato Sede Rossi Marte
Impiegato Progetto
Verdi Giove
Impiegato Sede Rossi Marte Rossi Roma
Verdi Giove Verdi Venere
Rossi Roma Verdi Milano
Verdi Venere Neri Saturno
Verdi Milano Neri Milano
Neri Saturno Neri Venere
Neri Milano
Neri Venere Neri Marte
Impiegato → Sede
Progetto → Sede
23/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 27 23/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 28
Basi di dati, Capitolo 9 Basi di dati, Capitolo 9
5
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
raggiungibile”
6
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Dirigente → Sede
• Se una relazione ha una sola chiave allora le Progetto Sede → Dirigente
7
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
Analisi dell’entità
Nome Partita Nome
prodotto Codice IVA fornitore
• L’entità viola la terza forma normale a
causa della dipendenza: (1,1) (0,N)
PartitaIVA → NomeFornitore Indirizzo Prodotto Fornitura Fornitore
• Possiamo decomporre sulla base di
questa dipendenza
Prezzo Indirizzo
8
Copyriot Cafè - Il modo migliore per difendere i saperi è condividerli www.copy-riot.org
(0,N) (0,1)
Professore Tesi Studente
(1,1) (1,1)
(0,N)
Corso di
Afferenza Iscrizione
laurea
(0,N) (0,N)
Corso di
Dipartimento
laurea
23/10/2002 Atzeni-Ceri-Paraboschi-Torlone, 49
Basi di dati, Capitolo 9