Esercitazione

Transcript

Esercitazione
'8,QJHJQHULD,QIRUPDWLFD
%DVLGL'DWL,
(VHUFLWD]LRQL
Sonia Bergamaschi ([email protected])
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: i progetti di ricerca
Il Consiglio Nazionale delle Ricerche vuole memorizzare dati sui
progetti di ricerca secondo le seguenti specifiche. Ogni progetto
ha un codice, un nome, l’anno al quale è relativo, una durata.
Ogni progetto di ricerca fa riferimento ad una o più discipline:
per ognuno di questi riferimenti occorre riportare da due a quattro
parole chiave. Le discipline sono raggruppate in settori: ogni
disciplina è identificata da un codice univoco all’interno del
settore di appartenenza ed ha una descrizione; un settore ha un
nome (univoco) ed un comitato. Ogni progetto di ricerca ha un
coordinatore scientifico che è un ricercatore; d’altra parte un
ricercatore può essere coordinato in uno ed un solo progetto. Ad
ogni progetto di ricerca partecipano da 1 a 8 ricercatori e per
ciascuno di essi viene specificato il numero di mesi uomo e il
costo orario; in un certo anno un ricercatore può partecipare al
massimo a 2 progetti di ricerca.
Basi di Dati
15
SCHEMA E/R
Basi di Dati
16
RICERCATORE(CF,Nome)
PROGETTO(Codice, anno, durata, nome, CFCoord)
AK: cfcoord
FK: CFCoord REFERENCES RICERCATORE
DISPONIILITA’-ANNUA(Anno, CFRic)
FK: CFRic REFERENCES RICERCATORE
PARTECIPA(Anno, CFRic, CodicePrg, mesi, Costo-Orario)
FK: CFRic, Anno REFERENCES DISPONIILITA’-ANNUA
FK: CodicePrg REFERENCES PROGETTO
SETTORE(Nome, Comitato)
DISCIPLINA(Codice, NomeSettore, Descrizione)
FK: NomeSettore REFERENCES SETTORE
PAROLECHIAVE(CodicePrg, NomeSettore, CodiceDisc, ParoleChiave)
FK: CodicePrg REFERENCES PROGETTO
FK: NomeSettore, CodiceDisc REFERENCES DISCIPLINA
Basi di Dati
17
Esercizio: il supermercato
Si vogliono rappresentare informazioni relative alle offerte ed agli sconti praticati da
una cooperativa di vendita ai propri soci.
La cooperativa è costituita da un certo numero di centri di vendita, descritti da un
codice e dal rispettivo indirizzo; i centri di vendita sono suddivisi in ipermarket ,
caratterizzati dal numero delle casse, e minimarket, caratterizzati dal numero dei
reparti.In una certa data, un socio (descritto dal codice fiscale, dal nome e dal telefono)
sottoscrive l'iscrizione alla cooperativa, in un preciso centro di vendita.
I prodotti venduti nei centri di vendita sono caratterizzati da un codice, dal prezzo e da
un descrizione. I minimarket offrono alcuni prodotti scontati di una certa percentuale;
per un dato prodotto, la percentuale di sconto varia da minimarket a minimarket e da
mese a mese. La cooperativa effettua delle offerte che possono essere ritirate dai soci
nei vari supermarket; un’offerta è descritta da un codice, dal prezzo e dal periodo di
validità ed è costituita da uno o più prodotti, in una determinata quantità. Occorre
memorizzare l’ipermarket in cui un socio ritira eventualmente una certa offerta (tale
supermarket non è necessariamente il punto vendita in cui il socio ha sottoscritto
l'iscrizione); un socio non può usufruire due volte della stessa offerta. Infine, occorre
memorizzare, per ogni ipermarket , le dieci offerte più vendute con il relativo numero
di vendite.
Basi di Dati
18
CF
NOME
TELEF
SOCIO
COD-NEG
NEGOZIO
ISCRITTO
(1,N)
(1,1)
INDIRIZZO
(0,N)
(t,e)
DATA
USA
DATA
(1,1)
IPER
IN
USO-OFFER
(1,1)
MINI
(0,N)
(1,1)
(0,N)
(0,10)
N-CASSE
N-REPARTI
USATA
TOTALE
(0,N)
COD-OFF
VALIDITÀ
PREZZO
TOPTEN
OFFERTA
MESE
(0,N)
(1,N)
CONTIENE
QUANTITÀ
COD-PROD
(0,N)
PRODOTTO
DESCRIZIONE
%SCONTO
SCONTO
(0,N)
MESE
(0,N)
PREZZO
Basi di Dati
19
negozio(cod-neg,indirizzo)
iper(cod-neg,num-casse)
FK: cod-neg REFERENCES negozio
mini(cod-neg, num-reparti)
FK: cod-neg REFERENCES negozio
socio(CF,nome,telefono,cod-neg,data-iscr)
FK: cod-neg REFERENCES negozio
offerta(cod-off,validità,prezzo)
contiene(cod-off,cod-prod,quantità)
FK: cod-off REFERENCES offerta
FK: cod-prod REFERENCES prodotto
uso-offerta(cf-socio,cod-off, cod-neg,data)
FK: cf-socio REFERENCES socio
FK: cod-off REFERENCES offerta
FK: cod-neg REFERENCES iper
prodotto(cod-prod,descrizione,prezzo)
sconto(mese,cod-prod,cod-neg, %sconto)
FK: cod-prod REFERENCES prodotto
FK: cod-neg REFERENCES mini
topten(cod-neg,cod-off,totale)
FK: cod-off REFERENCES offerta
FK: cod-neg REFERENCES iper
Basi di Dati
20
Esercizio
Dato il seguente schema E/R si individuino le dipendenze
funzionali e si disegni uno schema E/R alternativo che non utilizzi
associazioni ternarie
codCliente
numero
Prenotazione
CLIENTE
(0,N)
(0,N)
POSTO
pagato
(0,N)
RAPPRESENT.
Basi di Dati
titolo
21
Uno stesso posto non può essere prenotato due volte per la stessa
rappresentazione
RAPPRESENTAZIONE, POSTO
CLENTE
titolo
RAPPRESENT.
(0,N)
PER
codCliente
(1,1)
posto
CLIENTE
PRENOTAZION.
FA
(0,N)
(1,1)
Basi di Dati
pagato
22
Dato il seguente schema E/R si individui le dipendenze funzionali
e si disegni uno schema E/R alternativo che non utilizzi
associazioni ternarie
codMedico
codPaziente
Appuntamento
MEDICO
(0,N)
(0,N)
PAZIENTE
ambulatorio
(0,N)
ORARIO
Basi
datadi Dati
ora
23
Né un medico né un paziente possono avere due appuntamenti
contemporaneamente
MEDICO, ORARIO
PAZIENTE
PAZIENTE, ORARIO
MEDICO
codPaziente
PAZIENTE
(0,N)
CON
codMedico
(1,1)
ora
MEDICO
APPUNTAMENTO
HA
(0,N)
(1,1)
Basi di Dati
data
24
ambulatorio
Esercizio: noleggio CD
Si vuole automatizzare la gestione di un noleggio di compact disk e
videocassette. Per ogni compact disk si vuole memorizzare, oltre al titolo,
all’autore e al genere musicale, anche il titolo e la durata di ogni canzone;
esistono dischi doppi che possono essere noleggiati solo insieme. Non interessa
memorizzare informazioni su autori di cui non sono presenti opere. Per ogni
videocassetta si memorizzano il titolo, il regista, il genere, la durata e i due attori
principali (se si tratta di un film). Si tenga presente che, sia per i compact disk
sia per le videocassette, possono essere disponibili più copie dello stesso titolo.
Per ogni copia interessa memorizzare la posizione nel magazzino (la codifica è
unica per compact disk e videocassette) e, in caso di noleggio, il numero di
tessera del cliente (la tessera ha durata annuale) e la data di effettuazione del
prestito. La durata di un prestito è di 3 giorni. Non interessa mantenere un
archivio storico dei prestiti. Ad un cliente possono essere dati in prestito più
titoli; un nuovo prestito viene rifiutato se risulta che il cliente non ha ancora
restituito un prestito scaduto. Per ogni cliente si memorizzano nome, cognome,
indirizzo e numero di documento. Ogni noleggio effettuato dà diritto ad un
‘punto’; al raggiungimento di 20 punti, il cliente viene omaggiato di un
noleggio.
Basi di Dati
25
Presente In
codOpera
titolo
genere
(1,N)
OPERA
autore
(1,1)
COPIA
posizione
(0,1)
(t,e)
Prestata a
CD
VHS
(1,N)
doppio
regista
Interpretato
da
(1,1)
(0,N)
durata
(0,2)
contiene
data
CLIENTE
(1,1)
nome
cognome
indirizzo
n. documento
Possiede
(1,N)
(1,1)
CANZONE
ATTORE
TESSERA
titolo
durata
nome
cognome
Basi di Dati
scadenza
punti
numero
26
TESSERE(numTessera, scadenzaTess, puntiTess)
CLIENTI(numTessera, nome, cognome, indirizzo, numDoc)
FK: numTessera REFERENCES TESSERE
OPERE(codOpera, titolo, genere)
CD(codOpera, doppio, autore)
FK: codOpera REFERENCES OPERE
VHS(codOpera, regista, durata, primoAttore, secondoAttore)
FK: codOpera REFERENCES OPERE
CANZONI(titoloCanz, codOpera, durata)
FK: codOpera REFERENCES CD
COPIE(posizione, codOpera)
FK: codOpera REFERENCES OPERE
PRESTITI(posizioneCopia, numTessera, data)
FK: posizioneCopia REFERENCES COPIE
FK: numTessera REFERENCES CLIENTI
Basi di Dati
27
TESSERE(numTessera, scadenzaTess, puntiTess)
CLIENTI(numTessera, nome, cognome, indirizzo, numDoc)
FK: numTessera REFERENCES TESSERE
CD(codOpera, titolo, genere ,doppio, autore)
VHS(codOpera, titolo, genere, regista, durata, primoAttore, secondoAttore)
CANZONI(titoloCanz, codOpera, durata)
FK: codOpera REFERENCES CD
COPIE(posizione, codOpera, tipoOpera)
codOpera =
PRESTITI(posizioneCopia, numTessera, data)
FK: posizioneCopia REFERENCES COPIE
FK: numTessera REFERENCES CLIENTI
Basi di Dati
28
Esercizio: Allevamento di lepri
Si vogliono rappresentare informazioni relative ad un allevamento di lepri.
Di una lepre, identificata da un codice, occorre rappresentare il peso e l’età. Le
lepri vengono mensilmente sottoposte a visite veterinarie: per ciascuna visita
occorre riportare la lepre, il medico veterinario (rappresentato dagli usuali dati
anagrafici) che l’ha sostenuta ed il risultato della visita.
Per la riproduzione delle lepri vengono formate delle coppie costituite da una
femmina e da un maschio: tali coppie non vengono mai cambiate, cioè una
femmina resta accoppiata sempre allo stesso maschio e viceversa. Dalle varie
coppie occorre tenere traccia di eventuali parti, memorizzandone la data, il
veterinario che ha assistito il parto e la lepri nate da tale parto con il rispettivo
peso al momento della nascita.
Basi di Dati
29
Cod.
Età
Peso
LEPRE
(t,e)
FEMMINA
(0,N)
MASCHIO
(0,1)
(0,1)
F
(1,1)
COPPIA
(1,1)
M
Risultato
(0,N)
VISITA
(0,N)
Mese
(0,N)
(1,1)
DI
MESE
Peso
(1,1)
data
VETRINARIO
(0,N)
PARTO
ASSISTE
CF
(1,1)
(0,N)
NASCITA
dati
Basi di Dati
30
Esercizio
Dato il seguente schema E/R si individui le dipendenze funzionali
e si disegni uno schema E/R alternativo che non utilizzi
associazioni ternarie
codListino
codProdotto
quota
LISTINO
(1,N)
(1,N)
PRODOTTO
prezzo
(0,N)
VALUTA
Basi di Dati
tipo
31
Non esistono dipendenze funzionali oltre a quella, banale,
LISINO, PRODOTTO, VALUTA
prezzo
codProdotto
PRODOTTO
(1,N)
DI
codListino
(1,1)
tipoValuta
LISTINO
QUOTAZIONE
(1,N)
(1,1)
CONTIENE
Basi di Dati
32
prezzo
Esercizio di progettazione relazionale
Discutere il progetto logico relazionale dello schema E/R
codPj
titolo
anno
(1,1) coordinato (o,n)
da
Progetto
codPr
nome
professore
(t,e)
(1,1)
strategico
(o,n) area di sviluppo
finalizzato
riguarda
fondi
codA
Basi di Dati
33
1° soluzione: collasso sulla superentità
PROG(CodProg, titolo, anno, sel, fondi, codProf,
codArea)
FK: codProf REFERENCES PROFESSORE
FK: codArea REFERENCES AREA
PROFESSORE(codProf,nome)
AREA(codArea)
Basi di Dati
34
2° soluzione: collasso verso il basso
PROG_STRAT(CodProg, titolo, anno, codProf,
fondi)
FK: codProf REFERENCES PROFESSORE
PROG_FIN(CodProg, titolo, anno, codProf,
codArea)
FK: codArea REFERENCES AREA
PROFESSORE(codProf,nome)
AREA(codArea)
Basi di Dati
35
3° soluzione: trasformazione tramite
associazioni
PROG (CodProg, titolo, anno, codProf)
FK: codProf REFERENCES PROFESSORE
PROG_STRAT(CodProg, fondi)
FK: CodProg REFERENCES PROG
PROG_FIN(CodProg, codArea)
FK: CodProg REFERENCES PROG
FK: codArea REFERENCES AREA
PROFESSORE(codProf,nome)
AREA(codArea)
Basi di Dati
36
DOCENTE(CFDOC, NOME COGNOME)
STUDENTE(CFSTUD,NOME,COGNOME)
ARGOMENTO(CODARG, DESCRIZIONE)
LEZIONE(CODARG, DATA, CFDOC, NUMSTUDENTI)
AK: DATA, CFDOC
FK: CODARG REFERENCES ARGOMENTO
FK: CFDOC REFERENCES DOCENTE
INTERROGAZIONE(CODARG, DATA, CFSTUD, VOTO)
FK: CODARG,DATA REFERENCES LEZIONE
FK: CFSTUD REFERENCES STUDENTE
Selezionare il codice fiscale, il nome e il cognome degli studenti che non sono mai
stati interrogati su un argomento con descrizione ‘Fisica’;
Selezionare il codice fiscale del docente che ha svolto lezioni su tutti gli argomenti
con descrizione ‘Fisica’;
Selezionare il codice fiscale del docente che ha sempre interrogato, cioè che durante
ogni sua lezione ha fatto almeno una interrogazione.
Basi di Dati
37
CICLISTA (NOMECICLISTA, NAZIONALITA’, ETA’)
GARA(NOMECORSA, ANNO, PARTENZA, ARRIVO)
Edizione di un certo anno della corsa NOMECORSA;
PARTENZA ARRIVO Sono le città di partenza e di arrivo.
PARTECIPA(NOMECORSA, ANNO, NOMECICLISTA, POSIZIONE)
FK: NOMECORSA,ANNO REFERENCES GARA
FK: NOMECICLISTA REFERENCES CICLISTA
NOMECICLISTA ha partecipato alla gara (NOMECORSA,ANNO) classificandosi in una
certa POSIZIONE o ritirandosi (POSIZIONE=‘R’)
selezionare i ciclisti che si sono classificati in prima posizione in una gara ciclistica partita da
Milano;
selezionare il nome dei ciclisti che non si sono mai ritirati al Giro (corsa con nome Giro);
selezionare le corse per le quali in ogni edizione c’è stato almeno un ritirato;
Basi di Dati
38
Nome
Cognome
Studente
Matricola
Codice
Indirizzo
Nome
Corso
(0,N)
(0,N)
Sostiene
Del
Esame
(1,1)
(1,1)
Codice
Voto
Esito
Studente (Matricola,Nome,Cognome,Indirizzo)
Corso (Codice,Nome)
Esame (Codice,Voto,Esito,MatrStud,IDCorso)
FK: MatrStud REFERENCES Studente
FK: IDCorso REFERENCES Corso
Basi di Dati
39
CREATE TABLE STUDENTE
(Matricola INT CONSTRAINT Chiave PRIMARY KEY,
Nome Char (20) NOT NULL,
Cognome Char (30) NOT NULL,
Indirizzo Char (50) NOT NULL);
CREATE TABLE CORSO
(Codice SMALLINT,
Nome Char(30) Not Null,
CONSTRAINT Chiave PRIMARY KEY (Codice));
CREATE TABLE ESAME
(Codice INT,
Voto SMALLINT NOT NULL,
Esito LOGICAL NOT NULL,
MatrStud INT,
IDCorso SMALLINT,
CONSTRAINT Chiave PRIMARY KEY (Codice)
CONSTRAINT FK1 FOREIGN KEY (MatrStud) REFERENCES Studente (Matricola),
CONSTRAINT FK2 FOREIGN KEY (IDCorso) REFERENCES Corso (Codice));
ALTER TABLE CORSO
ADD Docente CHAR(25)
Basi di Dati
40
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
41
Progetto Concettuale
Basi di Dati
42
Progetto Concettuale semplificato
Basi di Dati
43
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
44
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
45
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
46