LE LE
ASSOCIAZIONI ASSOCIAZIONI
(parte 1)
(parte 1)
tipo della chiave
La chiave di un’entità può essere composta
nome loc_id
provincia
località
stabilimento
nome località stab_id
società località hotel_id
albergo
nome
tipo della chiave
Chiavi alternative per una stessa entità
albergo
località hotel_id
nome
codice_h nome loc_id provincia
località
c_istat
proprietà di sintesi
• ATTENZIONE! valori medi , max e min ecc.
campionato
giocatore squadra
età età_media
giocatore squadra
età età_media
età_media
LE ASSOCIAZIONI
Gli schemi scheletro descrivono in
generale i collegamenti tra le entità e le associazioni
Le entità sono descritte attraverso la aggregazione di proprietà
Per le associazioni dobbiamo ancora definire la chiave e le cardinalità
Ricordo che: le istanze rappresentano fatti che non esistono di per sé ma
associano istanze di entità
associazioni
• per capire bene le associazioni bisogna eliminare ogni dubbio su quale è la
chiave delle istanze
• ricordo che la chiave (come anche la chiave nel db relazionale) deve
identificare in modo univoco la singola istanza di associazione
• e deve inoltre essere totale,
obbligatoria, unica, esplicita e non può
contenere valori null
la chiave delle associazioni
La chiave è sempre composta ed è
definita come composizione delle chiavi delle entità partecipanti, es.:
afferenza : (c_dip, cognome)
dipartimento docente
c_dip cognome
deis, tiberio diem, pareschi mat, barozzi deis, toth associazione binaria
esempio
uffici impiegati
appartenenza data c_uff matr
il tipo di appartenenza è: (c_uff, matr, data) dove c_uff, matr è la chiave
e data è una proprietà generica es.:
(012, ragioneria... ) è una istanza di uffici
(3452, bianchi, paolo ... ) è una istanza di impiegati (012, 3452, 2/9/1994) è una istanza di appartenenza
la chiave delle associazioni
risiede : (matr, loc_id) nato : (matr, loc_id) es.:
impiegato
matr loc_id
località nato
risiede
più associazioni con diversa semantica
con lo stesso tipo di chiave per le stesse entità
la chiave delle associazioni
Es.:
autista
(tripla)
assegnazione :
(matr, codice, targa)
matr codice
percorso
TIR assegnazione
targa
associazione ternaria
la chiave delle associazioni
studente esame corso
voto data cod_corso matr
Attenzione !
con più registrazioni di voto:
studente esame corso
data
voto cod_corso matr
data voto
data
(1,n)
la chiave
il fatto che la chiave della
associazione sia la composizione degli identificatori delle entità
partecipanti introduce un
• vincolo di integrità: ogni valore componente di una chiave di una
istanza di associazione deve essere
presente come valore chiave di una
istanza dell’entità associata
esempio
uffici impiegati
appartenenza data c_uff matr
l’eliminazione di un ufficio comporta l’eliminazione delle istanze di appartenenza associate
es.: eliminando (012, ragioneria...) viene eliminata (012, 3452, 2/9/1994) e l’appartenenza di
(3452, bianchi, paolo ... ) deve essere riassegnata
cardinalità delle associazioni
per cardinalità si intende il numero di volte che una data istanza di
entità deve o può partecipare alla associazione
• (1,1) : obbligatoria, una sola volta
• (1,n) : obbligatoria, almeno una volta
• (0,1) : opzionale, una sola volta
• (0,n) : opzionale, n volte
associazioni N:M
ingegneri progetti
sviluppo
prj matr
(0,n) (1,m)
• con vincolo: un ingegnere deve partecipare ad almeno un progetto (1,m)
• senza vincolo: ad un progetto possono
partecipare ingegneri, ma può esistere anche un progetto senza ingegneri (0,n)
(detta anche associazione molti a molti)
associazioni 1:1
direttore reparto
direzione
n_rep matr
(1,1) (1,1)
• con doppio vincolo: un reparto deve avere un direttore ed il direttore è uno solo (1,1)
un direttore deve dirigere uno ed un solo reparto (1,1)
• il vincolo diventerebbe (0,1) se avessimo l’entità “impiegato” al posto dell’entità “direttore”
associazioni N:1
oggetto ripiano
posizione
n_rip cod_o
(0,n) (0,1)
• con vincolo: un oggetto può stare su un ripiano, se sta sul ripiano è intero (0,1)
• senza vincolo: su un ripiano possono stare n oggetti, vincolando la partecipazione n = 5, non più di 5 (0,5)
(è detta anche associazione molti a uno)
esempio
magazzino scaffale
ripiano operaio
contiene
fatto_di lavora
(1,1) (1,m) (1,1)
(1,n)
(0,1) (1,n)
esempio
dipartimenti docenti
corsi c. di studio
afferenza
insegnamento appartenenza (0,1)
(1,1) (n,m)
(1,n) (n,m)
(0,n)
esempio
docenti
corsi studenti
titolarità
seguono tesi
(0,1)
(n,m) (0,n)
(0,n)
(0,n)
(0,1)
esempio
fattura articolo
impiegato
cliente
gestisce
riceve
contiene
ufficio
appartiene (1,n)
(0,n)
(1,1)
(0,n) (1,1)
(0,n)
(1,1)
(1,n)
esempio
prodotti fornitori
fornire
prezzo (0,n) (0,n)
cod_f cod_p
Attenzione :”fornire” non contiene le “forniture”!!
un fornitore potrebbe fornire più volte lo stesso prodotto a seguito di ordini diversi e si avrebbe una violazione dell’unicità delle chiave
esempio
fornitori cod_f prodotti
cod_p
prezzo (0,n)
(0,n)
fornitura
numero data
(1,1) (1,n)
rif_p rif_f
esempio
Attenzione al TEMPO:
questa è la “snapshot”
di un giorno percorsi
adibiti_a
(1,n) cod_p
guidatori autobus
guidare
turno
(0,1) (0,n)
(0,1)
n_aut matr
esempio
su più giorni guidatori
fare
(0,n) matr
(1,1)
autobus n_aut
(0,n) usare turni
(1,1) numero
id_tu data fascia
esempio
su un giorno
guidatori
(0,1) matr
(0,n)
TIR n_tir (0,1)
percorsi
sigla associazione
TERNARIA la chiave è una tripla
(matr,n_tir,sigla)
guida
(Soluzione 1)
esempio
su più giorni
matr
percorsi guidatori
(0,n)
(0,n)
TIR n_tir (0,n)
data data
sigla (0,n)
questa rappresentazione ha dei difetti guida
(Soluzione 2)
esempio
potremmo anche assegnare (1,n) al posto di (1,1) possiamo anche gestire intervalli di date
matr
percorsi guidatori
(0,n)
n_viaggio TIR (1,1)
data
sigla
(0,n) viaggi
num
d_arrivo (1,1)
(1,1)
(0,n)
gv
vp vt
(Soluzione 3)
esempio
• Le soluzioni due e tre non consentono di definire sullo schema l’unicità della coppia (matr,n_tir) in ogni snapshot giornaliera, in questo caso si può:
• aggiungere un foglio di specifica con la soluzione uno
• prevedere un archivio di deposito (“bag” e non una relazione!) per scaricare il passato
• usare gli “identificatori esterni” come vedremo in seguito.