D2 Plogico2

296 views
240 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
296
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

D2 Plogico2

  1. 1. A)
Introduzione
 1
 2
 B)
Prog.
ConceGuale
(ER) 
 C)
Modello
Relazionale,
 Algebra
relazionale,
SQL 
 1
 2
 3
 4
 5
 6
 7
 1
 2
 3
 4
 5
 6
 7
 D)
Prog.
Logica
e
 E)
Tecnologia
di
un
DBMS
 Normalizzazione 
 1
 2
 3
 4
 1
 2
 3
 4
 5
 6
 F)
Programmazione
DB
 1
 2
 2
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  2. 2. Altre
traduzioni
   La
traduzione
standard
è
sempre
possibile
ed
è
 l’unica
possibilità
per
le
associazioni
N
a
M
   Altre
forme
di
traduzione
delle
associazioni
sono
 possibili
per
altri
casi
di
cardinalità
(1
a
1,
1
a
N)
   Le
altre
forme
di
traduzione
fondono
in
una
stessa
 relazione
enMtà
e
associazioni
 3
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  3. 3. Altre
traduzioni
   Le
altre
forme
di
traduzione:
   danno
origine
a
un
minor
numero
di
relazioni
e
 generano
quindi
uno
schema
più
semplice
   richiedono
un
minor
numero
di
join
per
la
 navigazione
aGraverso
un’associazione,
ovvero
per
 accedere
alle
istanze
di
enMtà
connesse
tramite
 l’associazione
   penalizzano
le
operazioni
che
consultano
soltanto
gli
 aGribuM
di
una
enMtà
che
è
stata
fusa
 4
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  4. 4. Associazione
binaria
1
a
N
   traduzione
standard:
 K1
 A1
 E1
 B1
 (1,1)
 E1
(K1,
A1,
B1)
 AR
 R
 E2
(K2,
A2,
B2)
 BR
 (1,n)
 R
(K1,K2,
AR,
BR) K2
 A2
 E2
 B2
 5
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  5. 5. Associazione
binaria
1
a
N
   Se
E1
partecipa
con
cardinalità
(1,1)
può
essere
fusa
con
 l’associazione,
oGenendo
una
soluzione
a
due
relazioni:
 
 
E1(K1,
A1,
B1,K2,
AR,
BR)
 
E2(K2,
A2,
B2)
   Se
E1
partecipa
con
cardinalità
(0,1)
la
soluzione
a
due
 relazioni
ha
valori
nulli
in
K2,
AR,
BR
per
le
istanze
di
E1
 che
non
partecipano
all’associazione
 6
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  6. 6. Associazione
binaria
1
a
N
   equivale
a:
 K1
 A1
 E1
 B1
 K2
 K2
 AR
 BR
 A2
 E2
 B2
 7
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  7. 7. Associazione
binaria
1
a
N
   AGenzione
:
in
questo
caso,
poiché
la
partecipazione
di
 E1
è
0,1
o
1,1,
si
nota
facilmente
che
ad
un
dato
valore
 di
K1
corrisponde
uno
e
un
sol
valore
di
K2
(non
è
vero
 il
contrario),
quindi
si
può
dire
che
K1
implica
K2
o,
 anche,
che
esiste
una
dipendenza
funzionale
da
K1
a
K2

   nella
soluzione
a
3
relazioni
la
chiave
della
relazione
che
 traduce
l’associazione
è
riducibile
a
K1:
 
 
E1(K1,A1,B1)
,



E2(K2,A2,B2)

 
 
R(K1,K2,AR,BR)
 8
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  8. 8. Associazione
binaria
1
a
N
es.
 codice
 codice
 nome_p
 nome_c
 nome_c
 comune
 comune
 abitanM
 (1,1)
 abitanM
 apparMene
 nome_p
 (1,n)
 nome_p
 provincia
 regione
 provincia
 regione
 (senza
aGribuM
sull’associazione)
 9
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  9. 9. Associazione
binaria
1
a
N
es.
 PROVINCIA
(NOME_P,
REGIONE,
...
)
 COMUNE
(CODICE,
NOME_C,
ABITANTI,

NOME_P,
…
)
 FK:
 
