FACOLTA’ DI SCIENZE MATEMATICHE, FISICHE E NATURALI
DIPARTIMENTO DI INFORMATICA
CORSO DI LAUREA MAGISTRALE IN INFORMATICA
ESAME DI
“BASI DI DATI II”
DOCUMENTAZIONE DEL
PROGETTO DI BASI DI DATI II
Appello 03/9/2012
Docente:Prof. Michelangelo CECI
Studente:Francesco PAPARELLA
Anno Accademico 2010/2011
UNIVERSITÀ DEGLISTUDI DI BARI“ALDO MORO”
INDICE
INTRODUZIONE...........................................................................................................1
CAPITOLO 1.
RACCOLTA DEI REQUISITI.......................................................................................2
1.1 Specifica dei requisiti in linguaggio naturale .......................................................31.2 Fonti usate per la raccolta dei dati.........................................................................3
CAPITOLO 2.ANALISI DEI REQUISITI............................................................................................4
2.1 Scelta del livello di astrazione.................................................................................52.2 Evitare le frasi contorte...........................................................................................52.3 Individuazione omonimi e sinonimi........................................................................52.4 Standardizzazione delle frasi....................................................................................62.5 Glossario dei termini................................................................................................72.6 Riorganizzazione delle frasi per concetto................................................................7
CAPITOLO 3.
PROGETTAZIONE CONCETTUALE........................................................................8
3.1 Modello E-R............................................................................................................93.1.1 Schema scheletro........................................................................................93.1.2 Esplosione delle singole entità.................................................................103.1.3 Schema finale...........................................................................................13
3.2 Dizionario dei dati..................................................................................................153.2.1 Entità........................................................................................................153.2.2 Relazioni..................................................................................................163.2.3 Attributi....................................................................................................17
3.3 Regole aziendali....................................................................................................19
CAPITOLO 4.
PROGETTAZIONE LOGICO-RELAZIONALE......................................................20
4.1 Ristrutturazione modello E-R................................................................................214.1.1 Tavole delle operazioni...............................................................................214.1.2 Tavole dei volumi.......................................................................................224.1.3 Analisi delle ridondanze.............................................................................224.1.4 Eliminazione delle generalizzazioni...........................................................244.1.5 Eliminazione di attributi composti.............................................................24
4.1.6 Schema E-R ristrutturato............................................................................244.2 Traduzione del modello E-R..................................................................................26
4.2.1 Schema SQL...............................................................................................284.2.2 Indici...........................................................................................................32
CAPITOLO 5.
TRIGGER......................................................................................................................33
5.1 Descrizione dei trigger..........................................................................................34
CAPITOLO 6.
PROGETTTAZIONE DELLA APPLICAZIONE......................................................43
6.1 Architettura dell’applicazione...............................................................................446.2 Installazione dell’applicazione..............................................................................466.3 Utilizzo dell’applicazione.....................................................................................47
INTRODUZIONE
Il caso di studio presentato riguarda il corso di “Basi di Dati II” della laurea Magistrale in
Informatica realizzato dallo studente Francesco Paparella.
Il progetto che si vuol realizzare è tale da voler racchiudere nella totalità quanto appreso durante il
corso, cercando di mettere in pratica le nozioni teoriche e pratiche acquisite durante il corso. Esso
deve rispecchiare quelli che sono i vincoli di dominio imposti dall’ambiente in cui l’applicazione
sarà utilizzata e pertanto deve essere utilizzabile dai rappresentati dello stesso e per tale motivo si è
deciso di realizzare un piano di lavoro che si sviluppi lungo un percorso di analisi, progettazione,
implementazione e test.
L’idea è quella di realizzare un’applicazione web basata su JSP (Java Server Page) per eseguire le
operazioni sul database PostgreSQL a cui essa è collegata.
Il database sarà progettato secondo lo standard proposto da Atzeni, ovvero saranno eseguite le fasi
di definizione del modello concettuale, logico e fisico. Tale progettazione terrà conto delle
specifiche fornite dal docente, ma sarà opportunamente modellato ed esteso per far fronte alle
necessità degli stackholders e alle necessità del sistema informativo che lo dovrà utilizzare. Il
database PostgreSQL ne permette una implementazione semplice e a basso costo, in quanto è un
prodotto utilizzabile gratuitamente e che mette a disposizione numerose funzionalità professionali.
CAPITOLO 1
RACCOLTA DEI
REQUISITI
o SPECIFICA DEI REQUISITI IN LINGUAGGIO
NATURALE
Si vuole rappresentare una base di dati per la gestione delle informazioni sugli affitti:
12345678910
Ciascun affitto è rivolto a una singola abitazione di cui si devono memorizzare ilcomune, la provincia, il codice del comune, i dati catastali (foglio, particella,subalterno, categoria catastale, rendita catastale, via/piazza, numero civico). Ogniabitazione può appartenere a più persone (locatore) che intervengono con unapercentuale di possesso differente. Ogni abitazione può essere locata a più persone(conduttori).Per ogni contratto si intendono memorizzare informazioni sull'importo annuo delcanone di locazione, la periodicità di pagamento (di default 1 mese) e la durata (data diinizio e data di fine).Si intendono anche memorizzare informazioni sul pagamento della cedolare secca cheprevede tre rate annue per la singola locazione.
o FONTI USATE PER LA RACCOLTA DEI DATI
Per la raccolta dei requisiti si sono utilizzate le seguenti fonti:
o documentazione esistente: contenuta interamente nella traccia dell’esame. Inoltre è
stato fatto uno studio del dominio per meglio comprendere il problema;o interviste con utenti: sono stati intervistati alcuni locatori in modo da poter chiarire
alcuni punti relativi al contratto di affitto.
CAPITOLO 2
ANALISI
DEI
REQUISITI
La definizione dello schema concettuale è il primo passo da svolgere per realizzare la progettazione
del database. Tale procedura è effettuata a partire dal documento di specifica fornito che deve essere
opportunamente analizzato per identificarne gli elementi chiave. Pertanto si svolgeranno le fasi di:
scelta del corretto livello di astrazione, ristrutturazione delle frasi contorte, individuazione degli
omonimi e sinonimi presenti, standardizzazione della struttura delle frasi, definizione del glossario
dei termini, strutturazione dei requisiti e rappresentazione dello schema concettuale.
o SCELTA DEL CORRETTO LIVELLO DI ASTRAZIONE
Prima di procedere con la progettazione concettuale della base di dati è necessario analizzare e
riorganizzare i requisiti raccolti.
Alla riga 4 si fa riferimento al locatore e si intende il proprietario della abitazione che viene data in affitto.Alla riga 5 si fa riferimento al conduttore e si intende la persona che prende in affitto una abitazione.
o EVITARE LE FRASI CONTORTE
All’interno della traccia è presente solamente una frase contorta, ovvero ai righi 3, 4 e 5. Essa viene
ristrutturata nel seguente modo: “Ogni abitazione può appartenere a più locatori con una
percentuale di possesso differente e può essere locata a più conduttori”.
o INDIVIDUAZIONE DEI SINONIMI E OMONIMI
Dopo una attenta analisi delle specifiche non è stata rilevata la presenza di sinonimi ed omonimi.
o STANDARDIZZAZIONE DELLE FRASI
Per ogni abitazione si rappresenta il comune, la provincia, il codice del comune, i dati catastali
(foglio, particella, subalterno, categoria catastale, rendita catastale, via/piazza, numero civico).
Per ogni persona si memorizza il nome, cognome, data di nascita, residenza (via/piazza, numero
civico, comune, provincia) e tipologia (locatore o contraente).
Per contratto si rappresentano le memorizzare informazioni sull'importo annuo del canone di
locazione, la periodicità di pagamento (di default 1 mese) e la durata (data di inizio e data di fine).
Per ogni cedolare secca si rappresentano le informazioni sul pagamento della cedolare secca che
prevede tre rate annue per la singola locazione.
o GLOSSARIO DEI TERMINI
Termine Descrizione Sinonimi Collegamenti
AbitazioneDimora abituale delcontraente e/o deisuoi familiari
CasaLocatore,contratto
Contratto
Accordo di due opiù parti percostituire, regolareo estinguere tra loroun rapportogiuridico dicaratterepatrimoniale
Locatore,contraente,abitazione
Cedolare secca
Sistema ditassazione checonsente al locatoredi applicare unregime ditassazioneagevolato
Contratto
o RIORGANIZZAZIONE DELLE FRASI PER CONCETTO
Frase di carattere generale:
Si vuole rappresentare una base di dati per la gestione delle informazioni sugli affitti.
Frasi relative alla abitazione:
Ciascun affitto è rivolto a una singola abitazione di cui si devono memorizzare il comune, la
provincia, il codice del comune, i dati catastali (foglio, particella, subalterno, categoria catastale,
rendita catastale, via/piazza, numero civico). Ogni abitazione può appartenere a più persone
(locatore) che intervengono con una percentuale di possesso differente. Ogni abitazione può essere
locata a più persone (conduttori).
Frasi relative al contratto:
Per ogni contratto si intendono memorizzare informazioni sull'importo annuo del canone di
locazione, la periodicità di pagamento (di default 1 mese) e la durata (data di inizio e data di fine).
Frasi relative alla cedolare secca:
Si intendono anche memorizzare informazioni sul pagamento della cedolare secca che prevede tre
rate annue per la singola locazione.
CAPITOLO 3
PROGETTAZIONE
CONCETTUALE
Si presenta di seguito il modello concettuale E-R della base di dati seguito dal dizionario dei dati e
dalle regole aziendali.
3.1 MODELLO E-R
Per la progettazione del modello E-R è stata utilizzata la strategia di progettazione ibrida. Sono stati
individuati i concetti più generali ed è stato creato un primo schema E-R generale (schema
scheletro). Successivamente ogni concetto generale è stato decomposto in sotto-concetti fino ad
ottenere diversi sottoschemi separati ed infine è stata fatta l’integrazione degli schemi, per arrivare
allo schema concettuale E-R definitivo, completo e dettagliato.
3.1.1 SCHEMA SCHELETRO
3.1.2 ESPLOSIONE DELLE SINGOLE ENTITÀ
Prima entità – Abitazione: è stata identificata come entità debole e quindi viene inserita una chiave
esterna collegata all’entità “Dati catastali”.
Seconda entità - Dati catastali: la chiave primaria è formata da 3 attributi in quanto dopo alcune
ricerche effettuate si è compreso che i dati catastali sono identificati principalmente tramite 3
attributi ovvero foglio, particella e subalterno.
Terza entità – Persona: come si può bene notare dallo schema riportato qui di seguito, è stata
utilizzata una generalizzazione in quanto dalla lettura delle specifiche si rileva soltanto la presenza
di due tipologie di persone ovvero il locatore ed il conduttore. Inoltre si è pensato di inserire un
attributo composto per identificare i dati relativi alla residenza.
Quarta entità - Contratto
Quinta entità - Stipula: è una entità debole che viene identificata tramite le chiavi primarie delle
entità a cui è associata
Sesta entità - Cedolare secca: si è pensato di inserire una chiave esterna, che in questo schema non
viene riportata ma verrà inserita sullo schema finale e che fa rifermento all’entità contratto, in modo
da poter identificare univocamente ciascuna cedolare secca.
3.1.3 SCHEMA FINALE
Qui di seguito si riporta lo schema
concettuale risultante:
17
Sono state fatte delle assunzioni non evidenziabili dalla specifiche fornite in ingresso:
o la generalizzazione di persona è totale ed esclusiva;o il locatore di una abitazione può essere anche più di una persona (ad esempio
moglie e marito);o il conduttore di una abitazione può essere anche più di una persona (ad
esempio moglie e marito);o esistono tre gruppi di categorie catastali, ovvero: immobili a destinazione
ordinaria (appartamento, villa, abitazione di tipo rurale, abitazione di tipo
popolare, ecc.), particolare e immobili a destinazione speciale (ospedali, case
di cura, istituti di credito, ecc.).
3.2. DIZIONARIO DEI DATI
3.2.1 ENTITÀ DELLO SCHEMA
Entità Descrizione Attributi IdentificatoreAbitazione Dimora abituale del
contraente e/o deisuoi familiari
comune, provincia,codice_comune
codice_comune,foglio, particella,subalterno
Daticatastali
Coordinate cheindividuanol'immobile sulterritorio e neforniscono latipologia fiscale,oltre che la rendita
foglio, particella, subalterno,categoria catastale
foglio, particella,subalterno
Persona
Essere umano senzadistinzione di sesso,razza, lingua,opinione econdizione sociale inquanto soggetto didiritto e, quindi,dotato di capacitàgiuridica. Può esserelocatore o conduttore
C.F., nome, cognome,data_di_nascita,luogo_di_nascita, residenza(via/piazza, numero_civico,comune, provincia)
C.F.
LocatorePersona che affittauna o più abitazionead un conduttore
C.F., nome, cognome, datadi nascita, luogo di nascita,residenza (via/piazza,numero_civico, comune,provincia),
C.F.
18
num_contratti_stipulati
ConduttorePersona che prendein affitto dal locatoreuna o più abitazioni
C.F., nome, cognome, datadi nascita, luogo di nascita,residenza(via/piazza,numero_civico, comune,provincia)
C.F.
ContrattoAccordo di due o piùparti per costituire,regolare o estingueretra loro un rapportogiuridico di caratterepatrimoniale
id_contratto, importo_annuo,data_registrazione,peridocità, durata (data diinizio e data di fine)
id_contratto
Cedolaresecca
Metodo utilizzato dalconduttore per ilpagamento delleimposte relative alcontratto
id_cedolare, importo_totale,data_scadenza
id_cedolare,id_contratto
RataSistema per ilpagamento delleimposte relative allacedolare secca
id_rata, importo id_rata,id_cedolare
3.2.2 RELAZIONI DELLO SCHEMA
Associazioni
Descrizione Entitàcoinvolte
Attributi
Associati Rappresenta i dati catastalirelativi alla singolaabitazione
Abitazione,dati catastali
Affitta Identifica l’abitazione presain affitto dal conduttore
Abitazione,conduttore
Possiede Identifica l’abitazione/ipossedute dal locatore
Abitazione,locatore
Percentuale_possesso,stato
Assegnato Individua l’abitazione e ilcontratto a cui fariferimento
Contratto,abitazione
Pagato Identifica il metodo dipagamento dell’importorelativo al contrattostipulato
Contratto,cedolare secca
Composta Associa alla cedolare seccale rate che la compongono
Cedolaresecca, rata
Lettura Associa il conduttoreall’entità stipula
Conduttore,stipula
Stesura Associa il locatore all’entitàstipula
Locatore,stipula
Registrato Associa il contratto Stipula,
19
all’entità stipula contratto
3.2.3 ATTRIBUTI
Attributi Entità/Associazione Tipo Descrizione Cardinalitàcomune Abitazione Text Comune in cui è
situatal’abitazione
(1,1)
provincia Text Provincia diappartenenzadel comune incui è situatal’abitazione
(1,1)
codice_comune Stringa Codice cheidentificaunivocamente ilcomune in cui èsituatal’abitazione
(1,1)
foglio Dati catastali Intero Riproducel'unitàterritoriale incui è suddivisocatastalmenteogni comune.
(1,1)
particella Intero composta dauna porzione diterreno ofabbricato,appartenente aduno stessosoggetto, aventeuna unicaqualità, classe edestinazione
(1,1)
subalterno Intero identifica inmanieraunivoca un'unitàimmobiliareautonomariconducibile adun determinatosoggettoproprietario efacente parte diuna più grandeentità
(1,1)
20
immobiliare cheè rappresentatadallacorrispondenteparticella
categoria catastale Text indice diriferimento perlaclassificazione eladeterminazionedelle renditedellamaggioranzadei beniimmobili
(1,1)
rendita catastale Utilizzato perdeterminare ilvalore diun’immobile
(1,1)
via/piazza Text Identifical’abitazione
(1,1)
numero_civico Intero Numero civicoche identifical’abitazione
(1,1)
C.F. Persona Stringa Codice fiscaledella persona
(1,1)
nome Text Nome dellapersona
(1,1)
cognome Text Cognome dellapersona
(1,1)
data_di_nascita Stringa Data di nascitadella persona
(1,1)
luogo_di_nascita Text Luogo dinascita dellepersona
(1,1)
residenza Stringa Dati relativi allaresidenza di unapersona
(1,1)
num_contratti_stipulati Intero Numero deicontrattistipulati dallocatore
(1,1)
percentuale Possiede Intero Percentuale dipossesso di unaabitazione
(1,1)
stato Text Statodell’abitazione(Affittata, Nonaffittata)
(1,1)
21
id_contratto Contratto Stringa Identificativodel contratto
(1,1)
importo_annuo Intero Importo totalerelativo ad unsingolocontratto
(1,1)
data_registrazione Stringa Data in cui ilcontratto vieneregistrato
(1,1)
periodicità Intero Periodicità delpagamentorelativa alcanone dilocazione
(1,1)
durata Stringa Durata delcontratto
(1,1)
id_cedolare Cedolare secca Stringa Identificativodella cedolaresecca
(1,1)
importo totale Intero Importo totalerelativo allacedolare secca
(1,1)
id_rata Rata Stringa Identificativodella rata
(1,3)
importo Intero Importo relativoalla singola rata
(1,1)
data_scadenza Stringa (1,3)
3.3 REGOLE AZIENDALI
Regole di vincoloRv1: la data di fine del contratto è data dalla somma tra la data di inizio e un numero di annipari a 6, che costituisce la durata minima del contratto;Rv2: l’importo annuo del canone e le modalità di pagamento sono stabilite dal locatore;
Regole d derivazioneNon sono presenti
22
CAPITOLO 4
PROGETTAZIONE
LOGICA-
RELAZIONALE
23
La progettazione dello schema logico comporta un’attenta analisi dello schema concettuale
che potrebbe contenere elementi non direttamente rappresentabili in un database relazionale
come ad esempio attributi multi-valore o generalizzazioni. In tale passo si procederà alla
normalizzazione dello schema concettuale e alla sua trasformazione in logico prendendo in
esame anche alcune valutazioni prestazionali su elementi ridondanti e carico di lavoro che il
database dovrà sorreggere. Per fare tali supposizioni è necessario identificare le operazioni
che più spesso saranno eseguite sul database e in conformità a queste cercare di ottimizzare la
struttura del database. I passi da svolgere sono quindi i seguenti: identificazione delle
operazioni frequenti con tavola delle operazioni, definizione della tavola dei volumi, analisi
delle ridondanze con tavola degli accessi, normalizzazione dello schema concettuale,
trasformazione in schema logico.
4.1 RISTRUTTURAZIONE MODELLO E-R
4.1.1 TAVOLA DELLE OPERAZIONI
Le operazioni sulla base di dati risultano essere le seguenti:
2 inserimento di una nuova abitazione;3 inserimento di un nuovo locatore;4 inserimento di un nuovo contratto;5 visualizzazione dei dati del locatore e del numero di contratti stipulati.
Le relative frequenze sono riportate nella seguente tabella:
Operazioni
Tipo
Frequenza
1 I 1 volta/mese2 I 1 volta/giorno3 I 15 volte/mese4 B 10
volte/giorno
Tabella 1 – Tavola delle operazioni
24
5.1.1 TAVOLA DEI VOLUMI
Concetto Tipo
Volume
Abitazione E 1000Associati R 1000Dati catastali E 1000Affitta*1 R 300*3 = 900Possiede*2 R 500*5 =
2500Persona E 800Locatore E 500Conduttore E 300Assegnato R 250Contratto E 250Pagato R 250Cedolaresecca
E 250
Composta R 750Rata*3 E 250*3= 750Stipula R 250Relazione 1 R 250Relazione 2 R 250Relazione 3 R 250
Tabella 2 – Tavola dei volumi
*1 si assume in media che ogni conduttore affitta 3 abitazioni
*2si assume in media che ogni locatore possiede 5 abitazioni
*3la cedolare secca è composta da 3 rate
5.1.2 ANALISI DELLE RIDONDANZE
L'unica ridondanza presente è il numero di contratti stipulati che si può ricavare contando il
numero delle tuple presenti nell’entità contratto. L’operazione coinvolta è la numero 4. A
questo punto si procede alla determinazione della tavola degli accessi.
25
Seguono ora le tavole degli accessi (con ridondanza e senza ridondanza) relative
all’operazione 4 (visualizzazione dei dati del locatore e del numero di contratti stipulati).
1. Senza ridondanza:
Concetto Tipo Accessi
Tipo Accesso
Locatore E 1 LStesura R 1 LStipula E 1 LRegistrato
R 1 L
Contratto E 1 L
Tabella 3 – Tavola degli accessi senza ridondanza
2. Con ridondanza:
Concetto
Tipo Accessi
Tipo Accesso
Locatore E 1 L
Tabella 4 – Tavola degli accessi in presenza di ridondanza
Riportiamo qui di seguito i calcoli degli accessi per le due tavole:
1. Costo in assenza di ridondanza: 10*1*(1*2*1*3 + 1*1 + 1*1 + 1*1 + 1*1) = 10*5 = 50
*1: costo dell’operazione;*2: numero di accessi effettuati;*3: costo dell’accesso (in caso di lettura il costo è pari ad 1 e in caso di scrittura il
costo è pari a 2).
2. Costo in presenza di ridondanza: 10*(1*1) = 10*1 = 10
Dal confronto dei due valori ottenuti si può notare che conviene mantenere l’attributo
ridondante.
26
5.1.3 ELIMINAZIONE DELLE GERARCHIE
Dall’osservazione dello schema E-R riportato a pagina 14, si nota la presenza di una sola
gerarchia che si riferisce all’entità “Persona”. Si è preferito accorpare l’entità padre nelle
entità figlie in modo da identificare in modo univoco il locatore ed il conduttore. Questa scelta
comporterà la presenza di due tabelle nel database con campi uguali.
5.1.4 ELIMINAZIONE DI ATTRIBUTI COMPOSTI
Abbiamo solamente due attributi composti, ovvero residenza presente nell’entità “Persona” e
durata presente nell’entità “Contratto”. Entrambi gli attributi sono stati scomposti e gli
attributi componenti vengono ereditati dalla entità a cui si riferiscono.
5.1.5 SCHEMA E-R RISTRUTTURATO
Si riporta di seguito lo schema E-R ristrutturato:
27
28
5.2 TRADUZIONE DEL MODELLO E-R RISTRUTTURATO IN
MODELLO LOGICO
Il modello logico di riferimento è il modello relazionale. Viene presentata la lista delle tabelle
con i rispettivi attributi, i vincoli di chiave primaria, i vincoli di integrità referenziale e
l’indicazione di eventuali valori nulli.
In grassetto verranno evidenziati i vincoli di chiave primaria e in corsivo quelli di chiave
esterna.
2 Abitazione
codice_comune foglio particella subalterno provincia comune
3 Dati catastali
foglio particella subalterno rendita_catastale categoria_catastale via/piazzanumero_civico
4 Locatore
Cf_loc nome cognome data_di_nascita luogo_di_nascitavia/piazza numero_civico comune provincia C.A.P.num_contratti_stipulati
5 Possiede
Cf_loc codice_comune foglio particellasubalterno percentuale_possesso stato
6 Conduttore
Cf_cond nome cognome data_di_nascita luogo_di_nascitavia/piazza numero_civico comune provincia C.A.P.
7 Affitta
Cf_cond codice_comune foglio particellasubalterno
29
8 Contratto
id_contratto importo_annuo data_registrazione periodicitàgiorno_inizio mese_inizio anno_inizio giorno_finemese_fine anno_fine codice_comune foglioparticella subalterno
9 Stipula
Cf_loc Cf_cond id_contratto
10 Cedolare secca
id_cedolare id_contratto importo_totale
11 Rata
id_rata id_cedolare id_contratto importo data_scadenza
Vincoli di integrità referenziale:
1 Abitazione(foglio, particella, subalterno) chiave esterna di Dati catastali;2 Possiede(codice_comune, foglio, particella, subalterno) chiave esterna di Abitazione;3 Affitta(codice_comune, foglio, particella, subalterno) chiave esterna di Abitazione;4 Abitazione(Cf_cond) chiave esterna di Conduttore;5 Stipula(Cf_cond) chiave esterna di Conduttore;6 Stipula(Cf_loc) chiave esterna di Locatore;7 Stipula(id_contratto) chiave esterna di Contratto;8 Cedolare secca(id_contratto) chiave esterna di Contratto;9 Rata(id_cedolare, id_contratto) chiave esterna di Cedolare secca.
2.1.1 SCHEMA SQL
La base di dati è stata implementata in PostgreSql 8.4. Qui di seguito riportiamo le istruzioni
per la realizzazione in SQL dello schema logico:
TABELLA “Abitazione”
30
CREATE TABLE abitazione
(
codice_comune character(4) NOT NULL DEFAULT 1,
foglio integer NOT NULL DEFAULT 1,
particella integer NOT NULL DEFAULT 1,
subalterno integer NOT NULL DEFAULT 1,
provincia character(2),
comune character(50),
primary key (codice_comune, foglio, particella, subalterno),
foreign key (foglio, particella, subalterno) references dati_catastali (foglio, particella,
subalterno) on update cascade on delete cascade
);
TABELLA “Dati catastali”
CREATE TABLE dati_catastali
(
foglio integer NOT NULL DEFAULT 1,
particella integer NOT NULL DEFAULT 1,
subalterno integer NOT NULL DEFAULT 1,
rendita_catastale nmeric NOT NULL DEFAULT 1,
categoria_catastale character(50),
via_piazza character(50),
numero_civico integer,
primary key(foglio, particella, subalterno)
);
TABELLA “Contratto”
CREATE TABLE contratto
(
id_contratto integer NOT NULL,
31
importo_annuo numeric,
data_registrazione date,
periodicita integer,
giorno_inizio integer,
mese_inizio integer,
anno_inizio integer,
giorno_fine integer,
mese_fine integer,
anno_fine integer,
codice_comune character(4),
foglio integer,
particella integer,
subalterno integer,
primary key(id_contratto),
foreign key (codice_comune, foglio, particella, subalterno) references abitazione
(codice_comune, foglio, particella, subalterno) on update cascade on delete cascade
);
TABELLA “Locatore”
CREATE TABLE locatore
(
cf_loc character(16) NOT NULL DEFAULT 1,
nome character(50) NOT NULL DEFAULT 1,
cognome character(50) NOT NULL DEFAULT 1,
data_di_nascita date,
luogo_di_nascita character(50),
via_piazza character(50),
numero_civico integer,
comune character(50),
provincia character(2),
cap integer,
num_contratti_stipulati integer,
primary key (cf_loc)
32
);
TABELLA “Possiede”
CREATE TABLE possiede
(
cf_loc character(16) NOT NULL,
codice_comune character(4) NOT NULL,
foglio integer NOT NULL,
particella integer NOT NULL,
subalterno integer NOT NULL,
percentuale_possesso integer,
stato character(30),
primary key (cf_loc, codice_comune, foglio, particella, subalterno),
foreign key (cf_loc) references locatore (cf_loc) on update cascade on delete cascade,
foreign key (codice_comune, foglio, particella, subalterno) references abitazione
(codice_comune, foglio, particella, subalterno) on update cascade on delete cascade
);
TABELLA “conduttore”
CREATE TABLE conduttore
(
cf_cond character(16) NOT NULL DEFAULT 1,
nome character(50) NOT NULL DEFAULT 1,
cognome character(50) NOT NULL DEFAULT 1,
data_di_nascita date,
luogo_di_nascita character(50),
via_piazza character(50),
numero_civico integer,
comune character(50),
provincia character(2),
cap integer,
primary key (cf_cond)
33
);
TABELLA “Affitta”
CREATE TABLE affitta
(
cf_cond character(16) NOT NULL,
codice_comune character(4) NOT NULL,
foglio integer NOT NULL,
particella integer NOT NULL,
subalterno integer NOT NULL,
primary key (cf_cond, codice_comune, foglio, particella, subalterno),
foreign key (cf_cond) references conduttore (cf_cond) on update cascade on delete cascade,
foreign key (codice_comune, foglio, particella, subalterno) references abitazione
(codice_comune, foglio, particella, subalterno) on update cascade on delete cascade
);
TABELLA “Stipula”
CREATE TABLE stipula
(
cf_loc character(16) NOT NULL,
cf_cond character(16) NOT NULL,
id_contratto integer NOT NULL,
primary key (cf_loc, cf_cond, id_contratto),
foreign key (cf_cond) references conduttore (cf_cond) on update cascade on delete cascade,
foreign key (cf_loc) references locatore (cf_loc) on update cascade on delete cascade,
foreign key (id_contratto) references contratto (id_contratto) on update cascade on delete
cascade
);
34
TABELLA “Cedolare secca”
CREATE TABLE cedolare_secca
(
id_cedolare integer NOT NULL,
id_contratto integer NOT NULL,
importo_totale numeric,
primary key (id_cedolare, id_contratto),
foreign key (id_contratto) references contratto (id_contratto) on update cascade on delete
cascade
);
TABELLA “rata”
CREATE TABLE rata
(
id_rata integer NOT NULL,
id_cedolare integer NOT NULL,
id_contratto integer NOT NULL,
importo numeric,
data_scadenza date,
primary key (id_rata, id_cedolare, id_contratto),
foreign key (id_cedolare, id_contratto) references cedolare_secca (id_cedolare,
id_contratto) on update cascade on delete cascade
);
2.1.2 INDICI
35
Poiché tutte le operazioni effettuate sulla base di dati non eseguono accessi puntuali o per
intervallo a campi non chiave delle tabelle, non sono stati definiti indici. Diverse prove hanno
evidenziato che il DBMS utilizza gli indici hash definiti per le chiavi primarie anche se
vengono definiti ulteriori indici su questi campi.
CAPITOLO 5
TRIGGER
36
2.1 DESCRIZIONE DEI TRIGGER
Per rendere attivo il comportamento della base di dati è possibile definire i seguenti trigger, i
quali sono stati realizzati utilizzando il paradigma ECA (Evento - Condizione – Azione):
5 Trigger per verificare l’esistenza della chiave esterna sulla tabella abitazione
Evento: inserimento nella tabella “abitazione”Condizione: i dati della abitazione inserita devono essere presenti nella tabella “dati
catastali”Azione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "ABITAZIONE - controllo_dati_abitazione"()RETURNS trigger AS$BODY$beginperform * FROM "dati_catastali" WHERE "dati_catastali".foglio = new.foglio and "dati_catastali".particella = new.particella and "dati_catastali".subalterno = new.subalterno; if not found then
raise exception 'Inserire i dati catastali corretti!!!';return null;
elsereturn new;
end if;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_chiave_esternaBEFORE INSERTON abitazioneFOR EACH ROWEXECUTE PROCEDURE "ABITAZIONE - controllo_dati_abitazione"();
6 Trigger per verificare l’esistenza dei dati di una abitazione quando viene inserito un nuovo
contratto
Evento: inserimento nella tabella “contratto”Condizione: i dati della abitazione a cui si riferisce il contratto devono essere presenti
nella tabella “abitazione”Azione: rollback della transazioneGranularità di attivazione: livello di tupla
37
CREATE OR REPLACE FUNCTION "CONTRATTO - controllo_dati_abitazione"()RETURNS trigger AS$BODY$beginperform * FROM "abitazione" WHERE "abitazione".foglio = new.foglio and "abitazione".particella = new.particella and "abitazione".subalterno = new.subalterno and “abitazione".codice_comune = new.codice_comune;if not found then
raise exception 'Impossibile inserire un nuovo contratto!!!';return null;
elsereturn new;
end if;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_dati_abitazioneBEFORE INSERTON contrattoFOR EACH ROWEXECUTE PROCEDURE "CONTRATTO - controllo_dati_abitazione"();
7 Trigger per l’inserimento automatico del codice di un nuovo contratto
Evento: inserimento nella tabella “contratto”Condizione: nessunaAzione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "CONTRATTO - inserisci_id_contratto"()RETURNS trigger AS$BODY$declarenumero_tuple integer:=0;Beginselect count(*) into numero_tuple from contratto;if (numero_tuple = 0) thennew.id_contratto = 1001; -- caso di tabella vuotaelsenew.id_contratto = ((select max(id_contratto) from contratto) +1);-- caso di esistenza di almeno una tuplaend if;return NEW;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
38
CREATE TRIGGER inserisci_codice_contrattoBEFORE INSERTON contrattoFOR EACH ROWEXECUTE PROCEDURE "CONTRATTO - inserisci_id_contratto"();
8 Trigger per l’inserimento automatico della data di scadenza di un contratto
Evento: inserimento nella tabella “contratto”Condizione: deve essere presente la data di inizio del contrattoAzione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "CONTRATTO - inserisci_data_fine"()RETURNS trigger AS$BODY$Beginupdate contratto set anno_fine = new.anno_fine + 6 where foglio=new.foglio and particella=new.particella and subalterno = new.subalterno; return NEW;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER inerisci_data_scadenzaAFTER INSERTON contrattoFOR EACH ROWEXECUTE PROCEDURE "CONTRATTO - inserisci_data_fine"();
9 Trigger per il calcolo automatico dell’importo delle rate relative alla cedolare secca:
Evento: inserimento nella tabella “rata”Condizione: deve essere presente l’importo totale nella tabella “cedolare secca”Azione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "RATA - inserisci_importo"()RETURNS trigger AS$BODY$declareimporto_tot float;Beginselect importo_totale into importo_tot from cedolare_secca;update rata set importo = (importo_tot/3);return NEW;end;
39
$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER inserisci_importo_rataAFTER INSERTON rataFOR EACH ROWEXECUTE PROCEDURE "RATA - inserisci_importo"();
10 Trigger per la verifica del codice della cedolare secca:
Evento: inserimento nella tabella “rata”Condizione: deve essere presente la cedolare secca a cui fa riferimento la rata inseritaAzione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "RATA - controllo_id_cedolare"()RETURNS trigger AS$BODY$beginperform * FROM "cedolare_secca" WHERE "cedolare_secca".id_cedolare = new.id_cedolare; if not found then
raise exception 'Inserire il codice cedolare corretto!!!';return null;
elsereturn new;
end if;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_id_cedolareBEFORE INSERTON rataFOR EACH ROWEXECUTE PROCEDURE "RATA - controllo_id_cedolare"();
11 Trigger per l’aggiornamento automatico del campo “num_contratti_stipulati”
Evento: inserimento o cancellazione nella tabella “stipula”Condizione: nessunaAzione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "STIPULA - inserisci_contratto_stipulato"()RETURNS trigger AS
40
$BODY$beginupdate locatore set num_contratti_stipulati = num_contratti_stipulati + 1 where cf_loc = new.cf_loc;return new;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER aggiorna_num_contrattiBEFORE INSERTON stipulaFOR EACH ROWEXECUTE PROCEDURE "STIPULA - inserisci_contratto_stipulato"();
CREATE OR REPLACE FUNCTION "STIPULA - elimina_contratto_stipulato"()RETURNS trigger AS$BODY$beginupdate locatore set num_contratti_stipulati = num_contratti_stipulati - 1 where cf_loc = old.cf_loc;return old;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER modifica_num_contrattiAFTER DELETEON stipulaFOR EACH ROWEXECUTE PROCEDURE "STIPULA - elimina_contratto_stipulato"();
12 Trigger per la verifica del locatore e del conduttore quando si inserisce un nuovo
contratto stipulato
Evento: inserimento o cancellazione nella tabella “stipula”Condizione: il locatore e il conduttore devono essere presenti nelle rispettive tabelleAzione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "STIPULA - controllo_cf_conduttore"()RETURNS trigger AS$BODY$beginif new.cf_cond not in (select cf_cond from conduttore) then
raise exception 'Conduttore non presente!!!';
41
return null;end if;return new;end;$BODY$ LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_cf_conduttoreBEFORE INSERTON stipulaFOR EACH ROWEXECUTE PROCEDURE "STIPULA - controllo_cf_conduttore"();
CREATE OR REPLACE FUNCTION "STIPULA - controllo_cf_locatore"()RETURNS trigger AS$BODY$beginif new.cf_loc not in (select cf_loc from locatore) then
raise exception 'Locatore non presente!!!';return null;
end if;return new;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_cf_locatoreBEFORE INSERTON stipulaFOR EACH ROWEXECUTE PROCEDURE "STIPULA - controllo_cf_locatore"();
13 Trigger per verificare l’esistenza del contratto quando si inserisce un nuovo contratto
stipulato
Evento: inserimento o cancellazione nella tabella “stipula”Condizione: il contratto inserito deve essere presente nella rispettiva tabellaAzione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "STIPULA - controllo_id_contratto"()RETURNS trigger AS$BODY$beginif new.id_contratto not in (select id_contratto from contratto) then
raise exception 'Contratto non presente!!!';return null;
end if;
42
return new;end;$BODY$
LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_id_contrattoBEFORE INSERT OR UPDATEON stipulaFOR EACH ROWEXECUTE PROCEDURE "STIPULA - controllo_id_contratto"();
14 Trigger per la verifica del codice del contratto quando si inserisce una nuova cedolare
secca
Evento: inserimento o cancellazione nella tabella “cedolare secca”Condizione: il contratto inserito deve essere presente nella rispettiva tabellaAzione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "CEDOLARE SECCA - controllo_id_contratto"()RETURNS trigger AS$BODY$beginif new.id_contratto not in (select id_contratto from contratto) then
raise exception 'Contratto non presente!!!';return null;
end if;return new;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_id_contrattoBEFORE INSERTON cedolare_seccaFOR EACH ROWEXECUTE PROCEDURE "CEDOLARE SECCA - controllo_id_contratto"();
15 Trigger per la verifica dell’esistenza dei dati di una abitazione e del locatore quando
esso inserisce una abitazione di sua proprietà
Evento: inserimento o cancellazione nella tabella “possiede”Condizione: i dati relativi all’abitazione e al locatore devono essere presenti nelle
rispettive tabelle
43
Azione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "POSSIEDE - controllo_dati_abitazione"()RETURNS trigger AS$BODY$beginperform * FROM "dati_catastali" WHERE "dati_catastali".foglio = new.foglio and "dati_catastali".particella = new.particella and "dati_catastali".subalterno = new.subalterno; if not found then
raise exception 'Impossibile inserire una abitazione!!!';return null;
elsereturn new;
end if;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_dati_abitazioneBEFORE INSERTON possiedeFOR EACH ROWEXECUTE PROCEDURE "POSSIEDE - controllo_dati_abitazione"();
CREATE OR REPLACE FUNCTION "POSSIEDE - controllo_cf_locatore"()RETURNS trigger AS$BODY$beginif new.cf_loc not in (select cf_loc from locatore) then
raise exception 'Codice fiscale locatore inesistente!!!';return null;
end if;return new;end;$BODY$ LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_locatoreBEFORE INSERTON possiedeFOR EACH ROWEXECUTE PROCEDURE "POSSIEDE - controllo_cf_locatore"();
16 Trigger per la verifica dei dati relativi all’abitazione e del conduttore quando esso
inserisce una nuova casa in affitto
44
Evento: inserimento o cancellazione nella tabella “possiede”Condizione: i dati relativi all’abitazione e al conduttore devono essere presenti nelle
rispettive tabelleAzione: rollback della transazioneGranularità di attivazione: livello di tupla
CREATE OR REPLACE FUNCTION "AFFITTA - controllo_cf_conduttore"()RETURNS trigger AS$BODY$beginif new.cf_cond not in (select cf_cond from conduttore) then
raise exception 'Codice fiscale conduttore inesistente!!!';end if;return new;end;$BODY$LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_conduttoreBEFORE INSERTON affittaFOR EACH ROWEXECUTE PROCEDURE "AFFITTA - controllo_cf_conduttore"();
CREATE OR REPLACE FUNCTION "AFFITTA - controllo_dati_abitazione"()RETURNS trigger AS$BODY$beginperform * FROM "abitazione" WHERE "abitazione".foglio = new.foglio and "abitazione".particella = new.particella and "abitazione".subalterno = new.subalterno and "abitazione".codice_comune = new.codice_comune ; if not found then
raise exception 'Impossibile inserire un nuovo contratto di affitto!!!';return null;
elsereturn new;
end if;end;$BODY$ LANGUAGE 'plpgsql' VOLATILE
CREATE TRIGGER verifica_dati_abitazioneBEFORE INSERTON affittaFOR EACH ROWEXECUTE PROCEDURE "AFFITTA - controllo_dati
45
CAPITOLO 6
PROGETTAZIONE
DELLA APPLICAZIONE
6.1 ARCHITETTURA DELL’APPLICAZIONE
L’applicazione web sviluppata, denominata “Agenzia dei Tributi”, è stata realizzata
utilizzando la tecnologia delle Java Server Pages (JSP) invece dell’uso diretto delle Servlet,
in quanto la parte fissa (presentazione) di una pagina è predominante rispetto alla parte che
46
Lato ServerLato Client
Browser JSP
DatabasePostgres
viene generata dinamicamente con codice Java; inoltre quest’ultimo viene gestito con
semplici scriptlet ed espressioni riguardanti le operazioni sulla base di dati.
In definitiva, il client fa riferimento direttamente alla pagina JSP che interagisce a sua volta
con il database e il risultato viene passato direttamente al client.
Figura 1 – Architettura dell’applicazione
La pagina “index.html” rappresenta la pagina principale dell’applicazione ed include i
riferimenti ad altre due pagine ovvero “login.jsp” e “registra.jsp”. Per poter utilizzare
l’applicazione è necessario registrarsi. Una volta registrati al sistema ed aver effettuato il
login, verrà visualizzata all’utente la pagina con l’elenco delle operazioni disponibili, ovvero
inserimento, modifica, cancellazione e visualizza.
La pagina “inserimento. jsp” contiene i riferimenti alle pagine per l’immissione dei dati nel
database:
1) inserimento_dati_catastali.jsp: utilizzata per inserire i dati catastali di una nuova
abitazione;2) inserimento_abitazione.jsp: utilizzata per inserire i dati di una nuova abitazione;3) inserimento_locatore.jsp: utilizzata per inserire i dati relativi ad un nuovo locatore;4) inserimento_conduttore.jsp: utilizzata per inserire i dati relativi ad un nuovo
conduttore;5) inserimento_contratto.jsp: utilizzata per inserire i dati relativi ad un nuovo contratto;6) inserimento_cedolare_secca.jsp: utilizzata per inserire i dati relativi ad una cedolare
secca;
47
7) inserimento_contratti_stipulati.jsp: utilizzata per inserire i dati relativi ad un nuovo
contratto stipulato tra il locatore ed il conduttore;8) inserimento_abitazioni_possedute.jsp: utilizzata per inserire i dati relativi alle
abitazioni possedute da un locatore.
La pagina “modifica.jsp” contiene i riferimenti alle pagine per la modifica dei dati presenti nel
database:
9) modifica_dati_catastali.jsp: utilizzata per modificare i dati catastali di una abitazione;10) modifica_dati_locatore.jsp: utilizzata per modificare i dati di un locatore;11) modifica_dati_conduttore.jsp: utilizzata per modificare i dati di un conduttore;12) modifica_importo_contratto.jsp: utilizzata per modificare l’importo totale di un
contratto;13) modifica_abitazioni_possedute.jsp: utilizzata per modificare le case possedute da un
locatore.
La pagina “elimina.jsp” contiene i riferimenti alle pagine per l’eliminazione dei dati presenti
nel database:
14) elimina_dati_catastali.jsp: utilizzata per eliminare i dati catastali di una abitazione;15) elimina _locatore.jsp: utilizzata per eliminare i dati di un locatore;16) elimina _conduttore.jsp: utilizzata per eliminare i dati di un conduttore;17) elimina_contratto.jsp: utilizzata per eliminare un contratto.
La pagina “visualizza.jsp” contiene i riferimenti alle pagine per la visualizzazione dei dati
presenti nel database:
18) visualizza_contratti_in_scadenza.jsp: utilizzata per visualizzare i contratti in scadenza
in un determinato mese ed anno. Inoltre vengono visualizzati i dati del conduttore a
cui fa riferimento il contratto;19) visualizza_contratti_stipulati.jsp: utilizzata per visualizzare i dati dei contratti stipulati
da un locatore;20) visualizza_dati_catastali_abitazione.jsp: utilizzata per visualizzare i dati catastali della
abitazioni possedute da un locatore;21) visualizza_dati_cedolare_rata.jsp: utilizzata per visualizzare i dati relativi alle rate per
il pagamento della cedolare secca;22) visualizza_dettagli_abitazione.jsp: utilizzata per visualizzare i dettagli di una
abitazione posseduta da un locatore.
48
Tutte le pagine jsp realizzate utilizzano un’istanza della classe java “Connessione_Database”,
la quale contiene tutte le istruzioni per la connessione al database e per l’esecuzione delle
query.
6.2 INSTALLAZIONE DELL’APPLICAZIONE
L’applicazione viene fornita tramite il file “Ageniza_Tributi.war”.
Per poterla utilizzare è necessario installare sul proprio computer i seguenti software:
1. PostgreSQL 8.4;2. Apache Tomcat 7.0.
Dopo avere verificato la presenza dei software sul pc, avviare PostgreSQL ed eseguire le
seguenti operazioni:
1 creazione di un nuovo utente con nome “postgres” e password “admin”;2 creazione di un nuovo database denominato “Agenzia_tributi” e cliccare in
corrispondenza del database con il tasto destro del mouse e scegliere “ Ripristino” . Dalla
finestra che comparirà scegliere il file “Agenzia_tributi.backup” e cliccare il pulsante
“Ok”. In questo modo verranno caricate tutte le tabelle componenti il database con i
relativi dati e trigger creati;3 creazione di un nuovo database denominato “Utenti” e cliccare in corrispondenza del
database con il tasto destro del mouse e scegliere “ Ripristino” . Dalla finestra che
comparirà scegliere il file “Utenti.backup” e cliccare il pulsante “Ok”. In questo modo
verranno caricate tutte le informazioni relative agli utenti registrati al sistema.
Una volta terminata la creazione del database, copiare il file “Ageniza_Tributi.war” nella
cartella “webapps” di Apache Tomcat. Fatto ciò, posizionarsi nella cartella “bin” di Apache
Tomcat ed avviare il file “Tomcat7”. In questo modo verrà effettuato automaticamente il
deploy dell’applicazione sul server web e se l’operazione è stato eseguita correttamente
all’interno della cartella “webapps” sarà presente una sotto-cartella denominata
“Ageniza_Tributi.war”, la quale rappresenta la nostra applicazione.
49
6.3 UTILIZZO DELL’APPLICAZIONE
Terminata la fase di installazione del sistema, aprire il browser e digitare il seguente indirizzo:
http://localhost:8080/Agenzia_Tributi/index.html e dopo aver premuto “Invio” verrà
visualizzata la Home page dell’applicazione
Figura 2 – Home page
50
Come si può notare all’interno della “Home page”, sono presenti due voci “Login” e
“Registra”. Per poter utilizzare l’applicazione è necessario registrarsi e cliccando sul pulsante
“Registra” verrà visualizzata la seguente pagina:
Figura 3 – Pagina per la registrazione di un nuovo utente
Al termine della fase di registrazione verrà visualizzato un messaggio che riporterà l’esito
dell’operazione svolta e cliccando sul pulsante “Accedi” si potrà accedere alla pagina con la
lista delle operazioni che si possono svolgere.
Mentre cliccando sulla voce “Login” verrà visualizzata la seguente pagina:
51
Figura 4 – Pagina di login
Dopo aver inserito “Username”e “Passowrd”, si accederà al sistema e verrà mostrata la
pagina con la lista delle operazioni.
Figura 5 – Pagina contenente l’elenco delle operazioni
52
In questa pagina sono presenti quattro link alle varie operazioni che si possono svolgere sul
database, ovvero “Inserimento”, “Modifica”, “Elimina” e “Visualizzazione”.
Cliccando sulla voce “Inserimento”, verranno mostrati i link alle pagine per inserire ad
esempio i dati catastali, i dati del locatore, i dati del conduttore, ecc.
Figura 5 – Pagina per l’inserimento dei dati
Selezionando la voce “Locatore”, verrà visualizzata la seguente pagina:
53
Figura 6 – Pagina per l’inserimento dei dati di un locatore
e come si può notare dalla immagine sono presenti vari campi da compilare e terminata la fase
di compilazione, cliccando sul pulsante “Inserisci” verrà effettuato l’inserimento dei dati
all’interno del database. Al termine dell’operazione verrà mostrato un messaggio ed una
tabella riepilogativa contenente i dati inseriti.
Figura 7 – Pagina di conferma dei dati inseriti
54
Selezionando la voce “Modifica”, si accederà alla pagina riportata qui di seguito, in cui come
nel caso precedente verranno riportati i link di alcune operazioni di modifica che si possono
effettuare sul database.
Figura 8 – Pagina per la modifica dei dati
55
Scegliamo la voce “Locatore”, in modo da poter modificare i dati precedentemente inseriti:
Figura 9 – Pagina per la modifica dei dati del locatore
All’utente verrà chiesto di inserire il codice fiscale del locatore, in quanto esso lo identifica
all’interno della base di dati ed inoltre ci sono i vari campi in cui si potranno inserire i nuovi
valori. Come per l’operazione di inserimento, anche in questo caso verrà mostrato all’utente
un messaggio di conferma dell’operazione eseguita ed una tabella riepilogativa contenente i
nuovi valori inseriti.
56
Figura 10 – Pagina di conferma dei dati modificati
Selezionando la voce “Elimina”, verrà visualizzata la pagina contente i link alle pagine per la
modifica dei dati:
Figura 11 – Pagina per l’eliminazione dei dati
Scegliamo la voce “Locatore” in modo da eliminare i dati del locatore inserito.
57
Figura 12 – Pagina per l’eliminazione dei dati del locatore
Come per l’operazione di modifica, anche in questo caso verrà chiesto all’utente di inserire il
codice fiscale del locatore che si vuole eliminare. Al termine dell’operazione verrà
visualizzato solamente il messaggio di conferma.
Figura 13 – Pagina per l’eliminazione dei dati del locatore
58
Infine scegliendo la voce “Visualizzazione” verrà visualizzata la seguente pagina:
Figura 13 – Pagina per la visualizzazione dei dati presenti nel database
In questa pagina sono presenti i link alle diverse operazioni di ricerca che si possono
effettuare sul database, ed in questo caso ne sono riportate solo alcune più significative.
Scegliendo la prima voce “Dati catastali di una abitazione posseduta da un locatore” ,
verrà visualizzata la seguente pagina:
59
Figura 14 – Pagina per la visualizzazione dei dati catastali di una abitazione posseduta da un locatore
Inserendo il codice fiscale del locatore, verrà eseguita una ricerca all’interno del database e
verranno mostrati i dati di tutte le abitazione possedute dal locatore stesso.
Figura 15 – Pagina in cui vengono mostrati i risultati della ricerca
60
Top Related