0.1. PROVA SCRITTA SI20020711
0.1
1
Prova Scritta SI20020711
Esercizio 2
Nota : La traduzione in relazionale si può effettuare applicando per le associazioni le regole di
traduzione date:
1. traduzione standard, sempre applicabile
2. Altre traduzioni non standard, applicabili quando in un’associazione R vi sono entità Ei che
partecipano con molteplicità unitaria: max-card(Ei, R) = 1.
Applicando le regole date (traduzione standard, altre traduzioni non standard) lo schema relazionale
ottenuto è sempre in terza forma normale!
Dato uno schema E/R, nella sua traduzione si possono tradurre alcune associazioni con la traduzione
standard ed altre con traduzioni non standard.
Alcune volte nel compito è richiesto esplicitamente di tradurre un’associazione con un certo tipo di
traduzione. Ad esempio: Inglobare R3 ed R4 in E4.
Nota : Nella traduzione standard devo introdurre una relazione per ciascuna associazione, ad eccezione delle associazioni relative a componenti di identificatori esterni: infatti (vedi pagina 3 delle
dispense sul sito “Eliminazione Identificatori Esterni”) tale associazione è automaticamente semplificata e tradotta grazie alla introduzione della foreign key.
Si noti inoltre che normalmente nelle associazioni relative a componenti di identificatori esterni non
vengono riportati attributi: infatti un attributo su tale associazione può essere rappresentato (e viene
normalmente rappresentato) in forma equivalente come attributo sull’entità identificata esternamente:
A1
B
A2
E1
A
(1,N)
(1,1)
E2
B1
B2
C2(1,N)
C1
è equivalente a
A1
B
A2
E1
(1,N)
A
(1,1)
E2
C1
B1
B2
C2(1,N)
2
Traduzione standard : Per fare un esempio anche di associazione ternaria, consideriamo R1 ternaria
con anche E2 e con card(E2, R1) = (0, 1).
Lo schema relazionale e’ il seguente (nella traduzione delle associazioni ricordarsi di mettere le foreign key not null e le eventuali AK . . . ):
E1(K1-E1,A1)
E11(K1-E11)
FK: K1-E11 REFERENCES E1
E12(K1-E12,AE1)
FK: K1-E12 REFERENCES E1
E2(K1-E11,A2)
FK: K1-E11 REFERENCES E11
E3(K3,A3)
E4(K4,A4)
R1(K1-E11,A2,K3,K1-E12,AR1)
AK: K1-E12
FK: K1-E11,A2 REFERENCES E2
FK: K3 REFERENCES E3 NOT NULL
FK: K1-E12 REFERENCES E12 NOT NULL
R2(K4,K3,AR2)
AK: K3
FK: K3 REFERENCES E3 NOT NULL
FK: K4 REFERENCES E4
R3(K4-RUOLO1,K4-RUOLO2)
AK: K4-RUOLO2
FK: K4-RUOLO1 REFERENCES E4
FK: K4-RUOLO2 REFERENCES E4 NOT NULL
R4(K1-E11,A2,K3,AS,AM)
FK: K1-E11,A2 REFERENCES E2
FK: K3 REFERENCES E3
AMR(K4-RUOLO1,AMR)
FK: K4-RUOLO1 REFERENCES R3
0.1. PROVA SCRITTA SI20020711
3
Altre traduzioni non standard
Nota : Applicando le regole date per queste altre traduzioni, lo schema relazionale ottenuto è sempre
in terza forma normale!
1) Inglobare R3 ed R4 in E4 ; in questo modo non devo più introdurre le relazioni R3 ed R4.
E3(K3,A3) (invariata rispetto alla traduzione standard)
E4(K4,A4, K3, AR2, K4-RUOLO2)
AK: K3
AK: K4-RUOLO2
FK: K3 REFERENCES E3 NOT NULL
FK: K4-RUOLO2 REFERENCES E4
Si noti che nella traduzione di R3 si poteva usare anche, indifferentemente, K4-RUOLO1:
E4(K4,A4, K3, AR2, K4-RUOLO1)
AK: K3
AK: K4-RUOLO1
FK: K3 REFERENCES E3 NOT NULL
FK: K4-RUOLO1 REFERENCES E4
L’unico punto particolare di tale trasformazione è la traduzione dell’attributo multiplo ARM: come già
fatto per la traduzione standard, prima di tradurre l’attributo multiplo devo reificare R3 e quindi introdurre una relazione AMR in cui metto come chiave l’insieme AMR + ChiaveDiR3. Però adesso
non c’è una relazione R3 perchè è in E4: cosa mettere in AMR come ChiaveDiR3? La risposta è la
chiave di E4 in quanto R3 è adesso inglobata in E4. Avremo quindi:
AMR(AMR,K4)
FK: K4 REFERENCES E4
4
Per meglio evidenziare questa soluzione facciamo riferimento ad un caso reale invece che simbolico,
considerando le seguenti corrispondenze:
E3 = STUDENTE
K3 = MATR
A3 = NOME
R2 = RILASCIO
AR2 = DATA
E4 = LIBRETTO
K4 = CODLIB
A4 = TIPO
R3 = SOSTITUZIONE
RUOLO1 = SOSTITUTO
RUOLO2 = SOSTIUITO
AMR = MOTIVI
Si ottiene
STUDENTE(MATR,NOME)
LIBRETTO(CODLIB,TIPO, MATR, DATA, CODLIB-SOSTIUITO)
AK: MATR
AK: CODLIB-SOSTIUITO
FK: MATR REFERENCES STUDENTE NOT NULL
FK: CODLIB-SOSTIUITO REFERENCES LIBRETTO
MOTIVI(MOTIVI,K4)
FK: CODLIB REFERENCES LIBRETTO
Si noti che nella traduzione di R3 = SOSTITUZIONE si poteva usare anche, indifferentemente,
K4-RUOLO1 = SOSTITUTO:
LIBRETTO(CODLIB,TIPO, MATR, DATA, CODLIB-SOSTITUTO)
AK: MATR
AK: CODLIB-SOSTITUTO
FK: MATR REFERENCES STUDENTE NOT NULL
FK: CODLIB-SOSTITUTO REFERENCES LIBRETTO
0.1. PROVA SCRITTA SI20020711
5
2) Considerare R1 ternaria con anche E2 e con card(E2, R1) = (0, 1) ed inglobare R1 in E12
Per le associazioni ternarie (ed n-arie in generale) è stato detto che si applica la traduzione standard e
quindi si introduce una relazione R1 . . .
In questo caso si chiede di inglobare/compattare R1 in E12: è possibile? La risposta è positiva in
quanto si può estendere la regola “Traduzione con due relazioni” data per le associazioni binarie unoa-uno e uno-a-molti ed ottenere :
un’associazione n-aria R tra E1, E2, . . . , En può essere compattata in una delle entità Ei
che partecipa con molteplicità unitaria
(cioè max-card(Ei, R) = 1) includendo in Ei gli attributi di R e le chiavi primarie di tutte
le altre entità come foreign key; tali foreign key saranno vincolate ad essere NOT NULL
se e sole se min-card(Ei, R) = 1.
Inoltre ogni chiave primaria di Ej 6= Ei tale che Ej che partecipa con molteplicità unitaria
(cioè max-card(Ej, R) = 1) sarà chiave alternativa.
Tale regola può essere derivata anche sulla base della reificazione dell’associazione R.
Si noti che nel caso di n = 2 si riottengono le regole viste per le associazioni binarie uno-a-uno e
uno-a-molti.
Applichiamola al caso di R1 : inglobare R1 in E12.
E2(K1-E11,A2) (invariata rispetto alla traduzione standard)
FK: K1-E11 REFERENCES E11
E3(K3,A3) (invariata rispetto alla traduzione standard)
E12(K1-E12, AE1, K3, K1-E11,A2, AR1)
FK: K1-E12 REFERENCES E1
AK: K1-E11,A2
FK: K3 REFERENCES E3 NOT NULL
FK: K1-E11,A2 REFERENCES E2 NOT NULL
Si noti che min-card(E12, R1) = 1 per le foreign key relative alle altre entità (E3 e E2) devo mettere
NOT NULL
3) Considerare R1 ternaria ed inglobare R1 in E2. Rispetto a prima, si noti che adesso abbiamo
min-card(E2, R1) = 0 quindi per le foreign key relative alle altre entità (E3 e E12) non devo mettere
NOT NULL
E12(K1-E12,AE1) (invariata rispetto alla traduzione standard)
FK: K1-E12 REFERENCES E1
E3(K3,A3) (invariata rispetto alla traduzione standard)
E2(K1-E11,A2, K3, K1-E12, AR1)
FK: K1-E11 REFERENCES E11
AK: K1-E12
FK: K3 REFERENCES E3
FK: K1-E12 REFERENCES E12
Scarica

0.1 Prova Scritta SI20020711