Progettazione Logica Esercitazione Informatica (modulo di Basi di Dati) Domenico Fabio Savo Email: domenicofabio.savo@unibg.it Web: https://cs.unibg.it/savo/
Collaudo veicoli (specifica) Si richiede di progettare lo schema concettuale di un'applicazione relativa a collaudi di prototipi condotti da un azienda produttrice di veicoli. Ogni prototipo ha un codice (identificativo) ed un costo di produzione. Per ogni prototipo, l'azienda può effettuare dei collaudi. Di ogni collaudo, che è relativo ad uno ed un solo prototipo, interessano il codice, la data di inizio, e la durata (in minuti). I collaudi sono di due tipi: su pista e su banco collaudo. Per ogni prototipo si effettua al più un collaudo su pista ed al più un collaudo su banco. Di ogni collaudo su pista interessa la temperatura esterna. Di ogni collaudo su banco interessa il banco prova utilizzato (esattamente uno). Ogni banco prova ha un codice identificativo ed interessa il suo livello di qualità (un intero). Inoltre, per ogni banco prova interessano (se ve ne sono) anche le nazioni presso le quali è stato omologato, con l'indicazione dell'anno di omologazione. Le nazioni rilasciano anche autorizzazioni a far circolare i prototipi nei propri territori, e tali autorizzazioni hanno un certo costo. Infine, di ogni nazione interessa il nome (identificativo) ed il numero di telefono al quale rivolgersi per richiedere le autorizzazioni di circolazione dei prototipi
Collaudo veicoli (schema concettuale) (0,N)
Collaudo veicoli (schema logico) Prototipo( codice, costo) CollaudoPista( codice, data, durata, temperatura, prototipo) Indice no duplicati CollaudoPista(prototipo) CollaudoBanco( codice, data, durata, banco, prototipo) Indice no duplicati CollaudoBanco(prototipo) Banco( codice, livello) Omologazione( banco, nazione, anno) Nazione( nome, telefono) Autorizzazione( prototipo, nazione, costo)
Museo: specifica Si progetti una porzione della base di dati per la gestione delle opere in un museo. Il museo possiede un insieme di opere che, a seconda dei periodi, possono essere o meno mostrate nelle sale. La base dati deve descrivere la situazione corrente, cioè quali sono le opere mostrate e in quali sale. Un opera è identificata da un codice ed è caratterizzata dal titolo, dall anno di realizzazione, dall anno di acquisto da parte del museo e dall autore; le opere si suddividono in quadri e sculture. Gli autori sono opportunamente descritti nella base dati: sono identificati da un codice e caratterizzati dal cognome, dal nome, dalla nazione e dalla data di nascita; per gli autori deceduti si vuole avere anche la data della morte. Non tutti gli autori sono necessariamente associati ad un opera. Il museo è fisicamente organizzato in sale: ogni sala è identificata da un numero, dal nome e dai metri quadri. Alla singola sala può essere associato un tema, descritto da un apposito elenco; si noti che lo stesso tema può essere associato a diverse sale, così come potrebbe non essere associato a nessuna sala (perché, in quel momento, non vi sono opere esposte che potrebbero far riferimento a quel tema). Un tema è identificato da un codice ed è caratterizzato da una descrizione (del testo). Infine, si vuole sapere quali opere sono esposte nelle varie sale; una stessa opera può essere esposta in una sala, ma potrebbe essere non esposta (quindi, essere implicitamente nel magazzino). Si svolga il progetto concettuale della base di dati.
Museo: progettazione concettuale codice nome cognome codice titolo nazione data_nascita Autore creata da (1, 1) Opera (0, 1) (T, e) (T, e) anno_ acquisto anno_ realizzazione Vivo Morto Quadro Statua esposta in data_morte codice descrizione Tema tema sala (0, 1) Sala numero nome superficie
Museo: progettazione logica Autore (codice, nome, cognome, nazione, data_nascita, tipo, data_morte*) Constraints su Autore: (tipo= vivo AND data_morte is null) OR (tipo= morto AND data_morte is not null) Opera Sala (codice, creata_da, titolo, anno_acquisto, anno_realizzazione, tipo, esposta_in_sala*) Constraints su Opera: tipo= quadro OR tipo= statua (numero, tema_sala*, nome, superficie) Tema (codice, descrizione)
Contratti telefonici: specifica Si progetti la base di dati per la gestione dei contratti telefonici di un operatore mobile. Il cuore del servizio è il contratto telefonico. Questo viene identificato dal numero di telefono ed è caratterizzato dalla data di attivazione del numero. In particolare, i contratti telefonici sono suddivisi in contratti a ricarica e contratti a consumo: per i primi, si ha il credito residuo; per i secondi, si hanno i minuti residui del mese. Ai contratti è normalmente associata una SIM la quale è identificata da un codice ed è caratterizzata dal tipo. Le SIM attualmente associate ad un contratto sono attive. Per le SIM attive si vuole sapere la data di attivazione. Si noti che possono esserci contratti temporaneamente senza SIM e che alcune SIM posso essere state disattivate. In questo caso, è di interesse conoscere oltre a quella che era la data di attivazione, anche la data di disattivazione e quale era il contratto telefonico su cui erano state attivate. Infine, per ogni contratto si registrano alcune informazioni sulle telefonate effettuate. Una telefonata è identificata da un numero univoco nell ambito del contratto, dalla data e ora, dalla durata, dal costo (deliberatamente non si vuole sapere il numero di telefono chiamato). Si svolga il progetto concettuale della base di dati.
Contratti telefonici: prog. concettuale minuti residui numero data attivazione Consumo Ricarica (T, e) Contratto telefonico (0, 1) (0 n) effettuata da credito residuo id associata a era associata a (1, 1) Telefonata data ora data attivazione (1, 1) Attiva Non Attiva (1, 1) Disattivata data attivazione costo durata SIM (T, e) data disattivazione codice tipo_sim
Contratti Telefonici: progettazione logica Telefonata (id, effettuata_da, data, ora, durata, costo) Contratto_tel (numero, data_attivazione, tipo, minuti_residui*, credito_residuo*) Constraints su Contratto_tel: (tipo= consumo AND minuti_residui is not null AND credito_residuo is null) OR (tipo= ricarica AND minuti_residui is null AND credito_residuo is not null) SIM_non_attiva (codice, tipo_sim) SIM_attiva (codice, tipo_sim, associata_a, data_attivazione) Indice senza duplicati su SIM_attiva (associata_a) SIM_disattivata (codice, tipo_sim, era_associata_a, data_attivazione, data_disattivazione)
Servizio sanitario: specifica Si progetti la base di dati di una Regione per la gestione delle informazioni sui ricoveri ospedalieri. I cittadini sono noti a priori alla Regione, in quanto hanno il codice del Servizio Sanitario Nazionale. Quindi, un cittadino è identificato dal codice suddetto ed è caratterizzato dagli usuali dati anagrafici. Anche gli ospedali sono noti a priori alla Regione: un codice li identifica e sono poi caratterizzati dal nome, dalla città, dall indirizzo e dal nome del Direttore Sanitario. La Regione riceve le informazioni sui ricoveri: il ricovero è identificato da un codice univoco per l ospedale nel quale viene effettuato, ed è caratterizzato dalla data di inizio, dai giorni, dal motivo e dal costo, nonché dal cittadino (paziente) ricoverato. I ricoveri avvengono per curare una o più patologie, che sono note a propri: ogni patologia è identificata dal codice, ed è caratterizzata dal nome, e da un livello di criticità (tipicamente, un numero). In particolare, si vogliono gestire due sottoinsiemi: quello delle patologie mortali e quello delle patologie croniche (i due sottoinsiemi potrebbero essere non disgiunti e sicuramente non sono esaustivi). Si svolga il progetto concettuale della base di dati.
Servizio sanitario: prog. concettuale CSSN nome cognome indirizzo cod nome città indirizzo data nascita luogo nascita Cittadino (0, 1) direttore sanitario (1, 1) Ospedale data durata motivo costo subito da (1, 1) Ricovero (1, 1) cod effettuato in cod (1, n) nome criticità Patologia relativo a (P, s) Mortale Cronica
Servizio Sanitario: progettazione logica Cittadino (CSSN, nome, cognome, data_nascita, luogo_nascita, indirizzo) Ospedale Ricovero (codice, nome, città, indirizzo, direttore_sanitario) Indice senza duplicati su Ospedale (direttore_sanitario) (cod_ospedale, cod, cittadino, data, durata, motivo, costo) Patologia_del_Ricovero ( cod_ospedale, cod_ricovero, cod_patologia) Patologia (cod, nome, criticità) Patologia_cronica (cod_patologia) Patologia_mortale (cod_patologia)
Libri di ricette: specifica Si progetti la base di dati per la gestione di libri di cucina (ricettari). L editore che pubblica i libri deve avere una raccolta di ricette. Ogni ricetta è identificata da un numero ed ha un titolo; le ricette vengono suddivise in cinque categorie: antipasti, primi, secondi, contorni, dessert. Le ricette possono essere tipiche di una o più regioni: in tal caso si vuol sapere quali sono queste regioni (dove le regioni sono identificate da un codice e caratterizzate da un nome). Le ricette sono fatte da ingredienti: per ogni ricetta, vi è una serie di ingredienti, dove ogni ingrediente è identificato da un numero progressivo proprio della ricetta, ed è caratterizzato dal nome dell ingrediente e dalla quantità. Infine, le ricette vengono pubblicate nei libri. Ogni libro è identificato dal suo codice ISBN ed è caratterizzato dal titolo e dall anno di pubblicazione. Ogni libro è composto da pagine, dove ogni pagina ha un numero proprio del particolare libro; in una pagina, vengono pubblicate una o più ricette. Si svolga il progetto concettuale della base di dati.
Libri di ricette: progettazione concettuale cod nome Regione Antipasto Dessert Primo Secondo Contorno (T, e) numero titolo appartiene a Ricetta pubblicata in (1, n) Pagina (1, n) (1, 1) Numero pagina composta da composto da numero cod ISBN (1, 1) nome ingrediente quantità Ingrediente titolo anno Libro
Libri di ricette: progettazione logica Regione (cod, nome) Ricetta_Regionale (regione, ricetta) Ricetta (numero, titolo, tipo) Constraints su Ricetta: tipo= antipasto OR tipo= primo OR tipo= secondo OR tipo= contorno OR tipo= dessert Ingrediente (ricetta, numero, nome_ingrediente, quantità) Ricetta_Pubblicata (ricetta, libro, numero_pagina ) Pagina ( libro, numero_pagina ) Libro (cod_isbn, titolo, anno)