|
Appunti tecniche |
|
Visite: 2353 | Gradito: | [ Grande appunti ] |
Leggi anche appunti:Progettazione di una base di dati per la gestione di una issione SpazialeProgettazione di una base di dati per la gestione di una issione Spaziale 1. |
Si vuole realizzare una base di dati per un veicolo destinato a una missione spaziale su Marte.
Il veicolo effettua dei rilevamenti utilizzando uno degli strumenti di cui è equipaggiato.
Un rilevamento può essere costituito dal prelievo di un campione oppure dalla registrazione di una immagine. Per quanto riguarda i campioni si vuole tenere traccia della loro composizione chimica e della fase in cui si trovano all'atto del prelievo. Per le immagini, si vuole tenere traccia del formato in cui è immagazzinata l'immagine e della data in cui (eventualmente) l'immagine è stata trasmessa a Terra. Ogni rilevamento è caratterizzato da un codice. Per ogni rilevamento si vuole tenere traccia della data e ora, delle coordinate, nonché dell'area in cui è stato effettuato. Ogni area è contrassegnata da un codice e da un nome simbolico. Ogni rilevamento è effettuato mediante uno degli strumenti a bordo. Ogni strumento è contraddistinto da un codice e da un nome simbolico, nonché da una breve scheda tecnica. Per ogni strumento si vuole tenere traccia delle eventuali avarie riscontrate. Per ognuna di esse si richiede di tenere traccia della data in cui si è verificata, del codice, del nome, dell'indice di gravità e dell'attuale stato (es. risolta).
O1) Registrazione di un rilevamento (frequenza: 10 al giorno);
O2) Registrazione di una avaria (frequenza: 50 al mese);
O3) Modifica dello stato di uno strumento (frequenza: 50 al mese);
O4) Stampa scheda tecnica di uno strumento (frequenza: 5 al giorno);
O5) Stampa avarie occorse ad uno strumento (frequenza: 1 alla settimana);
O6) Stampa stato attuale degli strumenti (frequenza: 10 al giorno);
O7) Stampa tutti i prelievi effettuati in una certa area (frequenza: 3 al giorno);
O8) Stampa tutte le immagini rilevate in una certa area (frequenza: 3 al giorno);
O9) Stampa tutti i prelievi effettuati, con indicazione dell'area e della data (frequenza: 3 al giorno);
O10) Stampa tutte le immagini rilevate, con indicazione dell'area e della data (frequenza: 3 al giorno);
O11) Stampa delle avarie presentate da uno strumento, con indicazione dell'area e della data (frequenza: 2 al giorno);
O12) Stampa le avarie che si sono verificate nel corso di un rilevamento, con indicazione dell'area del rilevamento (frequenza: 3 al giorno);
O13) Inserimento di un nuovo tipo di avaria (1 al mese);
O14) Inserimento di una nuova area (1-2 al giorno);
In ciò che segue viene riportato brevemente un riepilogo sulle specifiche del progetto, seguito da una breve descrizione dei termini citati.
Dati di carattere generale
Si vuole realizzare una base di dati da utilizzare nell'ambito di una missione spaziale su Marte. La suddetta base dati deve mantenere informazioni riguardanti i risultati dei rilevamenti effettuati nel corso della missione. Deve inoltre tenere memoria di tutti gli strumenti utilizzati nel corso di ciascun rilevamento e delle eventuali avarie che hanno presentato. Per ogni strumento è possibile visualizzare la corrispondente scheda tecnica. |
Dati sul Rilevamento |
Un rilevamento può consistere nella registrazione di una immagine, nel prelievo di un campione oppure entrambe le operazioni simultaneamente. In ogni caso, esso è identificato da un codice univoco. Altri parametri caratteristici di un rilevamento sono la data e l'ora in cui è stato effettuato e le sue coordinate. |
Dati sullo Strumento |
Gli strumenti sono apparati che vengono utilizzati per effettuare i rilevamenti. Essi sono identificati da un codice univoco. Ad ogni strumento è associato un nome. Per ciascuno strumento è indicato, inoltre, lo stato di funzionamento attuale, ovvero 'attivo' oppure 'in avaria'. |
Dati sul Campione |
Un campione di materiale reperito a seguito di una operazione di prelievo è caratterizzato, oltre che dai parametri riguardanti l'entità padre Rilevamento, dalla sua composizione e dalla fase nel momento in cui è stato prelevato. |
Dati sulla Immagine |
Un immagine rilevata in una operazione di rilevamento è caratterizzata, oltre che dai parametri riguardanti l'entità padre Rilevamento, dal suo formato e, opzionalmente, dalla data in cui essa è stata inviata a terra |
Dati sull'Area |
Un'area geografica, all'interno della quale viene effettuato un rilevamento, è identificata univocamente da un codice. A ciascuna area è associato, inoltre, un nome. |
Dati su Avaria |
Una entità avaria è identificata univocamente da un codice. A ciascuna avaria è associato anche un nome. Ad ogni avaria, che si è verificata in relazione ad un particolare strumento, è associato un indice di gravità e la data in cui si è verificata. |
Dati su Scheda Tecnica |
Mette in relazione l'insieme degli strumenti utilizzati per i rilevamenti con l'insieme di tutti i parametri tecnici. E' una relazione molti a molti. La relazione fra uno strumento e una caratteristica tecnica ad esso associata, è caratterizzata da un valore ben definito. |
In tabella 1 viene riportato un glossario dei termini più rilevanti che si evincono nell'ambito delle specifiche fornite.
Glossario dei termini |
|||
Termine |
Descrizione |
Sinonimi |
Termini collegati |
|
|
|
|
Rilevamento |
Rilevamento effettuato dal veicolo spaziale, utilizzando opportuni strumenti. Può consistere nella registrazione di una immagine oppure nel prelievo di un campione |
|
Prelevamento campione, Acquisizione immagine, Strumento, Area |
Strumento |
Uno degli strumenti facenti parte del veicolo spaziale, utilizzato per fare rilevamenti |
|
Avaria, Rilevamento |
Campione |
Campione di materiale reperito dal veicolo spaziale a seguito di una operazione di prelievo |
|
Rilevamento |
Immagine |
Immagine rilevata dal veicolo spaziale nel corso di una operazione di rilevamento |
|
Rilevamento |
Area |
Area geografica in cui viene effettuato un rilevamento |
|
Rilevamento |
Avaria |
Stato di malfunzionamento eventualmente riscontrato in uno strumento |
|
Strumento |
Scheda tecnica |
Insieme di valori necessari per la descrizione delle caratteristiche tecniche di un dato strumento |
|
Strumento |
Tabella 1: Glossario dei termini
Sulla base dell'analisi dei requisiti del sistema è stata effettuata una prima progettazione concettuale, che viene riportata in Figura 1.In essa è stata individuata una entità "rilevamento". Tale entità è stata suddivisa in due entità figlie, "campione" e "immagine", tramite una relazione di generalizzazione totale e sovrapposta in quanto un rilevamento può consistere nel prelievo di un campione, nell'acquisizione di una immagine oppure in entrambe le operazioni simultaneamente.
E' stata creata un'entità "strumento", la quale identifica i diversi strumenti disponibili sul veicolo per effettuare i rilevamenti. Le entità "strumento" sono in relazione con le entità "rilevamento"; la relazione indica quali strumenti vengono utilizzati nei diversi rilevamenti.
L'entità "avaria" descrive le caratteristiche delle avarie che eventualmente si possono verificare in uno o più strumenti nel corso di un rilevamento. La relazione fra le entità "avaria" e "strumento" pone in condizione di sapere se un determinato strumento ha subito un'avaria nel corso di un rilevamento e, in caso affermativo, di definire quali sono state le caratteristiche dell'avaria stessa.
La specificazione delle caratteristiche tecniche degli strumenti è stata realizzata creando una nuova entità, chiamata "parametro", che definisce il nome ed una descrizione di tutti i parametri tecnici che competono a tutti gli strumenti utilizzati. Ogni strumento è in relazione con uno o più parametri che nel loro insieme ne definiscono le caratteristiche tecniche. Ciascun parametro è valorizzato a seconda dello strumento cui si riferisce, attraverso la specificazione dell'attributo "valore" della relazione "scheda tecnica". E' stata creata un'entità "area", che descrive le diverse aree in cui sono stati effettuati rilevamenti. Ciascuna entità "rilevamento" è in relazione con una entità "area" che rappresenta appunto la regione in cui il rilevamento è stato effettuato. In tabella 2 viene riportato un dizionario dei dati relativo alle diverse entità definite; in tabella 3 viene riportato un dizionario dei dati relativo alle diverse relazioni definite.
Figura 1: schema E/R intermedio
Entità |
Descrizione |
Attributi |
Identificatore |
|
|
|
|
Rilevamento |
Rilevamento effettuato dal veicolo spaziale, utilizzando opportuni strumenti. Può consistere nella registrazione di una immagine oppure nel prelievo di un campione |
Codice, data/ora, coordinate |
Codice |
Strumento |
Uno degli strumenti facenti parte del veicolo spaziale, utilizzato per fare rilevamenti |
Codice, nome, stato |
Codice |
Campione |
Campione di materiale reperito dal veicolo spaziale a seguito di una operazione di prelievo |
Vedi Rilevamento, composizione, fase |
Vedi Rilevamento |
Immagine |
Immagine rilevata dal veicolo spaziale nel corso di una operazione di rilevamento |
Vedi Rilevamento, formato, data |
Vedi Rilevamento |
Parametro |
Parametro che esprime una caratteristica tecnica relativa ad uno o piu strumenti utilizzati per effettuare rilevamenti. Ad esempio, temperatura di funzionamento, valore della resistenza meccanica ecc. |
Codice, nome, descrizione |
Codice |
Area |
Area geografica in cui viene effettuato un rilevamento |
Codice, nome |
Codice |
Avaria |
Stato di malfunzionamento eventualmente riscontrato in uno strumento |
Codice, nome |
Codice |
Tabella 2: Dizionario dei dati - Entità
Relazione |
Descrizione |
Attributi |
Entità partecipanti |
|
|
|
|
Scheda tecnica |
Mette in relazione uno strumento con uno o più parametri che ne definiscono le sue caratteristiche tecniche |
Valore |
Strumento, Parametro |
Utilizzato |
Mette in relazione una operazione di rilevamento con gli strumenti utilizzati per la sua realizzazione |
|
Strumento, Rilevamento |
Effettuato |
Mette in relazione una operazione di rilevamento con l'area nel quale è stato effettuato |
|
Area, Rilevamento |
Verificata |
Mette in relazione uno strumento con la descrizione delle eventuali avarie che ha riscontrato |
Data, indice |
Strumento, Avaria |
Tabella 3: Dizionario dei dati - Relazioni
In ciò che segue viene valutato il carico dell'applicazione che si deve realizzare. A tale scopo viene di seguito riportata una tavola dei volumi, in cui è specificato il numero atteso di istanze che i vari concetti (entità, relazioni e attributi) coinvolti nello schema E/R hanno in un funzionamento a regime dell'applicazione, e una tavola delle frequenze, contenente l'elenco di tutte le operazioni che possono essere eseguite sulla base di dati, e la frequenza con cui vengono eseguite.
Viene inoltre riportata una tavola degli accessi per ciascuna delle operazioni definite.
Supposto che la missione abbia la durata di 12 mesi e supposto che vengano effettuati 10 rilevamenti al giorno, allora si stima che nel corso della missione verranno effettuati 3650 rilevamenti. Nella maggior parte dei casi il rilevamento consisterà in entrambe il prelievo di un campione e l'acquisizione di una immagine.
Si suppone che il numero di strumenti complessivamente a disposizione per l'intera missione sia pari a 50 e che, mediamente, in ciascuna missione vengono utilizzati 10 strumenti . Si suppone anche che la scheda tecnica di uno strumento sia definita, mediamente, da un numero di parametri pari a 15.
Si suppone che nel corso della missione verranno interessate 500 aree diverse.
Si suppone che le possibili avarie che possono verificarsi siano in numero di 50 e che mediamente ogni strumento presenti una avaria al mese.
Si considera anche che nel corso della missione possano verificarsi anomalie "nuove", non contemplate nell'elenco iniziale, nella misura di una al mese.
Concetto |
Tipo |
Volume |
|
|
|
Rilevamento |
E |
|
Strumento |
E |
|
Campione |
E |
|
Immagine |
E |
|
Parametro |
E |
|
Area |
E |
|
Avaria |
E |
|
Scheda tecnica |
R |
|
Utilizzato |
R |
|
Effettuato |
R |
|
Verificata |
R |
|
Tavola dei volumi
Operazione |
Descrizione |
Frequenza |
Tipo |
|
|
|
|
O1 |
Registra un nuovo rilevamento |
10/giorno |
B |
O2 |
Registra una nuova avaria |
50/mese |
B |
O3 |
Modifica lo stato di uno strumento |
50/mese |
B |
O4 |
Stampa scheda tecnica di uno strumento |
5/giorno |
B |
O5 |
Stampa avarie occorse ad uno strumento |
1/settimana |
B |
O6 |
Stampa stato attuale degli strumenti |
10/giorno |
B |
O7 |
Stampa tutti i prelievi effettuati in una certa area, con indicazione della data |
3/giorno |
B |
O8 |
Stampa tutte le immagini rilevate in una certa area, con indicazione della data |
3/giorno |
B |
O9 |
Stampa tutti i prelievi effettuati, con indicazione dell'area e della data |
3/giorno |
B |
O10 |
Stampa tutte le immagini rilevate, con indicazione dell'area e della data |
3/giorno |
B |
O11 |
Stampa delle avarie presentare da uno strumento, con indicazione dell'area e della data |
2/giorno |
B |
O12 |
Stampa le avarie che si sono verificate nel corso di rilevamenti in una determinata zona, con indicazione della data |
3/settimana |
B |
O13 |
Inserimento di un nuovo tipo di avaria |
1/settimana |
B |
O14 |
Inserimento di una nuova area |
(1-2)/giorno |
B |
Tavola delle frequenze
Tavola degli accessi operazione O1 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Rilevamento |
Entità |
|
S |
Area |
Entità |
|
L |
Effettuato |
Relazione |
|
S |
Utilizzato |
Relazione |
|
S |
Strumento |
Entità |
|
L |
|
|
|
|
Totale: 350 accessi al giorno |
Tavola degli accessi operazione O2 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Strumento |
E |
|
L |
Verificata |
R |
|
S |
Avaria |
E |
|
L-S |
|
|
|
|
Totale: 9 accessi al giorno |
Tavola degli accessi operazione O3 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Strumento |
E |
|
S |
|
|
|
|
Totale: 4 accesso al giorno |
Tavola degli accessi operazione O4 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Strumento |
E |
|
L |
Scheda Tecnica |
R |
|
L |
Parametro |
E |
|
L |
|
|
|
|
Totale: 155 accessi al giorno |
Tavola degli accessi operazione O5 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Strumento |
E |
|
L |
Verificata |
R |
|
L |
Avaria |
E |
|
L |
|
|
|
|
Totale: 4 accessi al giorno |
Tavola degli accessi operazione O6 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Strumento |
E |
|
L |
|
|
|
|
Totale: 500 accessi al giorno |
Tavola degli accessi operazione O7 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Area |
E |
|
L |
Effettuato |
R |
|
L |
Rilevamento |
E |
|
L |
Campione |
E |
|
L |
|
|
|
|
Totale: 10950 accessi al giorno |
Tavola degli accessi operazione O8 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Area |
E |
|
L |
Effettuato |
R |
|
L |
Rilevamento |
E |
|
L |
Immagine |
E |
|
L |
|
|
|
|
Totale: 10950 accessi al giorno |
Tavola degli accessi operazione O9 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Rilevamento |
E |
|
L |
Effettuato |
R |
|
L |
Area |
E |
|
L |
Campione |
E |
|
L |
|
|
|
|
Totale: 43800 accessi al giorno |
Tavola degli accessi operazione O10 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Rilevamento |
E |
|
L |
Effettuato |
R |
|
L |
Area |
E |
|
L |
Immagine |
E |
|
L |
|
|
|
|
Totale: 43800 accessi al giorno |
Tavola degli accessi operazione O11 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Strumento |
E |
|
L |
Verificata |
R |
|
L |
Avaria |
E |
|
L |
Utilizzato |
R |
|
L |
Rilevamento |
E |
|
L |
Effettuato |
R |
|
L |
Area |
E |
|
L |
|
|
|
|
|
|
|
|
Totale: 146 accessi al giorno |
Tavola degli accessi operazione O12 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Rilevamento |
E |
|
L |
Effettuato |
R |
|
L |
Area |
E |
|
L |
Utilizzato |
R |
|
L |
Strumento |
E |
|
L |
Verificata |
R |
|
L |
Anomalia |
E |
|
L |
|
|
|
|
Totale: 21 accessi al giorno |
Tavola degli accessi operazione O13 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Avaria |
E |
|
S |
|
|
|
|
Totale: 1 accessi al giorno |
Tavola degli accessi operazione O14 |
|||
Concetto |
Costrutto |
Accessi |
Tipo |
|
|
|
|
Area |
E |
|
S |
|
|
|
|
Totale: 1 accessi al giorno |
Non si riscontrano ridondanze dovute ad attributi derivabili da altri attributi nè ridondanze dovute a relazioni derivabili dalla composizione di altre relazioni.
L'accesso alle entità figlie avviene sempre e solo contestualmente all'accesso all'entità padre; inoltre, un rilevamento può consistere in entrambe il prelievo di un campione e l'acquisizione di una immagine. In virtù di queste considerazioni decidiamo di mantenere l'entità padre aggiungendo ad essa tutti gli attributi delle entità figlie, con cardinalità (0,1), più un ulteriore attributo (tipo) che può assumere valore C (campione) oppure I (immagine).
L'attributo Data dell'entità Immagine è stato rinominato come DataInvio per evitare ambiguità con l'attributo Data dell'entità Rilevamento.
Non si riscontra la necessità di partizionamento/accorpamento di entità/relazioni.
Utilizziamo come identificatori primari delle entità strumento, rilevamento, parametro, avaria, i codici corrispondenti. In Figura 2 è riportato lo schema E/R ristrutturato.
Figura 2
Si individuano i seguenti schemi di entità:
RILEVAMENTO(Codice,Data/Ora,Coordinate,Composizione,Fase,Tipo,Formato,DataInvio,Area)
STRUMENTO(Codice,Nome,Stato)
AREA(Codice,nome)
PARAMETRO(Codice,nome,descrizione)
AVARIA(Codice,nome)
Nella relazione RILEVAMENTO è stato introdotto un ulteriore attributo, Area, che corrisponde alla chiave primaria dell'entità Area. Pertanto non è necessario tradurre la relazione EFFETTUATO.
Si individuano i seguenti schemi di relazioni:
SCHEDA TECNICA(Parametro,Strumento,valore)
VERIFICATA(Strumento,Avaria,data,indice)
UTILIZZATO(Strumento,Rilevamento)
Nella figura 3 viene riportato lo schema di join relativo all'applicazione in esame:
Figura 3
Nell'implementazione fisica del database, alle entità PARAMETRO, STRUMENTO, SCHEDA_TECNICA è stato assegnato un segmento di memoria su disco fisso, sufficiente a contenere il volume di informazioni appropriato, che è fissato.
All'entità AVARIA il cui volume è modesto, è stato assegnato un segmento di memoria iniziale sufficiente a contenere l'intero volume dei dati; per tale entità è stato previsto un tasso di crescita di 1 inserimento/mese.
Per quanto riguarda le altre entità, poiché non si conosce l'esatto volume dei dati che dovranno contenere a regime, è stato assegnato un segmento di memoria iniziale sufficiente a contenere il 40% del volume previsto; per tale entità è stato poi previsto un tasso di crescita pari al rimanente 60% del volume previsto, distribuito nei 12 mesi di durata della missione.
E' stata creata un'ulteriore entità, chiamata "Statistica" cui è stato assegnato un segmento di memoria su disco fisso, sufficiente a contenere il volume di informazioni appropriato, che è fissato a priori. Tale entità verrà utilizzata per ottenere informazioni sulla statistica dei rilevamenti.
Queste considerazioni hanno portato al dimensionamento del tablespace come mostrato di seguito:
CREATE TABLE 'TEMPES12'.'PARAMETRO' ('CODICE' VARCHAR2(10 byte)
NOT NULL, 'NOME' VARCHAR2(10 byte) NOT NULL, 'DESCRIZIONE'
VARCHAR2(30 byte) NOT NULL,
CONSTRAINT 'PK_PARAMETRO' PRIMARY KEY('CODICE')
USING INDEX
TABLESPACE 'USERS'
STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
CREATE TABLE 'TEMPES12'.'AREA' ('CODICE' VARCHAR2(10 byte) NOT
NULL, 'NOME' VARCHAR2(10 byte) NOT NULL,
CONSTRAINT 'FDDFFD' PRIMARY KEY('CODICE')
USING INDEX
TABLESPACE 'USERS'
STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
CREATE TABLE 'TEMPES12'.'AVARIA' ('CODICE' VARCHAR2(10 byte) NOT
NULL, 'NOME' VARCHAR2(10 byte) NOT NULL,
CONSTRAINT 'PK_AVARIA' PRIMARY KEY('CODICE')
USING INDEX
TABLESPACE 'USERS'
STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
CREATE TABLE 'TEMPES12'.'STRUMENTO' ('CODICE' VARCHAR2(10 byte)
NOT NULL, 'NOME' VARCHAR2(10 byte) NOT NULL, 'STATO'
VARCHAR2(10 byte) NOT NULL,
CONSTRAINT 'CHECK_STRUMENTO' CHECK(stato='attivo' or
stato='in avaria'),
CONSTRAINT 'PK_STRUMENTO' PRIMARY KEY('CODICE')
USING INDEX
TABLESPACE 'USERS'
STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
CREATE TABLE 'TEMPES12'.'RILEVAMENTO' ('CODICE' VARCHAR2(10 byte)
NOT NULL, 'DATA_ORA' DATE NOT NULL, 'COORDINATE' VARCHAR2(10
byte) NOT NULL, 'COMPOSIZIONE' VARCHAR2(10 byte), 'FASE'
VARCHAR2(10 byte), 'TIPO' CHAR(1 byte) NOT NULL, 'FORMATO'
VARCHAR2(10 byte), 'DATAINVIO' DATE, 'AREA' VARCHAR2(10 byte)
NOT NULL,
CONSTRAINT 'CHECK_RILEVAMENTO' CHECK(tipo='C' or tipo='I'),
CONSTRAINT 'FK_RILEVAMENTO' FOREIGN KEY('AREA')
REFERENCES 'TEMPES12'.'AREA'('CODICE'),
CONSTRAINT 'PK_RILEVAMENTO' PRIMARY KEY('CODICE')
USING INDEX
TABLESPACE 'USERS'
STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 136K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
CREATE TABLE 'TEMPES12'.'UTILIZZATO' ('STRUMENTO' VARCHAR2(10
byte) NOT NULL, 'RILEVAMENTO' VARCHAR2(10 byte) NOT NULL,
CONSTRAINT 'FK_UTILIZZATO_RILEVAMENTO' FOREIGN
KEY('RILEVAMENTO')
REFERENCES 'TEMPES12'.'RILEVAMENTO'('CODICE'),
CONSTRAINT 'FK_UTILIZZATO_STRUMENTO' FOREIGN KEY('STRUMENTO')
REFERENCES 'TEMPES12'.'STRUMENTO'('CODICE'))
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 384K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
CREATE TABLE 'TEMPES12'.'SCHEDA_TECNICA' ('STRUMENTO' VARCHAR2(10
byte) NOT NULL, 'PARAMETRO' VARCHAR2(10 byte) NOT NULL,
'VALORE' VARCHAR2(10 byte) NOT NULL,
CONSTRAINT 'FK_SCHEDATECNICA_RILEVAMENTO' FOREIGN
KEY('PARAMETRO')
REFERENCES 'TEMPES12'.'PARAMETRO'('CODICE'),
CONSTRAINT 'FK_SCHEDATECNICA_STRUMENTO' FOREIGN
KEY('STRUMENTO')
REFERENCES 'TEMPES12'.'STRUMENTO'('CODICE'))
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 24K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
CREATE TABLE 'TEMPES12'.'VERIFICATA' ('STRUMENTO' VARCHAR2(10
byte) NOT NULL, 'AVARIA' VARCHAR2(10 byte) NOT NULL, 'DATA'
DATE NOT NULL, 'INDICE' VARCHAR2(10 byte) NOT NULL,
CONSTRAINT 'FK_VERIFICATA_AVARIA' FOREIGN KEY('AVARIA')
REFERENCES 'TEMPES12'.'AVARIA'('CODICE'),
CONSTRAINT 'FK_VERIFICATA_STRUMENTO' FOREIGN KEY('STRUMENTO')
REFERENCES 'TEMPES12'.'STRUMENTO'('CODICE'))
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 24K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
CREATE TABLE 'TEMPES12'.'STATISTICA' ('AREA' VARCHAR2(10 byte)
NOT NULL, 'NUMERO_PRELIEVI' NUMBER(5) NOT NULL,
'NUMERO_IMMAGINI' NUMBER(5) NOT NULL)
TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS
255
STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0)
LOGGING ;
7. Implementazione delle operazioni
7.1 Operazione O1.a
CREATE OR REPLACE PROCEDURE InserisciRilevamento(
campo1 IN rilevamento.codice%type,
campo2 IN rilevamento.data_ora%type,
campo3 IN rilevamento.coordinate%type,
campo4 IN rilevamento.composizione%type,
campo5 IN rilevamento.fase%type,
campo6 IN rilevamento.tipo%type,
campo7 IN rilevamento.formato%type,
campo8 IN rilevamento.datainvio%type,
campo9 IN area.nome%type)
AS
begin
declare
CodiceArea area.codice%type;
begin
select area.codice into CodiceArea from area where area.nome=campo9;
insert into rilevamento (codice,data_ora,coordinate, composizione,fase,tipo,
formato,datainvio,area)
values (campo1,campo2,campo3,campo4,campo5,campo6,campo7,campo8,CodiceArea);
commit;
end;
end;
7.1 Operazione O1.b
CREATE OR REPLACE PROCEDURE InserisciStrumento(
campo1 IN rilevamento.codice%type,
campo2 IN strumento.nome%type)
AS
begin
declare
CodiceStrumento strumento.codice%type;
begin
select strumento.codice into CodiceStrumento from strumento where strumento.nome=campo2;
insert into utilizzato (strumento,rilevamento) values (CodiceStrumento,campo1);
commit;
end;
end;
7.2 Operazione O2
CREATE OR REPLACE PROCEDURE InserisciAvaria(
campo1 IN strumento.nome%type,
campo2 IN avaria.nome%type,
campo3 in verificata.data%type,
campo4 in verificata.indice%type)
AS
begin
declare
CodiceStrumento strumento.codice%type;
CodiceAvaria avaria.codice%type;
begin
select strumento.codice into CodiceStrumento from strumento where strumento.nome=campo1;
select avaria.codice into CodiceAvaria from avaria where avaria.nome=campo2;
insert into verificata (strumento,avaria,data,indice) values (campo1,campo2,campo3,campo4);
commit;
end;
end;
7.3 Operazione O3
CREATE OR REPLACE PROCEDURE ModificaStato(campo1 IN strumento.nome%type)
AS
begin
declare
statoAttuale strumento.stato%type;
nuovoStato strumento.stato%type;
begin
select strumento.stato into statoAttuale from strumento where strumento.nome=campo1;
if statoAttuale='a' then
nuovoStato:='g';
else
nuovoStato:='a';
end if;
UPDATE strumento SET stato=nuovoStato where strumento.nome=campo1;
commit;
end;
end;
7.4 Operazione O4
CREATE OR REPLACE PROCEDURE StampaSchedaTecnica (
campo1 IN strumento.nome%type)
AS
begin
declare
cursor c1 is
SELECT parametro.nome,parametro.descrizione,scheda_tecnica.valore
FROM parametro,scheda_tecnica,strumento
WHERE (strumento.nome=campo1 AND strumento.codice=scheda_tecnica.strumento AND
scheda_tecnica.parametro=parametro.codice);
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.nome||' '||c1_rec.descrizione||' '||c1_rec.valore);
end loop;
end;
end;
7.5 Operazione O5
CREATE OR REPLACE PROCEDURE StampaAvarie (campo1 IN strumento.nome%type)
AS
begin
declare
cursor c1 is
SELECT avaria.nome,verificata.data,verificata.indice
FROM avaria,verificata,strumento
WHERE (strumento.nome=campo1 AND verificata.strumento=strumento.codice AND
verificata.avaria=avaria.codice);
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.nome||' '||c1_rec.data||' '||c1_rec.indice);
end loop;
end;
end;
7.6 Operazione O6
CREATE OR REPLACE PROCEDURE StampaStatoStrumenti
AS
begin
declare
cursor c1 is SELECT nome,stato FROM strumento;
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.nome||' '||c1_rec.stato);
end loop;
end;
end;
7.7 Operazione O7
CREATE OR REPLACE PROCEDURE StampaPrelieviInArea (
campo1 IN area.nome%type)
AS
begin
declare
cursor c1 is
SELECT rilevamento.codice,rilevamento.data_ora,rilevamento.coordinate,
rilevamento.composizione,rilevamento.fase
FROM rilevamento,area
WHERE (area.nome=campo1 AND rilevamento.area=area.codice);
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.codice||' '||c1_rec.data_ora||' '||c1_rec.coordinate||'
'||c1_rec.composizione||' '||c1_rec.fase);
end loop;
end;
end;
7.8 Operazione O8
CREATE OR REPLACE PROCEDURE StampaImmaginiInArea (
campo1 IN area.nome%type)
AS
begin
declare
cursor c1 is
SELECT rilevamento.codice,rilevamento.data_ora,rilevamento.coordinate,
rilevamento.formato,rilevamento.datainvio
FROM rilevamento,area
WHERE (area.nome=campo1 AND rilevamento.area=area.codice);
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.codice||' '||c1_rec.data_ora||' '||c1_rec.coordinate||'
'||c1_rec.formato||' '||c1_rec.datainvio);
end loop;
end;
end;
7.9 Operazione O9
CREATE OR REPLACE PROCEDURE StampaPrelievi
AS
begin
declare
cursor c1 is
SELECT rilevamento.codice,rilevamento.data_ora,rilevamento.coordinate,
rilevamento.composizione,rilevamento.fase,area.nome
FROM rilevamento join area on rilevamento.area=area.codice;
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.codice||' '||c1_rec.data_ora||' '||c1_rec.coordinate||'
'||c1_rec.composizione||' '||c1_rec.fase||' '||c1_rec.nome);
end loop;
end;
end;
7.10 Operazione O10
CREATE OR REPLACE PROCEDURE StampaImmagini
AS
begin
declare
cursor c1 is
SELECT rilevamento.codice,rilevamento.data_ora,rilevamento.coordinate,
rilevamento.formato,rilevamento.datainvio,area.nome
FROM rilevamento join area on rilevamento.area=area.codice;
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.codice||' '||c1_rec.data_ora||' '||c1_rec.coordinate||'
'||c1_rec.formato||' '||c1_rec.datainvio||' '||c1_rec.nome);
end loop;
end;
end;
7.11 Operazione O11
CREATE OR REPLACE PROCEDURE StampaAvarieAStrumento (
campo1 strumento.nome%type)
AS
begin
declare
cursor c1 is
SELECT avaria.nome as nome1,verificata.data,verificata.indice,area.nome as nome2
FROM strumento,verificata,avaria,utilizzato,rilevamento,area
WHERE (strumento.nome=campo1 AND strumento.codice=verificata.strumento AND
verificata.avaria=avaria.codice AND strumento.codice=utilizzato.strumento AND
utilizzato.rilevamento=rilevamento.codice AND rilevamento.area=area.codice);
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.nome1||' '||c1_rec.data||' '||c1_rec.indice||'
'||c1_rec.nome2);
end loop;
end;
end;
7.12 Operazione O12
CREATE OR REPLACE PROCEDURE StampaAvarieDuranteRilevamento (
campo1 rilevamento.codice%type)
AS
begin
declare
cursor c1 is
SELECT strumento.nome as nome1, area.nome as nome2, avaria.nome as nome3,
verificata.data,verificata.indice
FROM strumento,verificata,avaria,utilizzato,rilevamento,area
WHERE (rilevamento.codice=campo1 AND rilevamento.area=area.codice AND
utilizzato.rilevamento=rilevamento.codice AND
strumento.codice=utilizzato.strumento AND
strumento.codice=verificata.strumento AND
verificata.avaria=avaria.codice);
begin
for c1_rec in c1
loop
DBMS_OUTPUT.PUT_LINE(c1_rec.nome1||' '||c1_rec.nome2||' '||c1_rec.nome3||'
'||c1_rec.data||' '||c1_rec.indice);
end loop;
end;
end;
7.13 Operazione O13
INSERT INTO avaria(codice,nome) VALUES ('codnuovo1','nomenuovo');
COMMIT;
7.14 Operazione O14
INSERT INTO area(codice,nome) VALUES ('codnuovo1','nomenuovo');
COMMIT;
8. Implementazione di TRIGGER e nuove funzionalità
8.1 Trigger per conteggio rilevamenti in una data area
Questo trigger si attiva dopo aver inserito un nuovo rilevamento in una certa area. Esso fornisce il numero complessivo di immagini e il numero complessivo di prelievi eseguiti nell'area specificata fino a quel momento.
CREATE OR REPLACE TRIGGER CONTEGGIORILEVAMENTI after
INSERT ON 'RILEVAMENTO' begin
DECLARE
somma number;
ultimoInserimento rilevamento.data_ora%type;
nuovaArea rilevamento.area%type;
begin
select max(data_ora) into ultimoInserimento from rilevamento;
select area into nuovaArea from rilevamento where data_ora=ultimoinserimento;
select count(rilevamento.codice) into somma from rilevamento
where (rilevamento.area=nuovaArea and rilevamento.tipo='I');
DBMS_OUTPUT.PUT_LINE('Numero immagini nell''area '||nuovaArea||'= '||somma);
select count(rilevamento.codice) into somma from rilevamento
where (rilevamento.area=nuovaArea and rilevamento.tipo='C');
DBMS_OUTPUT.PUT_LINE('Numero rilevamenti nell''area '||nuovaArea||'= '||somma);
end;
end;
8.2 Trigger per aggiornamento tabella statistica
Questo trigger, che si attiva dopo l'inserimento di un nuovo rilevamento, aggiorna una tabella in cui viene riportato, per ciascuna area, il numero complessivo di immagini rilevate e il numero complessivo di prelievi effettuati. La visualizzazione di questa tabella, chiamata "Statistica", è delegata alla procedura VisualizzaStatistica, descritta nel paragrafo che segue.
CREATE OR REPLACE TRIGGER AggiornaStatistica AFTER
INSERT ON 'RILEVAMENTO' begin
DECLARE
somma number;
ultimoInserimento rilevamento.data_ora%type;
nuovaArea rilevamento.area%type;
nuovoTipo rilevamento.tipo%type;
begin
select max(data_ora) into ultimoInserimento from rilevamento;
select area into nuovaArea from rilevamento where data_ora=ultimoinserimento;
select tipo into nuovoTipo from rilevamento where data_ora=ultimoinserimento;
UPDATE statistica SET numero_immagini=numero_immagini+1
WHERE statistica.area=(select area.nome from area where area.codice=nuovaArea);
if nuovoTipo='I' then
UPDATE statistica SET numero_immagini=numero_immagini+1
WHERE (statistica.area=(select area.nome from area where area.codice=nuovaArea));
else
UPDATE statistica SET numero_prelievi=numero_prelievi+1
WHERE (statistica.area=(select area.nome from area where area.codice=nuovaArea));
end if;
end;
end;
8.3 Procedura VisualizzaStatistica
CREATE OR REPLACE PROCEDURE VisualizzaStatistica
AS
begin
declare
Area Statistica.area%type;
TotalePrelievi Statistica.numero_prelievi%type;
TotaleImmagini Statistica.numero_immagini%type;
cursor c is
select area,numero_prelievi,numero_immagini from statistica;
begin
open c;
loop
fetch c into Area,TotalePrelievi,TotaleImmagini;
DBMS_OUTPUT.PUT_LINE(Area||' '||TotalePrelievi||' '||TotaleImmagini);
exit when c%notfound;
end loop;
close c;
end;
end;
Appunti su: |
|
Appunti Ingegneria tecnico | |
Tesine Automobile | |
Lezioni Economia | |