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