Corso di Basi di Dati Personale Universitario Esercitazioni Esercizi E/R Maurizio Vincini ([email protected]) Esercizio: spettacoli estivi Si vogliono rappresentare informazioni relative alla gestione di manifestazioni artistiche durante l’estate. Una manifestazione, descritta da un codice e da un nome, consiste di due o più spettacoli; ogni spettacolo è descritto da un numero univoco all’interno della manifestazione nella quale è inserito e dall’ora di inizio. Durante uno spettacolo si esibiscono uno o più artisti (un’artista si può esibire al massimo una volta durante lo stesso spettacolo) ricevendo un certo compenso. Un’artista è descritto dal codice SIAE e dal nome d’arte. Per ogni artista si deve indicare necessariamente un altro artista che lo sostituisca in caso di indisponibilità; un’artista può essere indicato come sostituto di più artisti. Per ospitare gli spettacoli vengono adibiti opportuni luoghi; inoltre, in una certa data, un luogo può ospitare al massimo tre spettacoli, sia della stessa manifestazione che di manifestazioni differenti. Si disegni il modello concettuale del dominio descritto utilizzando il formalismo E/R. Basi di Dati 2 Determinazione concetti fondamentali Entità MANIFESTAZIONE: SPETTACOLO ARTISTA LUOGO Associazioni CONSISTE OSPITA ESIBIZIONE Associazione binaria MANIFESTAZIONE- SPETTACOLO Associazione binaria SPETTACOLO-LUOGO Associazione binaria ARTISTA-SPETTACOLO Basi di Dati 3 Schema Scheletro MANIFEST. SPETTACOLO CONSISTE ESIBIZIONE OSPITA ARTISTA LUOGO Basi di Dati 4 SVILUPPO ASSOCIAZIONE MANIFESTAZIONE-SPETTACOLO Numero Codice Ora-inizio Nome CONSISTE MANIFEST. (2,N) (1,1) SPETTACOLO • Una manifestazione consiste di 2 o più spettacoli; card(MANIFEST.,CONSISTE) = (2,N) • ogni spettacolo è descritto da un numero univoco all’interno della manifestazione nella quale è inserito. card(SPETTACOLO,CONSISTE) = (1,1) Basi di Dati 5 SVILUPPO ASSOCIAZIONE SPETTACOLO-LUOGO (NON CORRETTA) Numero Nome Ora-inizio Indirizzo OSPITA SPETTACOLO (0,3) (1,1) LUOGO • Per ospitare gli spettacoli vengono adibiti opportuni luoghi; inoltre, in una certa data, un luogo può ospitare al massimo 3 spettacoli, sia della stessa manifestazione che di manifestazioni differenti. •In questo modo si vincola un luogo ad ospitare in tutto tre spettacoli, mentre questo è valido solo per una certa data Basi di Dati 6 SVILUPPO ASSOCIAZIONE SPETTACOLO-LUOGO (CORRETTA) Si introduce una nuova entità DISPONIBILITA’che indica la disponibilita in un certo luogo di ospitare in una certa data uno spettacolo. Numero Ora-inizio SPETTACOLO (1,1) Nome Indirizzo OSPITA (0,3) LUOGO (0,N) HA (1,1) Basi di Dati DISPONIBILITA’ Data 7 SVILUPPO ASSOCIAZIONE SPETTACOLO-ARTISTA Codice-SIAE Nome-arte Numero Ora-inizio SPETTACOLO Compenso (1,N) (0,N) ARTISTA ESIBIZIONE Durante uno spettacolo si esibiscono uno o più artisti (un’artista si può esibire al massimo una volta durante lo stesso spettacolo) ricevendo un certo compenso. card(SPETTACOLO,ESIBIZIONE) = (1,N) card(ARTISTA,ESIBIZIONE) = (0,N) Basi di Dati 8 SVILUPPO ASSOCIAZIONE UNARIA ARTISTA-ARTISTA Codice-SIAE Sostituito Nome-arte (1,1) SOSTITUISCE ARTISTA Sostituto (0,N) Per ogni artista si deve indicare necessariamente un altro artista che lo sostituisca in caso di indisponibilità; un’artista può essere indicato come sostituto di più artisti. card(ARTISTA,SOSTITUITO) = (1,1) card(ARTISTA,SOSTITUTO) = (0,N) Basi di Dati 9 SCHEMA E/R Codice Numero Nome Compenso CONSISTE Ora-inizio MANIFEST. (2,N) (1,1) SPETTACOLO (1,N) ESIBIZIONE (1,1) codice-SIAE nome-arte Nome (0,N) OSPITA Indirizzo (0,3) LUOGO (0,N) HA (1,1) DISPONIBILITA’ (1,1) (1,1) ARTISTA Sostituito Sostituto (0,N) SOSTIT. Data Basi di Dati 10 MANIFESTAZIONE(Codice, Nome) LUOGO(Nome, Indirizzo) SPETTACOLO(codManif, Numero, OraInizio, NomeLuogo, DataDisp) FK: codManif REFERENCES MANIFESTAZIONE FK: NomeLuogo, DataDisp REFERENCES DISPONIBILITA’ ESIBIZIONE(codManif, NumSpettacolo, CodiceSIAE, Compenso) FK: codManif, NumSpettacolo REFERENCES SPETTACOLO FK: CodiceSIAE REFERENCES ARTISTA DISPONIBILITA’(NomeLuogo, Data) FK: NomeLuogo REFERENCES LUOGO ARTISTA(CodiceSIAE, NomeArte, CodiceSIAESostituto) FK: CodiceSIAESostituto REFERENCES ARTISTA Basi di Dati 11 Esercizio: il giardino zoologico Si vuole automatizzare il sistema di gestione degli animali in uno zoo. Ogni esemplare di animale ospitato è identificato dal suo genere e da un codice unico all’interno del genere di appartenenza. Per ogni esemplare si memorizzano la data di arrivo allo zoo, il nome proprio, il sesso, il paese di provenienza e la data di nascita. Lo zoo è diviso in aree; in ogni area c’è un insieme di case, ognuna destinata ad un diverso genere di animali. Ogni casa contiene un insieme di gabbie, ognuna contenente un solo esemplare. Ogni casa ha un solo addetto che pulisce ciascuna gabbia in un determinato giorno della settimana. Gli animali sono sottoposti periodicamente a controllo veterinario; in un controllo, un veterinario rileva il peso di un esemplare, diagnostica un’eventuale malattia e prescrive il tipo di dieta da seguire. Si disegni il modello concettuale del dominio descritto utilizzando il formalismo E/R. Basi di Dati 12 PAESE (1,1) peso dieta malattia (0,1) CONTROLLO (1,N) (0,N) di sottoposto a (1,1) nome appartiene ESEMPL. sesso veterinario data (1,1) (0,N) nome GENERE codArea (1,N) dataArrivo (1,1) ospitato in codEsempl. dataNascita in AREA (1,1) (1,1) (1,N) (1,1) in CASA (1,1) (1,1) GABBIA (1,N) afferisce pulita da (1,N) giornoPulizia posizione ADDETTO Basi di Dati codAddetto 13 GENERE(nome) AREA(CodArea) CONTROLLO(data, CodEsemplare, NomeGenere, peso, dieta, malattia,veterinario) FK: CodEsemplare, NomeGenere REFERENCES ESEMPLARE ADDETTO(codAddetto) CASA(CodArea, NomeGenere, codAddetto) FK: CodArea REFERENCES AREA FK: NomeGenere REFERENCES GENERE FK: codAddetto REFERENCES ADDETTO PAESE(Paese) ESEMPLARE(CodEsemplare, NomeGenere, Nome, Sesso, DataArrivo, DataNascita, PosizGabbia,Paese) AK: PosizGabbia FK: PosizGabbia REFERENCES GABBIA FK: NomeGenere REFERENCES GENERE FK: Paese REFERENCES PAESE GABBIA(Posizione,GiornoPulizia, NomeGenere, CodArea) FK: NomeGenere, CodArea REFERENCES CASA Basi di Dati 14 Esercizio: Azienda Informatica Il sistema informativo di una impresa che opera nel settore dell'informatica memorizza dati sui dipendenti e i loro curriculum nell'impresa, secondo le seguenti specifiche. I dipendenti hanno un nome, un cognome, una età e un codice fiscale. Sono divisi in programmatori, analisti e manager. Per i programmatori, occorre memorizzare il linguaggio di programmazione conosciuto; per gli analisti, il linguaggio concettuale conosciuto; per i manager, il nome del referente esterno per la programmazione. Programmatori e analisti seguono corsi, gli analisti almeno uno e i programmatori uno solo. I corsi hanno un titolo (univoco), una durata, e una data d'inizio. Un corso può essere propedeutico a più corsi, ma può avere solo un corso propedeutico a esso. I dipendenti lavorano a progetti (almeno uno e più di uno in generale), che sono identificati da un obiettivo e hanno uno stanziamento. Si chiede di realizzare il progetto concettuale del database secondo il modello ER, la traduzione in schema relazionale, la creazione del database con istruzioni SQL. Basi di Dati 15 Progetto Concettuale Basi di Dati 16 Progetto Concettuale semplificato Basi di Dati 17 Progetto logico: generazione dello schema relazionale DIP(CF,Nome,Cognome,Eta,Sel,Ling,Ling-conc,Ref) PROG(Obiettivo,Stanz) CORSO(Tit,Dur,D-inizio,Prop) FK: Prop REFERENCES CORSO(Tit) P-SEGUE(Dip,Corso) FK: Dip REFERENCES DIP(CF) FK: Corso REFERENCES CORSO(Tit) A-SEGUE(Dip, Corso) FK: Dip REFERENCES DIP(CF) FK: Corso REFERENCES CORSO(Tit) LAV(Dip, Prog) FK: Dip REFERENCES DIP(CF) FK: Prog REFERENCES PROG(Obiettivo) Basi di Dati 18 Scrivere le seguenti Query in SQL : 1) I corsi seguiti dai programmatori. 2) I dipendenti che hanno partecipato a un progetto con stanziamento > 1000. 3) I corsi propedeutici ai corsi seguiti da un analista dato. 1) SELECT DISTINCT Tit, Dur, [D-inizio], Prop FROM CORSO, [P-SEGUE] WHERE CORSO.Tit = [P-SEGUE].Corso; 2) SELECT DISTINCT D.CF, D.Nome, D.Cognome FROM PROG P, DIP D, LAV L WHERE D.CF = L.Dip AND P.Obiettivo = L.Prog AND P.Stanz >1000; Basi di Dati 19 3) SELECT DISTINCT C.Prop FROM CORSO C WHERE C.Tit IN (SELECT A.Corso FROM [A-SEGUE] A WHERE A.Dip = [valore] ) AND C.Prop IS NOT NULL ; Basi di Dati 20