NOME_P
REFERENCES
PROVINCIA
 10
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  10. 10. Associazione
binaria
1
a
N
es.
 CREATE TABLE PROVINCIA (NOME_P ... NOT NULL, REGIONE ... PRIMARY KEY (NOME_P)); CREATE TABLE COMUNE (CODICE ... NOT NULL, NOME_C ... ABITANTI ..., NOME_P ... NOT NULL PRIMARY KEY (CODICE) FOREIGN KEY NOME_P REFERENCES PROVINCIA); 11
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  11. 11. Associazione
binaria
1
a
N
es.
 p_iva
 p_iva
 nome
 cliente
 nome
 cliente
 telefono
 (0,n)
 telefono
 sconto
 invia
 (1,1)
 p_iva
 numero
 ordine
 numero
 data
 ordine
 data
 (con
aGribuM
sull’associazione)
 sconto
 12
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  12. 12. Associazione
binaria
1
a
N
es.
 traduzione
con
due
relazioni:
 CLIENTE
(P_IVA,
NOME,
TELEFONO)
 ORDINE
(NUMERO,
DATA,
P_IVA,
SCONTO)
 FK: 
P_IVA
REFERENCES
CLIENTE
 13
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  13. 13. Associazione
binaria
1
a
N
es.
 CREATE TABLE CLIENTE (P_IVA ... NOT NULL, NOME ...,TELEFONO ..., PRIMARY KEY (P_IVA)); CREATE TABLE ORDINE (NUMERO ... NOT NULL, DATA ... P_IVA ... NOT NULL, SCONTO ..., PRIMARY KEY (NUMERO) FOREIGN KEY P_IVA REFERENCES CLIENTE); con
tre
relazioni:
 14
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  14. 14. Associazione
binaria
1
a
N
es.
 CLIENTE
(P_IVA,
NOME,
TELEFONO)
 ORDINE
(NUMERO,
DATA)
 INVIA
(NUMERO,
P_IVA,
SCONTO)
 FK:
 
P_IVA
REFERENCES
CLIENTE
 FK: 
NUMERO
REFERENCES
ORDINE
 15
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  15. 15. Associazione
binaria
1
a
N
es.
 CREATE TABLE CLIENTE (P_IVA ... NOT NULL, NOME ...,TELEFONO ..., PRIMARY KEY (P_IVA)); CREATE TABLE ORDINE (NUMERO ... NOT NULL, DATA ... PRIMARY KEY (NUMERO)); CREATE TABLE INVIA (P_IVA ... NOT NULL, NUMERO ... NOT NULL, SCONTO ..., PRIMARY KEY (NUMERO) FOREIGN KEY P_IVA REFERENCES CLIENTE FOREIGN KEY NUMERO REFERENCES ORDINE); 16
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  16. 16. Associazione
binaria
1
a
N
es.
 Con
idenMficazione
esterna
 n_stab
 nome
 stabili‐
 reparto
 parte
 mento
 (1,1)
 (1,n)
 (1,n)
 in
 macchina
 (1,1)
 num
 c_inv
 17
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  17. 17. Associazione
binaria
1
a
N
es.
 STABILIMENTO
(N_STAB,
…)
 REPARTO
(NOME,
N_STAB,
...)
 FK:
 
N_STAB
REFERENCES
STABILIMENTO
 MACCHINA
(NUM,
NOME,
N_STAB,
…)
 FK:
 
NOME
REFERENCES
REPARTO
 FK: 
