0.1. PROVA SCRITTA SI20020711 0.1 1 Prova Scritta SI20020711 Esercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale. Nota : Per lo svolgimento di questo punto, la traduzione 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. Utilizzando la traduzione standard: . . . nella traduzione delle associazioni ricordarsi di mettere le foreign key not null e le eventuali AK . . . 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 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 0.1. PROVA SCRITTA SI20020711 3 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) (invariata) 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 4 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, AR2) 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, AR2) FK: K1-E11 REFERENCES E11 AK: K1-E12 FK: K3 REFERENCES E3 FK: K1-E12 REFERENCES E12 0.1. PROVA SCRITTA SI20020711 E1(K1-E1,A1) E11(K1-E11) FK: K1-E11 REFERENCES E1 E12(K1-E12,AE1,K7) AK: K7 NOT NULL FK: K1-E12 REFERENCES E1 E2(K1-E2,A21,A22) FK: K1-E2 REFERENCES E11 R1(K1-E2,A21,A22,K1-E12) FK: K1-E2,A21,A22 REFERENCES E2 FK: K1-E12 REFERENCES E12 NOT NULL AMR1(K1-E2,A21,A22,AMR1) FK: K1-E2,A21,A22 REFERENCES R1 E3(K3,A3) R4(K1-E2,A21,A22,K3,AR2) FK: K1-E2,A21,A22 REFERENCES E2 FK: K3 REFERENCES E3 NOT NULL R2(K4,K3,AR2) AK: K3 NOT NULL FK: K4 REFERENCES E4 FK: K3 REFERENCES E3 R3(K4-RUOLO2,K4-RUOLO1, K1,AR3) AK: K4-RUOLO1 NOT NULL FK: K4-RUOLO1 REFERENCES E4 FK: K4-RUOLO2 REFERENCES E4 FK: K1 REFERENCES E1 NOT NULL 5 6 Esercizio 1 Prima di discutere la soluzione osserviamo il Viaggio Aereo può essere considerato come una occorrenza, come un’istanza di un Volo in un determinato tempo, cioè in una determinata data. Lo schema di Volo e Viagio Areo sarà quindi comune a tutti quei casi dove appunto vogliamo rappresentare un certo tipo di evento ed il verificarsi di tale evento in un certo tempo ,,, A1 TEMPO A2 E1 (1,N) HA (1,1) E2 B1 B2 Insegnamenti Universitari : E1 = Insegnamento, con A1=Nome e A2=Crediti E2 = InsegnamentoAttivo, con TEMPO= AnnoAccademico, B1=NomeDocente e B2=Trimestre Voli e Viaggi aerei : E1 = Volo, con A1=CittaPartenza e A2=CittaArrivo E2 = Viaggi, con TEMPO= Data, B1=NumeroPasseggeri e B2=CodiceVelivolo Manifestazioni Canore : E1 = Manifestazione, con A1=Nome e A2=Tipo E2 = Edizione, con TEMPO= Anno, B1=Presentatore e B2=DataInizio Gare Ciclistiche : E1 = GaraCiclistica, con A1=Nome e A2=AnnoPrimaEdizione E2 = Edizione, con TEMPO= Anno, B1=NumeroPartecipanti e B2=DataInizio da fare