Source: http://docplayer.it/2493189-Progetto-logos-documentazione.html
Timestamp: 2017-08-23 14:29:01+00:00

Document:
Progetto Logos - Documentazione - - PDF
Download "Progetto Logos - Documentazione -"
1 Progetto Logos - Documentazione - Marco Benvegnù Gianluca Marcante Simone Sanavio Roberto De Franceschi PM) Corso di Basi di Dati Corso di Laurea in Ingegneria Informatica A.A. 2002/2003
2 Progetto Logos Analisi dei requisiti, rev. 5, 23 giugno 2003 Requisiti generici R1 Si richiede una applicazione di basi di dati che mantenga informazioni riguardo a: tipi di articoli presenti nel catalogo dell azienda; schemi dei tipi di articoli prodotti dall azienda; articoli prodotti dall azienda; clienti dell azienda; interventi d ora in poi lavori) commissionati dai clienti sui prodotti da loro acquistati; personale dell azienda. Requisiti sui dati Cliente D1.1 Per cliente [50] si intende qualsiasi azienda esterna che abbia acquistato almeno un articolo o che abbia intenzione di acquistarne. D1.2 Ad ogni cliente sono associati i seguenti dati: ragione sociale, via, CAP, comune, provincia, stato, , telefono, fax, partita IVA, note. Tipo di articolo, schema elettrico e articolo D2.1 Per tipo di articolo [150] si intende una categoria merceologica ben specifica, individuata da un codice univoco. D2.2 Ad un tipo di articolo sono associati i seguenti dati: codice, nome, descrizione, schema elettrico unico), tensione elettrica. D3.1 Per schema elettrico [150] si intende un documento, individuato univocamente da un codice, che contiene informazioni relative alla costruzione di un esemplare di quel tipo di articolo. D3.2 Ad uno schema elettrico sono associati i seguenti dati: codice, nome file, progettista, note. D4.1 Per articolo [a crescere, 1000] si intende un prodotto dell azienda, autonomo e vendibile ad un cliente; ogni articolo deve essere univocamente identificato da un numero di matricola e deve essere istanza di un tipo di articolo. Un articolo può esistere a magazzino senza essere assegnato ad un cliente; una volta che un articolo è assegnato ad un cliente, vi rimane associato per sempre. D4.2 Ad un articolo sono associati i seguenti dati: matricola, tipo di articolo, note, cliente. Operatore D5.1 Per operatore [10] si intende una persona che lavora nell azienda, con qualsiasi mansione. Può essere non attivo se non lavora più nell azienda avendovi lavorato in passato. D5.2 Ad un operatore sono associati i seguenti dati: codice, nome, cognome, stato di attività, costo orario, note. 1
3 Lavoro D6.1 Per lavoro [a crescere, 1500] si intende un intervento su un articolo esistente nella base di dati, a seguito di richiesta formale da parte del cliente che possiede l articolo o intende venirne in possesso per esempio effettuando un ordine). D6.2 I possibili tipi di lavoro sono: montaggio/cablaggio, riparazione, verifica, altro. D6.3 Ogni articolo deve essere associato ad uno ed uno solo lavoro di montaggio/cablaggio. Qualora un cliente ordini un articolo che ancora non esiste in base di dati, sarà necessario: 1. creare un nuovo articolo; 2. creare un nuovo lavoro di tipo montaggio/cablaggio relativo all articolo appena creato. D6.4 Ogni lavoro deve essere associato ad un responsabile ed eventualmente ad uno o più aiutanti. Questi soggetti devono essere operatori dell azienda, e per poter essere assegnati ai lavori è necessario che siano attivi. Solo il responsabile ha la possibilità di comunicare l inizio e la fine di un lavoro ed eventuali nonconformità; per il resto, può compiere le stesse operazioni che possono compiere gli aiutanti inserire ore di lavorazione). D6.5 Ad un lavoro sono associati i seguenti dati: codice, stato di esecuzione da iniziare, in corso, terminato), tipo lavoro, articolo associato, data prevista di inizio, data di inizio, data prevista di termine, data di termine, ore previste di lavoro, preventivo, prezzo, nonconformità interne nessuna, una o più), nonconformità esterne nessuna, una o più), responsabile, aiutanti, priorità bassa, normale, alta). D6.6 Per ogni lavoro deve essere possibile risalire a chi vi ha preso parte e quante ore di lavoro interne/esterne dalla ditta e ordinarie/straordinarie ognuno di questi operatori vi ha dedicato. D6.7 Ogni operatore che partecipa ad un lavoro da responsabile o da aiutante) deve poter inserire i dati di lavorazione in momenti diversi. In altri termini, può lavorare contemporaneamente su più lavori senza che nessuno di essi sia terminato. D6.8 Per nonconformità interna [1 per lavoro] si intende un inconveniente riscontrato da un operatore durante lo svolgimento di un lavoro. Ad essa sono associati i seguenti dati: tipo componenti danneggiati nel montaggio, componenti difettosi, documentazione errata, altro), note, ore di lavoro per risolverla indipendentemente da chi le svolge). D6.9 Per nonconformità esterna [1 per lavoro] si intende un inconveniente riscontrato da un cliente su un articolo in suo possesso. L insieme delle nonconformità esterne costituisce, di norma, il motivo di avvio di un lavoro di riparazione. Ad una nonconformità esterna sono associati i seguenti dati: tipo componenti danneggiati nel montaggio, componenti difettosi, documentazione errata, altro), note. Requisiti sulle operazioni O1 Inserire/modificare un cliente raro). O2 Inserire/modificare le proprieta di un articolo 3/giorno). Deve essere possibile creare più articoli dello stesso tipo nell ambito della stessa operazione. O3 Inserire/modificare un operatore raro). O4 Inserire/modificare un tipo di articolo 1/mese). 2
4 O5 Inserire/modificare uno schema elettrico 1/mese). O6 Inserire/modificare un lavoro 6/giorno). O7 Consultare la lista dei lavori associati ad un operatore, ordinata per priorità e/o per data prevista di inizio 20/giorno). Dovranno essere prodotte due sottoliste: una per i lavori di cui l operatore è responsabile, una per i lavori cui l operatore partecipa ma non è responsabile. O8 Comunicare l inizio di un lavoro da parte dell operatore che ne è responsabile, con contestuale produzione di stampe informazioni generali sul lavoro) 6/giorno). O9 Comunicare un certo numero di ore ordinarie/straordinarie dedicate ad un lavoro da parte di un operatore che vi partecipa 20/giorno). O10 Comunicare il completamento di un lavoro da parte dell operatore che ne è responsabile 6/giorno). O11 Inserire/modificare una nonconformità interna o esterna ad un lavoro da parte dell operatore responsabile 1/giorno). O12 Consultare tutti i dati relativi ad un articolo 3/giorno). O13 Consultare l elenco di tutti i lavori associati ad un articolo 5/mese). O14 Consultare il numero di articoli di un certo tipo prodotti in un certo periodo 5/mese). O15 Consultare l elenco di tutti i lavori commissionati da un cliente 2/mese). O16 Consultare l elenco di tutti i lavori completati da un operatore in un certo periodo 10/mese). O17 Inserire, da parte di un impiegato addetto non un operatore), l informazione sul prezzo di un lavoro completato 6/giorno). O18 Consultare informazioni su un lavoro: codice, stato, preventivo, prezzo, date, ore previste, ore già effettuate e da chi, nonconformità, con possibilità di stampa 1/giorno). 3
5 Glossario dei termini Termine Significato Sinonimi Collegamenti Cliente Azienda esterna che possiede un articolo o intende acquistarne - Articolo Tipo di articolo Categoria merceologica specifica - Articolo, elettrico Schema Schema elettrico Documento che contiene informazioni sulla costruzione di un esemplare di un tipo di articolo - Tipo di articolo Articolo Prodotto finale e autonomo, la cui tipologia corrisponde ad uno dei tipi di articolo. E associato ad un cliente, oppure si trova disponibile a magazzino Operatore Lavoratore dell azienda. Lavoratore, elemento del personale Lavoro Intervento su un articolo: montaggio o cablaggio, riparazione, verifica o altro - Prodotto Tipo di articolo, Cliente Lavoro Operatore, Articolo, Nonconformità Nonconformità Inconveniente riscontrato da un cliente su un articolo nonconformità esterna) o da un operatore durante lo svolgimento di un lavoro nonconformità interna) Problema, inconveniente Lavoro 4
6 Schema ER, rev. 7, 25 giugno 2003 RV1 RV2 RV3 Un articolo DEVE essere associato ad uno ed uno solo lavoro di tipo montaggio/cablaggio. L'operatore responsabile di un lavoro DEVE essere anche assegnato al lavoro di cui è responsabile. Un operatore DEVE essere attivo per poter essere assegnato ad un lavoro
7 Progetto Logos Documentazione dello schema ER, rev. 6, 23 giugno 2003 Dizionario dei dati: tipi di entità Tipo di entità Descrizione Attributi Identificatore Cliente Articolo Azienda esterna che possiede almeno un articolo o che intenda acquistarne. Prodotto finale ed autonomo, la cui tipologia corrisponde ad uno dei tipi di articolo. E associato ad un cliente, oppure si trova disponibile a magazzino. RagioneSociale, PartitaIVA, Via, CAP, Comune, Provincia, Stato, Telefono, FAX, , Note Matricola, Note TipoDiArticolo Categoria merceologica specifica., Nome, Descrizione, TensioneElettrica SchemaElettrico Documento che contiene informazioni sulla costruzione di un esemplare di un tipo di articolo., Progettista, NomeFile [nome del file in cui è memorizzato lo schema elettrico], Note Operatore Lavoratore dell azienda., Nome, Cognome, CostoOrario, Attivo, Note Lavoro Intervento su un articolo: montaggio o cablaggio, riparazione, verifica o altro. LavoroDaIniziare Specializzazione di Lavoro; si tratta di un attività non ancora iniziata. LavoroIniziato Specializzazione di Lavoro; si tratta di un attività già iniziata. LavoroInCorso LavoroTerminato NonConformità Specializzazione di LavoroIniziato; si tratta di un attività iniziata ma non conclusa Specializzazione di LavoroIniziato; si tratta di un attività conclusa. Inconveniente riscontrato su un articolo durante un lavoro. NonConfInterna Specializzazione di Nonconformità; inconveniente riscontrato da un operatore dell azienda. NonConfEsterna Specializzazione di Nonconformità; inconveniente riscontrato da un cliente., Tipo, DataInizioPrevista, DataTerminePrevista, Preventivo, OrePrevisteLavoro, Priorità, Tipo, DataInizioPrevista, DataTerminePrevista, Preventivo, OrePrevisteLavoro, Priorità, Tipo, DataInizioPrevista, DataTerminePrevista, Preventivo, OrePrevisteLavoro, Priorità, DataInizio, Tipo, DataInizioPrevista, DataTerminePrevista, Preventivo, OrePrevisteLavoro, Priorità, DataInizio, Tipo, DataInizioPrevista, DataTerminePrevista, Preventivo, OrePrevisteLavoro, Priorità, DataInizio, DataTermine, Prezzo, Tipo, Note, Tipo, Note, OreDedicate [ore impiegate per la risoluzione della nonconformità], Tipo, Note PartitaIVA Matricola 1
8 Dizionario dei dati: tipi di associazione Tipo di ass. Descrizione Entità coinvolte Attributi Possesso Intervento Tipologia Schematizzazione Responsabilità Associa un cliente ad un articolo in suo possesso. Associa un lavoro all articolo che vi è sottoposto. Associa un articolo al suo tipo di articolo. Associa un tipo di articolo al suo schema elettrico. Associa l operatore responsabile di un lavoro a quel lavoro. Assegnazione Associa un operatore ad un lavoro che deve eseguire. Problema Associa un lavoro ad una nonconformità riscontrata svolgendo quel lavoro. Cliente 0, N), Articolo 0, 1) Articolo 1, N), Lavoro 1, 1) Articolo 1, 1), TipoDiArticolo 0, N) TipoDiArticolo 1, 1), Schema 1, 1) Operatore 0, N), Lavoro 1, 1) Operatore 0, N), Lavoro 1, N) Lavoro 0, N), NonConformità 1, 1) OreInterneOrdinarie, OreEsterneOrdinarie, OreInterneStraordinarie, OreEsterneStraordinarie Vincoli di integrità RV RV1 RV2 RV3 Regola Un articolo DEVE essere associato ad uno ed uno solo lavoro di tipo montaggio/cablaggio. L operatore responsabile di un lavoro DEVE essere anche assegnato al lavoro di cui è responsabile. Un operatore DEVE essere attivo per poter essere assegnato ad un lavoro. Domini degli attributi: note generali Qui di seguito vengono documentati i domini degli attributi dei tipi di entità e dei tipi di associazione. Trovandoci al livello della progettazione concettuale, si tratta di indicazioni generiche: non vengono utilizzate sintassi specifiche come per esempio la sintassi SQL o la sintassi dei tipi di uno specifico DBMS). 2
9 Domini degli attributi: tipi di entità Tipo di entità Attributo Dominio Cliente Articolo TipoDiArticolo SchemaElettrico Operatore Lavoro PartitaIVA RagioneSociale Via CAP Comune Provincia Stato Telefono FAX Note Matricola Note Nome Descrizione TensioneElettrica Progettista NomeFile Note Nome Cognome CostoOrario Attivo Note Tipo DataInizioPrevista DataTerminePrevista Preventivo OrePrevisteLavoro Priorità [5] [2] Testo Intero autoincrementante Testo Intero autoincrementante Testo Testo Monetario Booleano Testo LavoroDaIniziare Come Lavoro Come Lavoro LavoroIniziato Come Lavoro DataInizio Intero autoincrementante {montaggio/cablaggio, riparazione, verifica, altro} Data Data Monetario Intervallo temporale {massima, alta, normale, bassa} Come Lavoro Data LavoroInCorso Come LavoroIniziato Come LavoroIniziato LavoroTerminato Nonconformità NonconfInterna Come LavoroIniziato DataTermine Prezzo Tipo Note Come Nonconformità OreDedicate Come LavoroIniziato Data Monetario Intero autoincrementante {componenti danneggiati nel montaggio, componenti danneggiati nel funzionamento, componenti difettosi, documentazione errata, altro} Testo Come Nonconformità Intervallo temporale NonconfEsterna Come Nonconformità Come Nonconformità 3
10 Domini degli attributi: tipi di associazione Tipo di associazione Attributo Dominio Assegnazione OreEsterneOrdinarie OreEsterneStraordinarie OreInterneOrdinarie OreInterneStraordinarie Intervallo temporale Intervallo temporale Intervallo temporale Intervallo temporale 4
11 Progetto Logos Carico applicativo, rev. 4, 25 giugno 2003 Considerato il principio dell 80/20, vengono qui elencate solo le operazioni che si prevede di eseguire almeno una volta al giorno. Tavola dei volumi Concetto Costrutto Volume Cliente E 50 Articolo E 1000 TipoDiArticolo E 150 SchemaElettrico E 150 Operatore E 10 Lavoro E 1500 LavoroDaIniziare E 10 LavoroIniziato E 1490 LavoroInCorso E 10 LavoroTerminato E 1480 NonConformità E 3000 NonConfInterna E 1500 NonConfEsterna E 1500 Possesso R 980 Intervento R 1500 Tipologia R 1000 Schematizzazione R 150 Responsabilità R 1500 Assegnazione R 3000 Problema R 3000 Tavola delle operazioni Operazione Tipo Frequenza O2 I 3 volte/giorno O6 I 6 volte/giorno O7 I 20 volte/giorno O8 I 6 volte/giorno O9 I 20 volte/giorno O10 I 6 volte/giorno O11 I 1 volta/giorno O12 I 3 volte/giorno O16 I 10 volte/giorno O17 I 6 volte/giorno O18 I 1 volta/giorno 1
12 Schema ER ristrutturato, rev. 5, 25 giugno 2003 RV1 RV2 RV3 Un articolo DEVE essere associato ad uno ed uno solo lavoro di tipo montaggio/cablaggio. L'operatore responsabile di un lavoro DEVE essere anche assegnato al lavoro di cui è responsabile. Un operatore DEVE essere attivo per poter essere assegnato ad un lavoro.
13 Progetto Logos Note sulla ristrutturazione dello schema ER, rev. 4, 23 giugno 2003 Analisi delle ridondanze Non vi sono ridondanze lo schema ER è infatti minimale). Le uniche operazioni che potrebbero beneficiare di una ridondanza sono quelle, peraltro non previste, di totalizzazione delle ore dedicate ad un lavoro e delle ore non retribuite di un operatore. Eliminazione delle generalizzazioni Il costrutto della generalizzazione è stato usato nello schema due volte: tipo di entità NonConformità tipo di entità Lavoro NonConformità La seguente figura mostra due delle possibili scelte nell eliminazione della generalizzazione per Non- Conformità: Figura 1: Eliminazione della generalizzazione NonConformità: a) Accorpamento delle figlie nel padre b) Accorpamento del padre nelle figlie Non si prende in considerazione l alternativa di sostituzione con associazioni in quanto essa è consigliabile solo quando gli attributi in gioco sono molti. Le operazioni coinvolte sono O11 e O18: O11 - l inserimento richiede lo stesso tempo nelle due forme di eliminazione delle generalizzazioni, ma la modifica è più veloce sulla forma b decomposizione orizzontale) O18 - tavole degli accessi nei due casi: 1
14 a) Accorpamento delle figlie nel padre Concetto Costr. Accessi Tipo Lavoro E 1 L Problema R 2 L NonConformità E 2 L b) Accorpamento del padre nelle figlie Concetto Costr. Accessi Tipo Lavoro E 1 L ProblemaInt R 1 L NonConformitàInt E 1 L ProblemaEst R 1 L NonConformitàEst E 1 L Come si vede abbiamo cinque accessi in lettura in entrambe le ristrutturazioni. In conclusione la nostra scelta sul tipo di eliminazione da adottare cade sulla modalità accorpamento del padre nelle figlie in quanto l accorpamento delle figlie nel padre spreca più memoria senza permettere una maggiore velocità. Lavoro Su 1500 lavori, 1480 sono lavori terminati in pratica il 99% del totale), quindi accorpare le figlie nel padre introduce uno spreco di memoria trascurabile e riduce il numero di accessi per le operazioni O6, O7, O8, O10, O15 e O18, rispetto alle altre alternative. Queste tra l altro richiederebbero la replicazione aggiunta di varie associazioni e vincoli con conseguente aumento della complessità e degli overhead. Partizionamento/Accorpamento di concetti Tutte le operazioni accedono a tutti gli attributi di un concetto, perciò non sono richieste decomposizioni verticali. Non vi sono decomposizioni orizzontali utili. Non ci sono attributi multivalore. L unica associazione uno-ad-uno è Schematizzazione; le entità coinvolte hanno partecipazione obbligatoria e quindi il loro accorpamento non introdurrebbe sprechi di memoria. Dato però che tutte le operazioni accedono separatamente ai due concetti conviene mantenerli separati. Valutiamo l opportunità di accorpare le due associazioni Responsabilità ed Assegnamento. L operazione è sconsigliata dal fatto che modifiche alle non conformità ed alle date di inizio o fine lavoro richiedono un preventivo controllo di responsabilità, che risulta più efficiente mantenendo separate le due associazioni. Scelta degli identificatori primari SchemaElettrico e TipoDiArticolo sono identificate esternamente l una dall altra. Per entrambe le entità risulta più adatta la chiave interna. Le altre entità hanno tutte un solo identificatore. 2
15 Schema logico, rev. 2, 24 giugno 2003
16 Progetto Logos Note sulla traduzione verso il modello logico, rev. 1, 25 giugno 2003 In questa sezione documentiamo alcune scelte effettuate durante la traduzione dello schema ER ristrutturato verso il modello logico relazionale. Consideriamo solo due casi che meritano commento; in tutte le altre occasioni non sono sorte difficoltà o non sono emerse alternative valide. Blocco TipoDiArticolo - Schematizzazione - SchemaElettrico Le cardinalità delle partecipazioni dei tipi di entità TipoDiArticolo e Schematizzazione nel tipo di associazione Schematizzazione sono entrambe 1, 1). Nella traduzione, è possibile inglobare il tipo di associazione in uno dei due tipi di entità mediante un attributo di chiave esterna. La scelta è caduta nell inserire un attributo SchemaElettrico nel tipo di entità TipoDiArticolo in quanto, così facendo, nella consultazione dei dati relativi ad un articolo, si può risalire prima al tipo di articolo e poi da questo facilmente allo schema elettrico. Non sono invece previste operazioni che richiedano di risalire dallo schema elettrico al tipo di articolo. Si noti che questi due tipi di entità non sono stati accorpati, in quanto era stato deciso di mantenerli separati in sede di ristrutturazione dello schema ER. Blocco Articolo - Possesso - Cliente Qui le cardinalità delle partecipazioni sono 0, 1) nel caso di Articolo e 0, N) nel caso di Cliente. La traduzione è stata effettuata nel modo tipico in cui si traduce un tipo di associazione uno a molti, cioè inserendo nello schema di relazione Articolo un attributo Cliente, che risulta chiave esterna riferente l attributo PartitaIVA dello schema Cliente. In questo caso, però, la cardinalità minima della partecipazione di Articolo al tipo di associazione Cliente è 0, per cui va senz altro presa in considerazione l opportunità di tradurre creando un terzo schema di relazione Possesso. Questa introduzione è molto spesso conveniente quando consente di evitare la presenza di molti valori nulli. Nel caso specifico, risulta dalla tabella dei volumi che il numero di articoli non assegnati ad un cliente è molto basso si tratta degli articoli disponibili a magazzino). L introduzione di un terzo schema di relazione Possesso, pertanto, farebbe aumentare la complessità dello schema logico senza risultare particolarmente vantaggiosa. 1
17 Progetto Logos Qualità dello schema logico, rev. 1, 25 giugno 2003 Ci proponiamo di verificare la qualità dello schema logico utilizzando gli strumenti della teoria della normalizzazione. Prima forma normale Gli schemi in 1NF sono caratterizzati dalle seguenti proprietà: tutti gli attributi possono assumere solo valori singoli in un dominio costituito da valori atomici; non esistono relazioni nidificate. Se la progettazione dello schema della base di dati viene effettuata con opportuni criteri, ponendo particolare cura nella progettazione concettuale, tutti gli schemi di relazione ottenuti dovrebbero sempre essere in 1NF. Nel nostro caso, tutti gli schemi sono in prima forma normale. Seconda forma normale Uno schema di relazione R è in 2NF se è in 1NF e se non esiste un attributo A non primo che dipende funzionalmente in modo parziale da una chiave candidata di R. Nel nostro schema di base di dati, la maggior parte degli schemi di relazione ha una sola chiave candidata, che quindi è anche chiave primaria. Fanno eccezione i seguenti schemi di relazione: Cliente, che ha chiave primaria PartitaIVA e possiede un altra chiave candidata RagioneSociale è inverosimile che esistano due clienti con la stessa ragione sociale TipoDiArticolo, che ha chiave primaria e possiede un altra chiave candidata SchemaElettrico, dal momento che nello schema ER le cardinalità della partecipazione di questi due tipi di entità alla associazione Schematizzazione sono entrambe 1, 1). SchemaElettrico, che ha chiave primaria e possiede un altra chiave candidata NomeFile. Nel caso di questi tre schemi di relazione, entrambe le chiavi candidate sono composte da un singolo attributo: per questo motivo, eventuali dipendenze funzionali verso attributi non primi sono necessariamente complete. Tutti gli altri schemi di relazione hanno un unica chiave candidata. Ad eccezione dello schema Assegnazione, tutti hanno chiave primaria formata da un unico attributo e sono quindi in 2NF. Per quanto riguarda invece lo schema di relazione Assegnazione, nessuno degli attributi non primi cioè OreInterneOrdinaria, OreEsterneOrdinarie, OreInterneStraordinarie, OreEsterneStraordinarie) dipende funzionalmente da uno solo degli attributi di chiave primaria Operatore e Lavoro. Terza forma normale Uno schema di relazione R è in 3NF se per ogni dipendenza funzionale X A non banale vale almeno una delle seguenti condizioni: X è superchiave di R; A è un attributo primo. 1
18 L unico caso in cui la proprietà di 3NF può essere discussa riguarda lo schema di relazione Cliente. In questo schema potrebbero sembrare esserci le seguenti dipendenze funzionali: Comune CAP; Comune Provincia; Comune Stato; CAP Provincia;... In realtà, i clienti possono risiedere in diversi stati. Possono esistere nomi di città uguali tra stati diversi, con provincie/regioni diverse e codici di avviamento postale diversi. Per questi motivi, le dipendenze funzionali suddette non esistono. Va detto che la grande maggioranza dei clienti è italiana, ma va anche aggiunto che questo gruppo di attributi non è di interesse per alcuna operazione. Il committente, infatti, desidera mantenere questi dati solo per completezza. 2
19 Progetto Logos Definizione SQL dello schema della base di dati, rev. 1, 24 giugno 2003 Note generali Durante l implementazione dello schema della base di dati in SQL è stato necessario effettuare alcune scelte. Per commentarle, si farà qui riferimento alla documentazione dello schema ER, nella quale si era data un indicazione sui domini degli attributi. Tipi enumerati In fase di progettazione concettuale, era emersa la necessità di assegnare ad alcuni attributi un dominio costituito da un elenco di valori. Per la breve discussione seguente faremo riferimento, come esempio, all attributo LAVORO.Tipo. Questo attributo poteva assumere uno tra i seguenti valori: montaggio/cablaggio riparazione verifica altro Sebbene sia possibile definire con SQL domini personalizzati, si è ritenuto di assegnare a questi attributi il dominio INTEGER, con un vincolo CHECK per garantire che il valore introdotto sia maggiore di 0. Nell esempio specifico: CREATE TABLE Lavoro [...] Tipo INTEGER NOT NULL CHECK Tipo > 0), [...] ) L associazione tra i numeri interi positivi e le stringhe che descrivono il valore dell attributo è demandata all applicazione. Questo permette una notevole flessibilità: qualora, in futuro, il committente decidesse di introdurre altre categorie supplementari di lavoro, non sarebbe necessario modificare lo schema della base di dati. Inoltre la rappresentazione è più compatta e le espressioni SQL di manipolazione risultano più semplici. Tipi monetari Si è optato per l utilizzo di campi DECIMAL 9, 2), con nove cifre per l importo in euro e due cifre per i centesimi. Vincoli di integrità Sebbene il DBMS da noi scelto, PostgreSQL, non supporti le clausole ASSERTION, abbiamo incluso la codifica dei vincoli di integrità anche nell implementazione SQL dello schema della base di dati. 1
20 Schema CREATE TABLE Cliente PartitaIVA VARCHAR 16) PRIMARY KEY, RagioneSociale VARCHAR 50) NOT NULL, Via VARCHAR 50), CAP CHAR 5), Comune VARCHAR 30), Provincia CHAR 2), Stato VARCHAR 14), Telefono VARCHAR 14), Fax VARCHAR 14), VARCHAR 40), Note TEXT CREATE TABLE Operatore VARCHAR 15) PRIMARY KEY, Nome VARCHAR 20) NOT NULL, Cognome VARCHAR 20) NOT NULL, CostoOrario DECIMAL 9, 2) NOT NULL, Attivo BOOLEAN NOT NULL, Note TEXT CREATE TABLE SchemaElettrico VARCHAR 30) PRIMARY KEY, NomeFile VARCHAR 30), Progettista VARCHAR 30), Note TEXT CREATE TABLE TipoDiArticolo SERIAL PRIMARY KEY, Nome VARCHAR 50) NOT NULL, Descrizione TEXT, TensioneAlimentazione VARCHAR 15), SchemaElettrico VARCHAR 30) NOT NULL REFERENCES SchemaElettrico ) ON DELETE RESTRICT ON UPDATE CASCADE 2
21 CREATE TABLE Articolo Matricola SERIAL PRIMARY KEY, TipoArticolo INTEGER NOT NULL REFERENCES TipoDiArticolo ) ON DELETE RESTRICT ON UPDATE CASCADE, Cliente VARCHAR 16) REFERENCES Cliente PartitaIVA) ON DELETE RESTRICT ON UPDATE CASCADE, Note TEXT CREATE TABLE Lavoro SERIAL PRIMARY KEY, Tipo INTEGER NOT NULL CHECK Tipo > 0), DataInizioPrevista DATE NOT NULL, DataTerminePrevista DATE NOT NULL, Preventivo DECIMAL 9, 2), OrePrevisteLavoro INTERVAL, Priorita INTEGER NOT NULL CHECK Priorita > 0), StatoEsecuzione INTEGER NOT NULL CHECK StatoEsecuzione > 0), Prezzo DECIMAL 9, 2), DataInizio DATE, DataTermine DATE, Responsabile VARCHAR 15) NOT NULL REFERENCES Operatore ) ON DELETE RESTRICT ON UPDATE CASCADE, Articolo INTEGER NOT NULL REFERENCES Articolo Matricola) ON DELETE RESTRICT ON UPDATE CASCADE CREATE TABLE Assegnazione Operatore VARCHAR 15) REFERENCES Operatore ), Lavoro INTEGER REFERENCES Lavoro ), OreInterneOrdinarie INTERVAL NOT NULL, OreEsterneOrdinarie INTERVAL NOT NULL, OreInterneStraordinarie INTERVAL NOT NULL, OreEsterneStraordinarie INTERVAL NOT NULL, PRIMARY KEY Responsabile, Lavoro) 3
22 CREATE TABLE NonConformitaEst SERIAL PRIMARY KEY, Lavoro INTEGER NOT NULL REFERENCES Lavoro ) ON DELETE CASCADE ON UPDATE CASCADE, Tipo INTEGER NOT NULL CHECK Tipo > 0), Note TEXT CREATE TABLE NonConformitaInt SERIAL PRIMARY KEY, Lavoro INTEGER NOT NULL REFERENCES Lavoro ) ON DELETE CASCADE ON UPDATE CASCADE, Tipo INTEGER NOT NULL CHECK Tipo > 0), OreDedicate INTERVAL NOT NULL, Note TEXT CREATE ASSERTION ResponsabileAssegnatoLavoro CHECK EXISTS SELECT * FROM LAVORO JOIN ASSEGNAZIONE ON LAVORO. = ASSEGNAZIONE.Lavoro WHERE LAVORO.Responsabile = ASSEGNAZIONE.Operatore ) CREATE ASSERTION ArticoloMontaggio CHECK 1 = SELECT COUNT *) FROM LAVORO JOIN ARTICOLO ON LAVORO.Articolo = ARTICOLO.Matricola WHERE LAVORO.Tipo = 1 ) 4
23 CREATE ASSERTION OperatoreAssegnatoAttivo CHECK 0 = SELECT COUNT *) FROM OPERATORE JOIN ASSEGNAZIONE JOIN LAVORO ON ASSEGNAZIONE.Operatore = OPERATORE. AND ASSEGNAZIONE.Lavoro = Lavoro. WHERE OPERATORE.Attivo = FALSE AND LAVORO.StatoEsecuzione <> 3 ) 5

References: articolo 3
 articolo 1
 articolo 3
 articolo 5
 Articolo 0
 Articolo 1
 Articolo 1