N_STAB
REFERENCES
STABILIMENTO
 18
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  18. 18. Associazione
binaria
1
a
N
es.
 CREATE TABLE STABILIMENTO (N_STAB ... NOT NULL, ..., ..., PRIMARY KEY (N_STAB)); CREATE TABLE REPARTO (NOME ... NOT NULL, N_STAB ... NOT NULL... PRIMARY KEY (NOME, N_STAB) FOREIGN KEY N_STAB REFERENCES STABILIMENTO CREATE TABLE MACCHINA (NUM ... NOT NULL, NOME ... NOT NULL, N_STAB ... NOT NULL, ..., PRIMARY KEY (NUM, NOME, N_STAB ) FOREIGN KEY NOME REFERENCES REPARTO FOREIGN KEY N_STAB REFERENCES STABILIMENTO); 19
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  19. 19. Associazione
binaria
1
a
1
   traduzione
con
una
 relazione:

 nome_c
 comune
 E12
(K1,
A1,
B1,
 abitanM
 









K2,
A2,
B2,

 (1,1)
 data
 









AR,
BR)

 amministra
 (1,1)
 nome_s
 sindaco
 parMto
 20
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  20. 20. Associazione
binaria
1
a
1
 AMMINISTRAZIONE
(NOME_C,
ABITANTI,
NOME_S,
 


 
 
 




INDIRIZZO,
DATA)
 AK:
 
NOME_S
 CREATE TABLE AMMINISTRAZIONE (NOME_C ... NOT NULL, ABITANTI ..., NOME_S ... NOT NULL UNIQUE, INDIRIZZO ..., DATA ... , PRIMARY KEY (NOME_C)); se
le
cardinalità
minime
sono
entrambe
1
la

 chiave
può
essere

indifferentamente
K1
o
K2
 si
sceglierà
quella
più
significaMva
 21
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  21. 21. Associazione
binaria
1
a
1
 • se
la
cardinalità
di
E2
è
0,1
e
quella
di
E1

è
1,1
allora
la
 chiave
sarà
K2
;
E2
è
l’enMtà
con
maggior
numero
di
 istanze
alcune
della
quali
non
si
associano,
ci
saranno
 quindi
valori
nulli
in
corrispondenza
di
K1,
K1
in
questo
 caso
non
potrebbe
essere
scelta
 • se
la
cardinalità
è
0,1
da
entrambe
le
parM
allora
le
 relazioni
saranno
due
per

l’impossibilità
di
assegnare
la
 chiave
all’unica
relazione
a
causa
della
presenza
di
 valori
nulli
sia
su
K1
che
su
K2
 22
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  22. 22. Associazione
binaria
1
a
1
 assolto
 (0,1)
 (1,1)
 cod_f
 ciGadino
 servizio
 Mpo
 nome_c
 data_n
 matr
 data
 CITTADINO
(COD_F,
NOME_C,
INDIRIZZO,
 





















DATA_N,
MATR,

DATA,
TIPO)
 CREATE TABLE CITTADINO (COD_F ... NOT NULL, NOME_C ... NOT NULL, INDIRIZZO ..., DATA_N ..., MATR ..., DATA..., TIPO ..., PRIMARY KEY (COD_F)); 23
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  23. 23. Associazione
binaria
1
a
1
   Traduzione
con
due
relazioni
   l’associazione
può
essere
compaGata
con
l’enMtà
 che
partecipa
obbligatoriamente
(una
delle
due
se
 la
partecipazione
è
obbligatoria
per
entrambe)
la
 discussione
sulla
chiave
è
analoga
al
caso
di
 traduzione
con
una
relazione
 





E1
(K1,
A1,
B1,...)
 
E2
(K2,
A2,
B2,...
K1,
AR,
BR)
 24
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  24. 24. Associazione
binaria
1
a
1
   Traduzione
con
tre
relazioni
   la
chiave
della
relazione
che
traduce
l’associazione
 può
essere
indifferentemente
K1
o
K2,
non
ci
sono
 problemi
di
valori
nulli
 
E1
(K1,
A1,
B1,...)
 
E2
(K2,
A2,
B2,...)
 
R
(K1,
K2,
AR,
BR,...)
 25
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  25. 25. Auto
associazione
N
a
M
 viene
tradoGa
con:
   una
relazione
per
l’enMtà
ed
   una
per
l’associazione,

 •  quest’ulMma
conMene
due
volte
la
chiave
dell’enMtà,
è
 necessario,
però
modificare
i
nomi
degli
aGribuM,
per
 non
avere
omonimia
 nome
 (0,n) 
 stato
 confina
 area
 (0,n)
 26
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  26. 26. Auto
associazione
N
a
M
 STATO(NOME,

AREA)
 CONFINA(STATO_A,
STATO_B)
 FK:

 
STATO_A
REFERENCES
STATO
 
STATO_B
REFERENCES
STATO
 CREATE TABLE STATO (NOME ... NOT NULL, AREA … PRIMARY KEY (NOME)); CREATE TABLE CONFINA STATO_A ... NOT NULL, STATO_B ... NOT NULL, PRIMARY KEY (STATO_A, STATO_B) FOREIGN KEY (STATO_A) REFERENCES STATO FOREIGN KEY (STATO_B) REFERENCES STATO); 27
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  27. 27. Auto
associazione
1
a
N
   è
