agenzia_immobiliare (versione italiana)

Transcript

agenzia_immobiliare (versione italiana)
Laboratorio di Basi di Dati
Progetto “Agenzia Immobiliare”
Prof. Pierluigi Pierini
A.A. 2012/2013
Premessa
La specifica informale del problema data nei paragrafi seguenti è, come in ogni caso reale,
incompleta e, in alcuni punti, ambigua o contraddittoria. Lo studente dovrà quindi raffinare e
disambiguare le specifiche simulando l’interazione con il committente. In alcuni casi allo
studente sarà richiesto di valutare diverse possibili alternative, per poi sceglierne una in maniera
motivata. Le motivazioni di tutte le scelte interpretative, progettuali e implementative andranno
sempre chiaramente documentate nel progetto e verranno discusse in sede di revisione.
Problema
Si vuole realizzare una applicazione per un’agenzia immobiliare.
Di base, l’attività consiste nell’intermediare tra i proprietari di immobili, che desiderano vendere
o affittare il proprio bene, e i possibili clienti che sono interessati all’offerta. L’attività di
intermediazione è sviluppata dagli agenti dell’agenzia che, da una parte, ricevono e classificano
le proposte dei proprietari, e dall’altra, incrociano le esigenze dei clienti al fine di concludere un
contratto di vendita o di affitto.
In primo luogo si dovranno registrare i dati dei circa 10 agenti che operano nell’agenzia ed in
particolare: il codice identificativo, i dati anagrafici, i recapiti telefonici e di email.
Analogamente, è necessario registrare i dati degli utenti dell’agenzia: il codice fiscale, un
documento di riconoscimento (tipo e numero), i dati anagrafici richiesti per la compilazione di
eventuali contratti, i dati di contatto (telefoni fisso e mobile, email, ecc).
Gli utenti sono distinti tra i “proprietari” che intendono proporre in vendita o in affitto uno o più
immobili in loro possesso ed i “clienti” interessati all’acquisto o alla locazione di uno o piu’
immobili. Si stima un flusso annuale di circa 400 proprietari e 4000 clienti
Per ogni immobile sarà necessario conoscerne il possessore, l’ubicazione, la tipologia (e.g.
appartamento in condominio, villetta residenziale, ecc..), la dimensione complessiva, il numero
di vani, l’elenco di eventuali pertinenze, se è un immobile da vendere o da affittare, il prezzo
minimo che il proprietario vuole realizzare e la scadenza entro la quale l’agenzia si impegna a
concludere una transazione. In merito alle pertinenze, oltre alla tipologia (e.g. garage, cantina,
ecc..), si vuole conoscerne la dimensione e una breve descrizione.
Inoltre, l’agente che prenderà in carico la proposta di vendita o di affitto di un dato immobile
dovrà effettuare una valutazione dell’effettivo valore commerciale dell’immobile stesso
stimandone il prezzo di vendita o il canone di affitto.
Se un proprietario propone più immobili all’agenzia, è opportuno che questi vengano tutti
assegnati allo stesso agente. La maggior parte dei proprietari propone un solo immobile, solo il
5% di essi ne propone più d’uno, fino ad un massimo di 10 immobili ciascuno.
Di particolare importanza risulta la gestione degli appuntamenti, pertanto è necessario
strutturare un’agenda per la loro registrazione. In particolare per ogni appuntamento si vuole
conoscere la data, l’ora ed il luogo in cui avverrà, l’agente e lo o gli utenti coinvolti, l’immobile, o
la lista degli immobili oggetto dell’appuntamento, ed una descrizione degli obiettivi (e.g. visita
immobili, stipula di un contratto, ecc.). Al termine, l’agente coinvolto dovrà completare il record
con un commento sull’esito dell’appuntamento. Ogni agente non può soddisfare più di 3-4
appuntamenti al giorno.
Una proposta (di vendita o di affitto di un immobile) potrà concludersi con una transazione
(ovvero la stipula di un contratto tra proprietario e cliente) oppure con un nulla di fatto al termine
del periodo di impegno dell’agenzia.
Per ogni transazione si vuole conoscere la data, l’ora ed il luogo in cui è avvenuta, l’agente che
l’ha curata, il proprietario ed il cliente coinvolti e l’immobile oggetto della transazione. Inoltre si
vuole conoscere il prezzo od il canone effettivamente concordato e la commissione pagata
all’agenzia rispettivamente da proprietario e cliente.
Le operazioni sulla base di dati, oltre a quelle eventualmente ed implicitamente definite nel testo
precedente, sono:
1. Fornire le istruzioni per la creazione del DB e degli oggetti che lo costituiscono.
2. Per ogni relazione individuata, fornire le istruzioni di inserimento, modifica ed
eliminazione delle istanze.
3. In fase di inserimento di un nuovo appuntamento è necessario verificare:
a. che non si sovrapponga ad altri appuntamenti già registrati per l’agente coinvolto;
b. che esista corrispondenza tra i proprietari e gli immobili coinvolti
c. che gli immobili oggetto dell’appuntamento siano assegnati all’agente coinvolto.
4. Al momento d assegnare un nuovo immobile ad un agente, verificare:
a. Se il proprietario ha già proposto altri immobili, allora deve essere assegnato allo
stesso agente a cui sono assegnati gli altri immobili
b. Altrimenti scegliere l’agente più scarico, ovvero colui al quale sono, al momento,
assegnati un minor numero di immobili per i quali non è ancora stata effettuata una
transazione o non siano scaduti i termini dell’impegno dell’agenzia
5. Fornire il numero delle transazioni concluse da ciascun agente nell’ultimo anno.
6. Per tutte le transazioni concluse da un agente nell’ultimo mese, fornire la media della
differenza tra il canone o il prezzo effettivamente concordato e la stima effettuata
dall’agente stesso.
7. Fornire il numero complessivo di proposte di vendita o di affitto gestite dall’agenzia
nell’ultimo anno ed il numero di quelle terminate con un nulla di fatto.
E’ possibile inserire operazioni e procedure di gestione addizionali che si ritengano utili.
Individuare le regole di vincolo e di derivazione che possono essere applicate ai contenuti di
questa base di dati.
L’individuazione dei vincoli e la loro implementazione costituiscono un requisito fondamentale
per lo sviluppo di un progetto realistico, e ne verrà tenuto conto durante la valutazione finale.
Alcune delle funzionalità richieste potrebbero non essere realizzabili con singole query, ma
richiedere l’uso di strumenti più avanzati messi a disposizione dal DBMS, come le procedure
e/o i trigger.
Progetto
Lo sviluppo del progetto comprende i seguenti punti:
1. Progettazione concettuale consistente in:
a. Definizione formale, analisi e strutturazione dei requisiti.
b. Modellazione dello schema concettuale utilizzando il modello Entità-Relazione.
c. Formalizzazione delle regole di vincolo e di derivazione.
2. Progettazione logica consistente in:
a. Ristrutturazione ed ottimizzazione dello schema ER.
b. Analisi dei volumi e degli accessi.
c. Traduzione nel modello relazionale.
3. Implementazione del progetto.
a. Sviluppo del codice SQL
b. Implementazione di un’interfaccia grafica web-oriented (opzionale)
Tutte le fasi del progetto dovranno essere corredate da adeguata documentazione che illustri
quanto viene realizzato e le scelte intraprese. In particolare, dovranno essere necessariamente
inclusi nella documentazione gli schemi ER risultanti dai passi (1) e (2), debitamente
commentati, il modello relazionale della base di dati ottenuto al passo (2c), e tutto il codice SQL
usato nell’implementazione, comprendente gli statement necessari alla creazione della base di
dati, alcuni statement che mostrino esempi di inserimento dati nel DB, e il codice di tutte le
query/operazioni richieste.
Per l’implementazione del progetto si può usare un qualunque DBMS preventivamente
concordato con il docente, le seguenti sono alcune scelte possibili:
- Oracle [Windows e Unix, commerciale]
- MS SQL Server [Windows, commerciale]
- DB2 [Windows e Unix, commerciale]
- Postgresql [Linux, gratuito]
- Interbase [Windows, la versione 6 è gratuita]
- Firebird [Windows e Linux, gratuito, basato sulla versione 6 di Interbase]
- MySQL [Windows e Linux, gratuito]
Nota: MSAccess è fortemente sconsigliato.
Il DB realizzato può essere dotato di un’interfaccia grafica scritta con un linguaggio di
programmazione a scelta (ad. Es. Java, PHP). La valutazione NON terrà conto delle
caratteristiche estetiche della grafica di interfaccia bensì dei criteri di interazione tra DBMS e
linguaggio di programmazione.
Informazioni
Questa specifica è disponibile in formato PDF sulla pagina web del corso di Laboratorio di Basi
di Dati, all’indirizzo http://www.di.univaq.it/pierluigi.pierini/. Ulteriori informazioni e chiarimenti
sulle specifiche possono essere richiesti direttamente via email all’indirizzo
[email protected].
Si ricorda che i progetti vanno svolti singolarmente o in piccoli gruppi (fino a 3 persone).
Tutti coloro che intendono sostenere l’esame di Laboratorio di Basi di Dati dovranno inviare
l’elaborato del progetto, in formato PDF, via email all’indirizzo [email protected],
rispettando le scadenze di volta in volta indicate per ogni appello. In fase di discussione del
progetto, si potrà presentare l’implementazione di una interfaccia grafica.