Officine: specifica
ner
Descrivere lo schema concettuale corrispondente ad un’applicazione
riguardante un insieme di officine, facendo riferimento alle seguenti
specifiche.
eg
Delle officine interessano: nome, indirizzo, numero di dipendenti,
dipendenti (almeno uno) con l’informazione su quanti anni di servizio, e
direttore. Si noti che ogni officina ha uno ed un solo direttore ed ogni
ng
direttore dirige una ed una sola officina. Dei dipendenti e dei direttori
interessano: codice fiscale, indirizzo, numeri di telefono e anni di anzianità.
Dei direttori interessa anche l'età. Si noti che un direttore non è
I
necessariamente un dipendente di officina (ma può esserlo). Ogni
riparazione è effettuata da una ed una sola officina, e riguarda uno ed un
solo veicolo. Di ogni riparazione interessano: codice (univoco nell'ambito
re
dell'officina), ora e data di accettazione del veicolo, e, nel caso di
riparazione terminata, ora e data di riconsegna del veicolo. Dei veicoli
interessano: modello, tipo, targa, anno di immatricolazione, e proprietario.
ive
Ogni veicolo ha uno ed un solo proprietario. Dei proprietari di veicoli
interessano: codice fiscale, indirizzo, e numeri di telefono.
V
ner
CodFis (0,n)
Nome
(1,1) Proprietario
Officina Dirige Persona
Indirizzo
Età (1,1)
eg
AnniServizio Direttore Dipendente
Ripara
ng
(1,n) AnniAnz (1,n) AnniAnz
Lavora
(1,1)
Codice
(1,1) I
Riparazione
OraAccettazione
DataAccettazione
Possiede
re
Relativa OraRiconsegna
Terminata DataRiconsegna
ive
Targa
(1,1)
Veicolo
Modello Vincoli esterni: – riconsegna dopo accettazione
Tipo AnnoImm – vincolo che lega NumDip alle istanze in Lavora
V
ner
Nome (1,1) (0,n)
CodFis Proprietario
Officina Dirige Persona
Indirizzo (1,1) (0,1) (0,1)
eg
Età Direttore ISA-Dr-P
AnniServizio (1,1) ISA-Dp-P
Ripara AnniAnz (1,1)
ng
(1,n) (1,n)
Lavora Dipendente
(1,1)
AnniAnz
Codice
(1,1) I
Riparazione
(0,1)
OraAccettazione
DataAccettazione
OraRiconsegna
Possiede
re
ISA-T-R Terminata DataRiconsegna
Relativa (1,1)
ive
Targa
(1,1)
Veicolo Vincoli esterni: – riconsegna dopo accettazione
Modello – vincolo che lega NumDip alle istanze in Lavora
Tipo AnnoImm
V
ner
foreign key: Officina[Nome] ⊆ Dirige[Officina]
inclusione: Officina[Nome] ⊆ Lavora[Officina]
Persona(CodFis, Indirizzo)
eg
Direttore(CodFis, Eta, AnniAnz)
foreign key: Direttore[CodFis] ⊆ Persona[CodFis]
foreign key: Direttore[CodFis] ⊆ Dirige[Direttore]
ng
Dipendente(CodFis, AnniAnz)
foreign key: Dipendente[CodFis] ⊆ Persona[CodFis]
inclusione: Dipendente[CodFis] ⊆ Lavora[Dipendente]
I
Dirige(Officina, Direttore)
foreign key: Dirige[Officina] ⊆ Officina[Nome]
re
foreign key: Dirige[Direttore] ⊆ Direttore[CodFis]
chiave: Direttore
ive
Lavora(Officina, Dipendente, AnniServizio)
foreign key: Lavora[Officina] ⊆ Officina[Nome]
foreign key: Lavora[Dipendente] ⊆ Dipendente[CodFis]
V
ner
foreign key: TelPer[CodFis] ⊆ Persona[CodFis]
foreign key: TelPer[Telefono] ⊆ Telefono[Numero]
Telefono(Numero)
inclusione: Telefono[Numero] ⊆ TelPer[Telefono]
eg
Veicolo(Targa, Modello, Tipo, AnnoImm, Proprietario)
foreign key : Veicolo[Proprietario] ⊆ Persona[CodFis]
ng
Riparazione(Codice, Officina, OraAcc, DataAcc, Veicolo)
foreign key: Riparazione[Officina] ⊆ Officina[Nome]
foreign key: Riparazione[Veicolo] ⊆ Veicolo[Targa]
I
Terminata(Codice, Officina, OraRic, DataRic)
foreign key: Terminata[Codice, Officina] ⊆
Riparazione[Codice, Officina]
re
Vincoli esterni:
• riconsegna dopo accettazione
ive
• vincolo che lega Officina[NumDip] alle istanze in Lavora
• vincolo su Direttore[AnniAnz] e Dipendente[AnniAnz] derivante
dall’eliminazione ISA
V
ner
• Quando si accede ai direttori, interessano anche tutti i dati
eg
relativi all’officina che dirigono e viceversa, quando si accede
alle officine, interessano anche tutti i dati relativi al loro direttore.
ng
• Solitamente non interessano i dati anagrafici dei direttori.
• Quando si accede agli impiegati interessano anche i dati
anagrafici.
I
• Un’operazione frequente è la stampa dell’elenco di tutte le
riparazioni (terminate e non), con officina, autoveicolo e ora e
re
data di accettazione ed eventuale riconsegna.
ive
V
ner
• Quando si accede ai direttori, interessano anche tutti i dati relativi
all’officina che dirigono e viceversa quando si accede alle officine,
interessano anche tutti i dati relativi al loro direttore. Å
eg
– accorpamento forte di Direttore, Dirige e Officina
• Solitamente non interessano invece i dati anagrafici dei direttori. Å
– non c’è partizionamento orrizontale di Persona in direttori e non
ng
• Quando si accede agli impiegati interessano anche i dati anagrafici.
– partizionamento orrizontale di Persona in dipendenti e non
I
– accorpamento forte tra l’entità risultante e Dipendente
• Un’operazione frequente è la stampa dell’elenco di tutte le riparazioni
re
(terminate e non), con officina, autoveicolo e ora e data di accettazione
ed eventuale ora e data di riconsegna. Å
– accorpamento debole di Terminata in Riparazione
ive
• Accorpamento debole di Telefono in TelPer allo scopo di eliminare una
relazione.
V
ner
Officina(Nome, NumDip, Indirizzo, Direttore, EtaDir, AnniAnzDir)
chiave: Direttore
inclusione: Officina[Nome] ⊆ Lavora[Officina]
PersonaNonDip(CodFis, Indirizzo)
eg
Dipendente(CodFis, AnniAnz, Indirizzo)
inclusione: Dipendente[CodFis] ⊆ Lavora[Dipendente]
ng
Lavora(Officina, Dipendente, AnniServizio)
foreign key: Lavora[Officina] ⊆ Officina[Nome]
foreign key: Lavora[Dipendente] ⊆ Dipendente[CodFis]
I
TelPer(CodFis, Telefono)
foreign key: TelPer[CodFis] ⊆ Persona[CodFis]
Veicolo(Targa, Modello, Tipo, AnnoImm, Proprietario)
re
Riparazione(Codice, Officina, OraAcc, DataAcc, Veicolo, OraRic*, DataRic*)
foreign key: Riparazione[Officina] ⊆ Officina[Nome]
ive
foreign key: Riparazione[Veicolo] ⊆ Veicolo[Targa]
V
ner
• PersonaNonDip e Dipendente sono disgiunti:
– PersonaNonDip[CodFis] ∩ Dipendente[CodFis] = ∅
• Vincoli risultanti dai vincolo di foreign key verso Persona
– Officina[Direttore] ⊆ PersonaNonDip[CodFis] ∪ Dipendente[CodFis]
eg
– Veicolo[Proprietario] ⊆ PersonaNonDip[CodFis] ∪ Dipendente[CodFis]
– TelPer[CodFis] ⊆ PersonaNonDip[CodFis] ∪ Dipendente[CodFis]
• Vincoli esterni:
ng
– riconsegna dopo accettazione
– vincolo che lega Officina[NumDip] alle istanze in Lavora
– vincolo su Officina[AnniAnzDir] e Dipendente[AnniAnz] derivante
dall’eliminazione ISA
I
Viste per ricostruire le relazioni dello schema originario:
view Persona = PersonaNonDip ∪ PROJCodFis,Indirizzo(Dipendente)
re
view OfficinaOrig = PROJNome, NumDip, Indirizzo(Officina)
view Direttore = PROJDirettore, EtaDir, AnniAnzDir (Officina)
ive
view Dirige = PROJNome, Direttore(Officina)
view Terminata = PROJCodice, Officina, OraRic, DataRic(SEL OraRic NOT NULL(Riparazione))
view RiparazioneOrig = PROJCodice, Officina, OraAcc, DataAcc, Veicolo(Riparazione)
view Telefono = PROJTelefono(TelPer)
V
ner
Occorre gestire informazioni su :
• Le transazioni (con codice, data, valore) di vendita e affitto immobili,
che vengono effettuate dalle agenzie, delle quali interessa il numero
identificativo, e la città di residenza. Ogni transazione è effettuata da
eg
una agenzia e riguarda un immobile.
• Gli immobili (con codice, indirizzo, città di ubicazione, metri quadrati e
ng
numero locali) oggetto delle transazioni. Alcuni immobili sono di
interesse storico, e di essi interessa l'anno di costruzione. Altri sono
ristrutturati, e di essi interessa la data di ultima ristrutturazione.
I
• Gli enti che acquistano, vendono, danno in affitto o prendono in affitto
gli immobili. Degli enti interessa il codice fiscale, l'indirizzo, la città e la
re
regione di residenza. Gli enti sono persone (dei quali interessa anche
nome, cognome, professione e città di nascita) o aziende (delle quali
interessa il capitale sociale e il numero di dipendenti).
ive
• Degli affitti interessa anche il periodo di affitto.
V
ner
1. I vari comuni chiedono le transazioni dell’ultimo anno che
coinvolgono vendite effettuate da persone (con codice fiscale e
eg
indirizzo). (10 volte al giorno, on line)
2. I vari comuni chiedono le transazioni dell’ultimo anno che
coinvolgono affitti ottenuti da aziende (con codice fiscale e
ng
indirizzo). (10 volte al giorno, on line)
3. Vari uffici amministrativi chiedono la situazione delle transazioni
I
dell’ultimo mese, con data ultima ristrutturazione (se esiste) e
anno di costruzione (se noto), con codice e indirizzo degli
immobili coinvolti. (1 volta al giorno, on line)
re
4. Si richiede la situazione degli immobili ristrutturati, con data
ultima ristrutturazione (1 volta l’anno, batch).
ive
V
ner
Transazioni: 100 milioni (50 milioni affitto, e 50 milioni vendita)
Persone: 10 milioni
Aziende: 2 milioni
eg
Immobili: 50 milioni
Storici: 2 milioni
ng
Ristrutturati: 20 milioni
Agenzie: 100.000
Città: 1000
• I Note
Uno su 10 immobili ha una transazione che lo riguarda.
re
• 4/5 di acquisti di immobili sono effettuate da persone.
• 4/5 di affitti di immobili sono effettuate da aziende.
ive
• La gran parte degli immobili storici sono ristrutturati.
• Ogni mese si prevedono circa 500 transazioni.
V
ia
Codice Data Valore
NumIdent
ner
(1,n) (1,1) (1,1)
Agenzia Gestisce Transazione
(1,1) (1,1)
eg
Luogo Regione
Nome
(0,1) Vendita Affitto
ng
Citta Contratto Periodo Riguarda
vend/
CF comp/ daAff Indirizzo Codice
inAff
NumLocali
I
Risiede
Nome
(1,1)
Ente
Indirizzo
NumDip
(1,1)
Immobile
re
(1,1) Anno mq
Nascita Persona Azienda
Ristrut-
Storico
ive
Professione Cognome CapSociale turato
Ubicato
Vincoli esterni: Data
Per le città in cui risiedono gli enti deve essere specificata la regione
V
ner
1. non ci sono ridondanze da eliminare
eg
2. non ci sono attributi multivalore da eliminare
ng
3. non ci sono attributi composti da eliminare
4. eliminazione delle ISA e delle generalizzazioni
I
re
ive
V
ia
Codice Data Valore
ner
NumIdent
(1,n) (1,1) (1,1)
Agenzia Gestisce Transazione
(1,1) (1,1)
eg
ISA-V-T ISA-A-T
Luogo Regione
Nome (1,1) (1,1)
(0,1) Contratto Periodo
ng
Vendita Affitto
Citta Riguarda
CF comp/ vend/
inAff Indirizzo Codice
(1,1) daAff
I
Risiede
ISA-P-E
Ente NumLocali
Indirizzo
ISA-A-E (1,1)
Immobile
mq
re
Nome (1,1) ISA-S-I ISA-R-I
(1,1)
(1,1) Anno (1,1) (1,1)
Nascita Persona Azienda
ive
NumDip
Ristrut-
Storico
Professione Cognome CapSociale turato
Ubicato
V
Data
M. Lenzerini – D.Lembo Basi di Dati – A.A. 2002/2003 Esercizio immobili - 6
ia
Attività della ristrutturazione
dello schema ER (cont.)
ner
5. Gli identificatori indicati nello schema sono tutti principali. Inoltre non
eg
ci sono cicli di identificazione.
6. Vincoli sullo schema ristrutturato
ng
• Per le città in cui risiedono gli enti deve essere specificata la regione.
• Ogni istanza di Transazione partecipa ad ISA-A-T oppure ad ISA-V-T
I
ma non ad entrambe (dovuto all’eliminazione della generalizzazione).
• Ogni istanza di Immobile partecipa ad ISA-S-I oppure ad ISA-R-I ma
re
non ad entrambe (dovuto all’eliminazione della generalizzazione).
ive
V
ner
foreign key: Agenzia[CittaResidenza] ⊆ Citta[Nome]
inclusione: Agenzia[NumIdent] ⊆ Transazione[Agenzia]
Citta(Nome, Regione*)
eg
Transazione(Codice, Data, Valore, Agenzia, Immobile, EnteProp,
EnteComp-Aff)
foreign key: Transazione[Agenzia] ⊆ Agenzia[NumIdent]
foreign key: Transazione[Immobile] ⊆ Immobile[Codice]
ng
foreign key: Transazione[EnteProp] ⊆ Ente[CF]
foreign key: Transazione[EnteComp-Aff] ⊆ Ente[CF]
I
Vendita(Transazione)
foreign key: Vendita[Transazione] ⊆ Transazione[Codice]
Affitto(Transazione, Periodo)
re
foreign key: Affitto[Transazione] ⊆ Transazione[Codice]
Ente(CF, Indirizzo,CittaResidenza)
foreign key: Ente[CittaResidenza] ⊆ Citta[Nome]
ive
Persona(CF, Nome, Cognome, Professione, CittaNascita)
foreign key: Persona[CF] ⊆ Ente[CF]
foreign key: Persona[CittaNascita] ⊆ Citta[Nome]
V
ner
foreign key: Azienda[CF] ⊆ Ente[CF]
Immobile(Codice, indirizzo, mq, CittaUbicazione)
foreign key: Immobile[CittaUbicazione] ⊆ Citta[Nome]
eg
Storico(Codice, Anno)
foreign key : Storico[Codice] ⊆ Immobile[Codice]
Ristrutturato(Codice, Data)
foreign key: Ristrutturato[Codice] ⊆ Immobile[Codice]
ng
Ulteriori Vincoli:
Affitto[Transazione] ∩ Vendita[Transazione] = ∅
I
Transazione[Codice] ⊆ Affitto[Transazione] ∪ Vendita[Transazione]
Persona[CF] ∩ Azienda[CF] = ∅
Ente[CF] ⊆ Persona[CF] ∪ Azienda[CF]
re
Storico[Codice] ∩ Ristrutturato[Codice] = ∅
Immobile[Codice] ⊆ Storico[Codice] ∪ Ristrutturato[Codice]
ive
Vincoli Esterni:
Per le città in cui risiedono gli enti deve essere specificata la regione.
V
ner
• Le operazioni 1 e 2 richiedono frequentemente informazioni su
eg
vendite effettuate da persone e affitti ottenuti da aziende.
• Si accede alle operazioni delle tabelle Storico e Ristrutturato
ng
prevalentemente attraverso la relazione Immobile (si veda
l’operazione 3). La presenza di valori nulli introdotti è giustificata
dalla operazione 3 stessa che richiede che tali valori siano
I
presenti nella risposta.
re
ive
V
ner
• Le operazioni 1 e 2 richiedono frequentemente informazioni su vendite
effettuate da persone e affitti ottenuti da aziende. Å
– Decomposizione orizzontale di Transazione in
• TransVendita
eg
• TransAffitto
– Accorpamento forte di Vendita e TransVendita
ng
– Decomposizione orizzontale di Vendita in
• VendDaPers
• VendDaAzienda
I
– Accorpamento forte di Affitto e TransAffitto
– Decomposizione orizzontale di Affitto in
• AffAdAzienda
re
• AffAPersona
• Si accede alle operazioni delle tabelle Storico e Ristrutturato
prevalentemente attraverso la relazione Immobile. Å
ive
– Accorpamento debole di Storico e Immobile
– Accorpamento debole di Ristrutturato e Immobile
V
ner
foreign key: Agenzia[CittaResidenza] ⊆ Citta[Nome]
inclusione: Agenzia[NumIdent] ⊆ Transazione[Agenzia]
Citta(Nome, Regione*)
VendDaPers(Codice, Data, Valore, Agenzia, Immobile, EnteProp, EnteCompAff)
eg
foreign key: VendDaPers[Agenzia] ⊆ Agenzia[NumIdent]
foreign key: VendDaPers[Immobile] ⊆ Immobile[Codice]
foreign key: VendDaPers[EnteProp] ⊆ Persona[CF]
ng
foreign key: VendDaPers[EnteComp-Aff] ⊆ Ente[CF]
VendDaAzienda(Codice, Data, Valore, Agenzia, Immobile, EnteProp, EnteCompAff)
foreign key: VendDaAzienda[Agenzia] ⊆ Agenzia[NumIdent]
I
foreign key: VendDaAzienda[Immobile] ⊆ Immobile[Codice]
foreign key: VendDaAzienda[EnteProp] ⊆ Ente[CF]
foreign key: VendDaAzienda[EnteComp-Aff] ⊆ Ente[CF]
re
AffAdAzienda(Codice, Data, Valore, Agenzia, Immobile, EnteProp, EnteCompAff,
Periodo)
ive
foreign key: AffAdAzienda[Agenzia] ⊆ Agenzia[NumIdent]
foreign key: AffAdAzienda[Immobile] ⊆ Immobile[Codice]
foreign key: AffAdAzienda[EnteProp] ⊆ Ente[CF]
foreign key: AffAdAzienda[EnteCompAff] ⊆ Azienda[CF]
V
ner
AffAPersona(Codice, Data, Valore, Agenzia, Immobile, EnteProp,
EnteCompAff, Periodo)
foreign key: AffAPersona[Agenzia] ⊆ Agenzia[NumIdent]
foreign key: AffAPersona[Immobile] ⊆ Immobile[Codice]
eg
foreign key: AffAPersona[EnteProp] ⊆ Ente[CF]
foreign key: AffAPersona[EnteCompAff] ⊆ Ente[CF]
ng
Ente(CF, Indirizzo,CittaResidenza)
foreign key: Ente[CittaResidenza] ⊆ Citta[Nome]
Persona(CF, Nome, Cognome, Professione, CittaNascita)
I
foreign key: Persona[CF] ⊆ Ente[CF]
foreign key: Persona[CittaNascita] ⊆ Citta[Nome]
re
Azienda(CF, NumDip, CapSociale)
foreign key: Azienda[CF] ⊆ Ente[CF]
ive
Immobile(Codice, indirizzo, mq, CittaUbicazione, Anno*, Data*)
foreign key: Immobile[CittaUbicazione] ⊆ Citta[Nome]
V
ner
• Persona[CF] ∩ Azienda[CF] = ∅
Ente[CF] ⊆ Persona[CF] ∪ Azienda[CF]
• VendDaPers, VendDaAzienda, AffAdAzienda e VendDaPers sono
disgiunti a coppie.
eg
• Vincoli esterni:
Per le città in cui risiedono gli enti deve essere specificata la regione
ng
Viste per ricostruire le relazioni dello schema originario:
view TransVendita = VendDaPers ∪ VendDaAzienda
I
view TransAffitto =
PROJCodice,Data,Valore,Agenzia,Immobile,EnteProp,EnteCompAff(AffAdAzienda ∪
re
AffAPers)
view Vendita = PROJCodice(TransVendita)
ive
view Transazione = TransVendita ∪ TransAffitto
view Storico = PROJCodice,Anno(Immobile)
view Ristrutturato = PROJCodice,Data(Immobile)
V