traducibile
con
una
sola
relazione
che
 conMene
due
volte
l’aGributo
chiave:
una
 volta
come
chiave
ed
una
come
riferimento
 all’istanza
connessa,
con
nome
diverso
per
 specificare
il
ruolo
 matr
 nome
 capo
 (0,n)
 dipendente
 capo_di
 (0,1)
 subordinato
 28
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  28. 28. Auto
associazione
1
a
N
 DIPENDENTE
(MATR,
NOME,
CAPO)
 FK:
 
CAPO
REFERENCES
DIPENDENTE
 CREATE TABLE DIPENDENTE (MATR ... NOT NULL, NOME ..., CAPO ... PRIMARY KEY (MATR) FOREIGN KEY (CAPO) REFERENCES DIPENDENTE);   nel
caso
di
associazione
1
ad
1
il
conceGo
di
 ruolo
assume
maggiore
importanza:
 29
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  29. 29. Auto
associazione
1
a
1
 matr
 nome
 marito
 (0,1)
 dipendente
 sposaM
 (0,1)
 moglie
   su
entrambi
rami
è
bene
specificare
il
ruolo:
 conviene

la
soluzione
con
due
relazioni
per
 evitare
ridondanze,
vincoli
ed
eccesso
di
valori
 nulli.
 30
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  30. 30. Auto
associazione
1
a
1
 DIPENDENTE
(MATR,
NOME)
 SPOSATI

(MOGLIE,
MARITO)
 FK:
 
MOGLIE
REFERENCES
DIPENDENTE
 FK:
 
