Corso di Basi di Dati Personale Universitario Esercitazioni Esercizi

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