MARITO
REFERENCES
DIPENDENTE
 31
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  31. 31. Auto
associazione
1
a
1
 CREATE TABLE DIPENDENTE (MATR ... NOT NULL, NOME ..., PRIMARY KEY (MATR) CREATE TABLE SPOSATI (MOGLIE ... NOT NULL, MARITO ... NOT NULL PRIMARY KEY (MOGLIE) FOREIGN KEY (MOGLIE) REFERENCES DIPENDENTE FOREIGN KEY (MARITO) REFERENCES DIPENDENTE); 32
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  32. 32. Associazione
n‐aria
   segue
la
traduzione
standard
   talvolta,
nella
relazione
che
traduce
l’associazione,
 la
chiave
oGenuta
componendo
le
chiavi
di
tuGe
le
 enMtà
partecipanM
è
una
superchiave,
cioè
una
 chiave
composta
il
cui
set
di
componenM
non
è
 minimale
(la
chiave
vera
è
un
soGoinsieme)
   Esempio:
progek‐parM‐magazzini
 33
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  33. 33. Associazione
n‐aria
 prj
 progeGo
 descrizione
 cod_p
 qta
 (1,n)
 consegna
 nome
 (1,n)
 Mpo
 parte
 data
 (1,n)
 (1,n)
 cod_m
 nome
 magazzino
 distanza
 34
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  34. 34. Associazione
n‐aria
 PROGETTO
(PRJ,
DESCRIZIONE)
 PARTE
(COD_P,
NOME,
TIPO)
 MAGAZZINO
(COD_M,
NOME,
DISTANZA)
 CREATE TABLE PROGETTO (PRJ... NOT NULL, DESCRIZIONE... , PRIMARY KEY (PRJ)); CREATE TABLE PARTE (COD_P ... NOT NULL, NOME…, TIPO…, PRIMARY KEY (COD_P)); CREATE TABLE MAGAZZINO (COD_M…. NOT NULL, NOME ..., DISTANZA…, PRIMARY KEY (COD_M)); 
non
c’è
una
relazione
per
la
data
 

la
data
era
un’enMtà
fikzia
messa
nello
schema
per
 garanMre
l’unicità
delle
consegne,
comparirà
infak
nella
 definizione
della
chiave
 35
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  35. 35. Associazione
n‐aria
 l’associazione
diventa:
 CONSEGNA
(PRJ,
COD_P,
COD_M,
DATA,
QTA)
 FK: 
PRJ
REFERENCES
PROGETTO
 FK: 
COD_M
REFERENCES
MAGAZZINO
 FK:
 
COD_P
REFERENCES
PARTE
 CREATE TABLE CONSEGNA (PRJ ... NOT NULL, COD_P... NOT NULL, COD_M... NOT NULL, DATA... NOT NULL, QTA ... PRIMARY KEY (PRJ, COD_P, COD_M, DATA) FOREIGN KEY (PRJ) REFERENCES PROGETTO FOREIGN KEY (COD_M) REFERENCES MAGAZZINO FOREIGN KEY (COD_P) REFERENCES PARTE); ipoMzziamo
che
(PRJ,
COD_P,
COD_M,
DATA)
 sia
una
superchiave:
 36
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  36. 36. Associazione
n‐aria
   una
parte
esiste
in
un
solo
magazzino,
quindi
COD_P
è
 associato
ad
un
solo
COD_M,
cioè
determina
COD_M,
 allora
la
presenza
di
COD_M
nella
chiave
è
ridondante:
 CONSEGNA
(PRJ,
COD_P,
COD_M,
DATA,

QTA)
 FK: 
PRJ
REFERENCES
PROGETTO
 FK: 
COD_M
REFERENCES
MAGAZZINO
 FK:
 
COD_P
REFERENCES
PARTE
 • 
COD_M
è
ridondante
anche
nella
relazione
 37
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  37. 37. Associazione
n‐aria
   infak,
se
una
parte
esiste
in
un
solo
magazzino:
 prj
 descrizione
 progeGo
 cod_p
 qta
 (1,n)
 nome
 consegna
 (1,n)
 Mpo
 parte
 data
 (1,n)
 (1,1)
 cod_m
 nome
 magazzino
 sta
 distanza
 (1,n)
 38
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  38. 38. Associazione
n‐aria
 PROGETTO
(PRJ,
DESCRIZIONE)
 MAGAZZINO
(COD_M,
NOME,
DISTANZA)
 PARTE
(COD_P,
NOME,
TIPO,
COD_M)

 FK:
 
COD_M

REFERENCES
MAGAZZINO
 39
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  39. 39. Associazione
n‐aria
 CREATE TABLE PROGETTO (PRJ... NOT NULL, DESCRIZIONE... , PRIMARY KEY (PRJ)); CREATE TABLE MAGAZZINO (COD_M... NOT NULL, NOME ..., DISTANZA ..., PRIMARY KEY (COD_M)); CREATE TABLE PARTE (COD_P ... NOT NULL, NOME..., TIPO..., COD_M... NOT NULL, PRIMARY KEY (COD_P), FOREIGN KEY (COD_M) REFERENCES MAGAZZINO); 40
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  40. 40. Associazione
n‐aria
 • la
chiave
foresMera
nella
relazione

PARTE
traduce
 l’associazione
STA
(1
a
N)
ed
elimina
le
ripeMzioni
nella
 relazione

CONSEGNA
 • l’associazione
diventa:
 CONSEGNA
(PRJ,
COD_P,
DATA,

QTA)
 FK:
 
PRJ
REFERENCES
PROGETTO
 FK:
 
COD_P
REFERENCES
PARTE
 CREATE TABLE CONSEGNA (PRJ ... NOT NULL, COD_P... NOT NULL, DATA... NOT NULL, QTA PRIMARY KEY (PRJ, COD_P, DATA) FOREIGN KEY (PRJ) REFERENCES PROGETTO FOREIGN KEY (COD_P) REFERENCES PARTE); 41
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)

  41. 41. Commento
   nel
caso
precedente
la
dipendenza
tra
magazzino
e
 parte
non
era
stata
espressa
sulla
associazione
n‐aria,
 abbiamo
ipoMzzato
di
scoprirla
nella
fase
di
progeGo
 logico
   se
il
progeGo
conceGuale
è
ben
faGo
casi
del
genere
 non
sono
frequenM
   diverso
è
il
caso
in
cui
si
vogliono
esprimere
dei
vincoli
 che

richiederebbero
un
uso
complicato
di
enMtà
di
 collegamento
con
idenMficazione
esterna
   il
ricontrollo
delle
chiavi
delle
relazioni
è
quindi
 importante
 42
 Basi
di
DaM
‐
ProgeGo
Logico
Relazionale
(Parte
2)


×