documento contenente le specifiche del progetto fatto alla laurea triennale all'università Insubria di Como riguardante la creazione di un sito web che gestisca la prenotazione online di auto a livello internazionale.
2. 2
INDICE
1. Tema del progetto
1.1 Descrizione del dominio applicativo........................................... 3
1.2 Volume dei dati ................................................................ 6
1.3 Operazioni e carico di lavoro previsti ........................................ 6
1.3.1 Interfaccia amministrativa ................................................ 6
1.3.2 Interfaccia personale ........................................................ 7
1.3.3 Interfaccia cliente ........................................................ 7
2. Analisi dei requisiti ........................................................................ 8
2.1 Individuazione entità, attributi ............................................... 8
2.2 Ristrutturazione specifiche ............................................... 10
3. Progettazione concettuale ............................................................... 13
3.1 Schema scheletro ............................................................... 13
3.2 Sotto schema utente ............................................................. 14
3.3 Sotto schema filiale ............................................................... 14
3.4 Integrazione utente con filiale ............................................... 15
3.5 Sotto schema veicolo ....................................................... 15
3.6 Integrazione veicolo con filiale con utente ............................... 16
3.7 Sotto schema storico prenotazione ....................................... 17
3.8 Integrazione finale (modello E-R) ....................................... 18
3.9 Database fittizio (Banca) ....................................................... 18
3.10 Vincoli ............................................................................... 19
3.11 Gerarchie di generalizzazione ............................................... 19
3.12 Dizionario delle entità ....................................................... 19
3.13 Dizionario delle associazioni ............................................... 22
3.14 Dominio di ogni singolo attributo ....................................... 23
4. Progettazione logica ....................................................................... 26
4.1 Sotto schema utente ....................................................... 26
4.2 Sotto schema filiale ....................................................... 26
4.3 Sotto schema veicolo ....................................................... 26
4.4 Schema E-R ristrutturato ....................................................... 27
4.5 Schema logico ............................................................... 28
4.6 Normalizzazione schema relazionale ........................................ 29
4.7 Scelte progettuali ............................................................... 29
5. Traduzione SQL ....................................................................... 30
5.1 Creazione tabelle ............................................................... 30
3. 3
1 Tema progetto
1.1 Descrizione del dominio applicativo
Si vuole realizzare un’applicazione web per la gestione/prenotazione online di
una società internazionale di noleggio veicoli (d’ora in poi indicata con la sigla
SINV). Per far ciò l’applicazione deve prevedere tre diverse interfacce: una per
le gestione dei dati delle filiali e del personale da parte degli amministratori del
sistema,una per la gestione delle prenotazioni da parte del personale delle
filiali, effettuare prenotazioni online da parte dei clienti.
Interfacciamento essere progettato tenendo presente che un membro del
personale della SINV può essere anche cliente e quindi fare prenotazioni
online. In questo caso si deve applicare uno sconto del 10% sul costo del
noleggio. I dati dei membri del personale sono inseriti direttamente dagli
amministratori del sistema, mentre per effettuare una prenotazione i clienti
devono registrarsi. I dati registrati per i membri del personale sono nome,
cognome, data di assunzione, username e password da utilizzare per il login
nell’applicazione, più lo storico delle filiali in cui hanno lavorato. Oltre a nome,
cognome, username e password,a un cliente è richiesto,in fase di
registrazione,anche l'indirizzo completo, un numero di telefono,l’indirizzo e-
mail, e le eventuali preferenze relative al tipo di veicolo. Durante la
registrazione un cliente può decidere se richiedere la carta della SINV. Una
carta può essere associata a un solo cliente, ed è caratterizzata da un numero
univoco e una data di attivazione. La carta permette di accumulare dei punti,
che potranno essere utilizzati per ottenere sconti sul prezzo dei noleggi. Il
numero di punti varia a seconda del tipo di veicolo e alla durata del noleggio. I
punti accumulati possono essere spesi per ottenere uno sconto sul costo di un
noleggio, ipotizzando un cambio di 10 punti per euro. I punti da associare al
tipo di veicolo e alla durata del noleggio, nonché il cambio punti/euro,potranno
essere modificati dall’amministratore della SINV.
Per ogni filiale sono disponibili (almeno) le seguenti informazioni:
un codice univoco, il nome e l’indirizzo;
il sito web;
il recapito e-mail;
l’elenco dei membri personale che hanno lavorato e lavorano nella filiale;
veicoli disponibili e relativo prezzo (che può variare in base al tipo di
veicolo, alla durata del noleggio, alla nazione e alla città in cui si trova la
filiale);
numero di veicoli per ogni tipo di veicolo;
la data in cui la filiale è stata istituita.
categoria, marca, modello, anno di produzione, ti podi motore(benzina,
diesel, etc.);
anno di acquisizione da parte della SINV;
storico delle filiali a cui è appartenuto il veicolo;
4. 4
storico delle prenotazioni del veicolo;
storico degli eventuali incidenti a cui il veicolo è stato soggetto;
storico delle riparazioni, tagliandi, revisioni effettuati;
orari e giorni di apertura.
Inoltre, per ogni veicolo, il sistema deve registrare:
In fase di prenotazione, i clienti possono effettuare una ricerca sui veicoli
disponibili indicando la città e il periodo previsto per il noleggio. Il sistema deve
fornire al cliente, per ogni filiale, tutti i dati sopra indicati, a eccezione delle
informazioni sui membri del personale.
Per effettuare una prenotazione,è necessario che l'utente si registri. Quindi,
una volta scelti filiale, veicolo, periodo e tipo di assicurazione e confermata la
prenotazione, il cliente dovrà fornire i dati relativi alla sua carta di credito.
Terminata la procedura, all’utente verrà visualizzata una pagina web che, una
volta stampata, avrà valore di ricevuta per la prenotazione effettuata. Tale
pagina dovrà contenere, oltre ad alcuni dati personali del cliente, codice e data
di prenotazione, più tutte le informazioni relative alla prenotazione effettuata
(filiale, periodo, tipo veicolo, costo del noleggio, etc.).
Il cliente potrà annullare la sua prenotazione gratuitamente entro i due
giorni precedenti la data prevista per il ritiro del veicolo, altrimenti dovrà
pagare una penale per ognuno dei veicoli prenotati. L’importo della penale è
deciso dagli amministratori e può variare secondo gli stessi parametri che
determinano il costo dei veicoli. Allo stesso modo, un cliente potrà effettuare
modiche alla prenotazione iniziale senza incorrere in una penale, a patto che
tali variazioni siano effettuate entro il termine dei due giorni. Le modiche di
una prenotazione potranno riguardare sia il tipo di veicolo che il periodo e, in
base a ciò, il costo del noleggio potrà subire un incremento/decremento.
Un cliente può prenotare più di un veicolo per lo stesso periodo. Tuttavia il
sistema dovrà rifiutare prenotazioni di veicoli di filiali diverse, effettuate dallo
stesso cliente per le stesse date. Il principio è che il cliente che effettua la
prenotazione per i veicoli di una filiale deve essere uno dei clienti che
effettivamente utilizzeranno uno di tali veicoli per le date prenotate. Ne segue
che,per la stessa data, un dato cliente non può prenotare veicoli in due filiali
diverse.
Per quanto riguarda la carta di credito, non è ovviamente prevista
l'implementazione di un sistema funzionante di pagamento online. Tuttavia è
necessario implementare controlli relativi alla validità della carta di credito(ad
es.,la carta di credito deve essere attiva e in grado di coprire il costo delle
prenotazioni,la data di scadenza non deve essere precedente il giorno,o i
giorni,per cui si è prenotato il veicolo, nome e cognome dell’intestatario
devono essere gli stessi della persona che effettua la prenotazione). A tal
scopo si consiglia di creare un database fittizio, distinto da quello della SINV, in
cui memorizzare i dati delle carte di credito di almeno alcuni dei clienti.
L’applicativo dovrà quindi interrogare tale database per verificare se accettare
o meno una prenotazione.
Il cliente dovrà ritirare il veicolo presso la filiale indicata nella prenotazione,
5. 5
ma potrà consegnarla in un’altra filiale. Questa informazione può essere
specificata dal cliente già in fase di prenotazione. Inoltre,il veicolo verrà
consegnato al cliente con il serbatoio pieno, e il cliente a sua volta dovrà
provvedere a consegnare il veicolo nello stesso stato.
Il personale deve poter visualizzare tutte le prenotazioni in corso, effettuare
eventualmente modiche su richiesta dei clienti e gestire il check-in e il check-
out degli stessi(cioè il ritiro e la consegna dei veicoli noleggiati). Inoltre il
personale deve registrare, per ogni prenotazione, il chilometraggio iniziale e
finale, eventuali ritardi nel ritiro o nella consegna,se il veicolo consegnato
presenta dei danni e se ha il serbatoio pieno(in tal caso,il cliente dovrà pagare
il costo del carburante necessario a riempire il serbatoio).
Tutti i dati relativi alle filiali e ai relativi veicoli possono essere modificati
dagli amministratori del sistema. Modiche relative a filiali e veicoli possono
essere effettuate solo se non esistono al momento prenotazioni per tali
filiali/veicoli. Inoltre la SINV adotta una politica di promozioni secondo la quale,
a partire dalle due settimane precedenti la prenotazione,il costo dei veicoli è
scontato del 20% nei giorni in cui esistono prenotazioni per un numero di
veicoli inferiore al 50%(vedi Esempio1).
Esempio 1 Supponiamo che, in data 13 febbraio, solo 8 veicoli su 20 di una
data filiale F siano stati prenotati per il 28 febbraio. Supponiamo ora che,
sempre in data 13 febbraio, il cliente C1 prenoti un veicolo per il 28 febbraio.
In tal caso C1 pagherà la tariffa piena, dato che 28 − 13 > 14. Supponiamo
ora chela successivaprenotazioneperil28febbraio sia effettuata dal cliente C2 in
data 15 febbraio. In tal caso C2 otterrà lo sconto, dato che 28 − 15 < 14.
Supponiamo infine che subito dopo il cliente C3 prenoti un veicolo per il 28
febbraio. C3 pagherà la tariffa piena, dato che il 50% dei veicoli è prenotato
(infatti, conC1 e C2 , esistono prenotazioni per 10 veicoli su 20).
I valori dei parametri che determinano l'attivazione degli sconti(cioè il rap-
porto tra veicoli liberi e veicoli prenotati, e il numero di giorni precedenti la
data di prenotazione), nonché la stessa percentuale di sconto, possono essere
modificati dagli amministratori. Inoltre, a discrezione degli amministratori, tali
sconti possono essere applicati a tutti i clienti o solo ai possessori della carta.
Lo sconto del 10% del personale non può essere accumulato a un eventuale
sconto sul prezzo del noleggio.
6. 6
1.2 Volume dati
La SINV consta di (almeno) 50 filiali, con un minimo di 20 veicoli ciascuno,
distribuiti su (almeno) 10 nazioni. In alcune delle città maggiori è necessario
prevedere almeno 2 filiali. Ogni filiale è gestita da un responsabile,più(almeno)
4 membri del personale della SINV.
Per quanto riguarda i clienti, come data set di partenza il database deve
registrare prenotazioni in tutte le filiali per almeno i sei mesi precedenti la data
di discussione del progetto. A tal scopo si consiglia di preparare uno script in
grado popolare dinamicamente la base di dati,in base a determinati parametri
(tra cui i mesi in cui sono state effettuate le prenotazioni).
1.3 Operazioni e carico di lavoro previsti
Le operazioni da prevedere sulla base di dati sono le seguenti(il carico di lavoro
previsto è indicato tra parentesi):
1.3.1 Interfaccia amministrativa(Alessio Polidoro):
(a) gestione personale: inserimento/modica/cancellazione dati del
personale(frequenza: 100dipendenti/mese);
(b) gestione filiali:
i. inserimento/modica/cancellazione filiali (frequenza: 10 filiali/ mese);
ii. inserimento/modica/cancellazione veicoli(frequenza: 50 veicoli/mese);
iii. report che evidenzi, per ognuna delle filiali e a partire dal momento in cui
ha iniziato la sua attività all’interno della SINV, dati statistici relativi al
rapporto mensile tra veicoli prenotati e veicoli disponibili; questi dati
devono fornire un’indicazione delle filiali che ricevono più/ meno
prenotazioni,utile per decidere la cessione di una filiale,o la modifica delle
sue tariffe(ad es., diminuendole, nel caso di un numero basso di
prenotazioni, aumentandole, nel caso di un alto numero di prenotazioni),
ma anche per decidere su quali filiali o città investire(ad es.,aumentando
il numero di veicoli in una filiale,o creando/ acquisendo filiali in città di
grande affluenza);
(c) gestione promozioni:
i. report che evidenzi, per ogni filiale, quali sono le promozioni
eventualmente assegnate nel corso del tempo;
ii. report che evidenzi i periodi in cui vi sono stati più filiali con
promozioni;
iii. report che evidenzi le filiali in cui si sono verificati gli sconti
maggiori, con relativo periodo;
7. 7
1.3.2 Interfaccia personale(Alessandro Lucca):
(a) gestione prenotazioni online: il personale dovrà poter visualizzare l’elenco
completo delle prenotazioni effettuate per ogni filiale e, per prenotazioni
passate,quali e quanti dei clienti si sono effettivamente presentati;
(b) gestione check-in: il personale deve registrare il ritiro del veicolo da parte
dei clienti, e eventuali modiche sulla prenotazione (come il tipo di veicolo/
assicurazione,periodo di noleggio, etc.);inoltre il personale deve registrare il
chilometraggio iniziale e la data e ora effettive di ritiro del veicolo;il sistema
deve quindi restituire una pagina contenente tutti i dati relativi al
noleggio(compreso il chilometraggio iniziale del veicolo); tale pagina dovrà
essere stampata in duplice copia e firmata dal cliente e dal membro del
personale incaricato del check-in;
(c) gestione check-out: il personale deve registrare la consegna del veicolo da
parte dei clienti e il pagamento effettivo(che può essere maggiore di quello
previsto a causa della richiesta di servizi aggiuntivi ad es., il tipo di
assicurazione scelta); inoltre il personale deve registrare il chilometraggio
finale, data e ora di consegna del veicolo, se il veicolo consegnato presenta dei
danni e se ha il serbatoio pieno(in tal caso, il cliente dovrà pagare il costo del
carburante necessario a riempire il serbatoio);il sistema deve quindi restituire
una pagina che, stampata, avrà per il cliente valore di ricevuta fiscale.
1.3.3 Interfaccia cliente(Simone Mazzotta):
(a) gestione profilo cliente:
i. registrazione cliente(frequenza: 100 clienti/giorno);
ii. visualizzazione/modifica dati personali, e visualizzazione saldo punti;
(b) ricerca e prenotazione filiali(frequenza:1.000prenotazioni/giorno):
i. i parametri di ricerca devono prevedere la possibilità di scegliere la
città, la filiale, e il periodo di noleggio;
ii. una volta inseriti i parametri, il sistema deve restituire le filiali per cui
vi sono ancora veicoli disponibili, ordinati in base al costo dei
veicoli(dal più economico al più costoso), e fornire al cliente la
possibilità di selezionare il tipo e il numero di veicoli; inoltre per ogni
filiale elencate deve essere previsto un link a una pagina web, che ne
riepiloga tutti i dettagli, e ne mostra una foto;
iii. una volta scelta la filiale e confermato tipo e numero di veicoli e
periodo, prima della conferma il cliente deve poter visualizzare un
sommario in cui sono riepilogati i dati della prenotazione, compreso il
prezzo e le informazioni relative alla possibilità di cancellare/
modificare una prenotazione,più i criteri di applicazioni di eventuali
penali;
iv. una volta confermata la prenotazione, il cliente dovrà fornire i dati
della propria carta di credito;prima di confermare la prenotazione, il
cliente potrà eventualmente scegliere di usare i punti accumulati per
ottenere uno sconto;
v. confermata la prenotazione,il sistema dovrà restituire una pagina web
8. 8
che fornisca tutti i dati relativi alla prenotazione,più un codice che
identifichi univocamente la stessa; anche qui devono essere incluse le
informazioni relative alla possibilità di cancellare/ modificare una
prenotazione,più i criteri di applicazioni di eventuali penali; tale
pagina, una volta stampata, avrà valore di ricevuta per la
prenotazione effettuata.
2-Analisi dei requisiti
2.1 Individuazione entità e attributi
Entità
Attributi
Si vuole realizzare un’applicazione web per la gestione/prenotazione online di
una società internazionale di noleggio veicoli (d’ora in poi indicata con la sigla
SINV). Per far ciò l’applicazione deve prevedere tre diverse interfacce: una per
le gestione dei dati delle filiali e del personale da parte degli amministratori del
sistema,una per la gestione delle prenotazioni da parte del personale delle
filiali, effettuare prenotazioni online da parte dei clienti.
L’Interfacciamento deve essere progettato tenendo presente che un membro
del personale della SINV può essere anche cliente e quindi fare prenotazioni
online. In questo caso si deve applicare uno sconto del 10% sul costo del
noleggio. I dati dei membri del personale sono inseriti direttamente dagli
amministratori del sistema, mentre per effettuare una prenotazione i clienti
devono registrarsi. I dati registrati per i membri del personale sono nome,
cognome, data di assunzione, username e password da utilizzare per il login
nell’applicazione, più lo storico delle filiali in cui hanno lavorato. Oltre a nome,
cognome, username e password,a un cliente è richiesto,in fase di
registrazione,anche l'indirizzo completo, un numero di telefono,l’indirizzo e-
mail, e le eventuali preferenze relative al tipo di veicolo. Durante la
registrazione un cliente può decidere se richiedere la carta della SINV. Una
carta può essere associata a un solo cliente, ed è caratterizzata da un numero
univoco e una data di attivazione. La carta permette di accumulare dei punti,
che potranno essere utilizzati per ottenere sconti sul prezzo dei noleggi. Il
numero di punti varia a seconda del tipo di veicolo e alla durata del noleggio. I
punti accumulati possono essere spesi per ottenere uno sconto sul costo di un
noleggio, ipotizzando un cambio di 10 punti per euro. I punti da associare al
tipo di veicolo e alla durata del noleggio, nonché il cambio punti/euro,potranno
essere modificati dall’amministratore della SINV.
Per ogni filiale sono disponibili (almeno) le seguenti informazioni:
un codice univoco, il nome e l’indirizzo;
il sito web;
il recapito e-mail;
l’elenco dei membri personale che hanno lavorato e lavorano nella filiale;
9. 9
veicoli disponibili e relativo prezzo (che può variare in base al tipo di
veicolo, alla durata del noleggio, alla nazione e alla città in cui si trova la
filiale);
numero di veicoli per ogni tipo di veicolo;
la data in cui la filiale è stata istituita.
categoria, marca, modello, anno di produzione, ti podi motore(benzina,
diesel, etc.);
anno di acquisizione da parte della SINV;
storico delle filiali a cui è appartenuto il veicolo;
storico delle prenotazioni del veicolo;
storico degli eventuali incidenti a cui il veicolo è stato soggetto;
storico delle riparazioni, tagliandi, revisioni effettuati;
orari e giorni di apertura.
Inoltre, per ogni veicolo, il sistema deve registrare:
In fase di prenotazione, i clienti possono effettuare una ricerca sui veicoli
disponibili indicando la città e il periodo previsto per il noleggio. Il sistema deve
fornire al cliente, per ogni filiale, tutti i dati sopra indicati, a eccezione delle
informazioni sui membri del personale.
Per effettuare una prenotazione,è necessario che l'utente si registri. Quindi,
una volta scelti filiale, veicolo, periodo e tipo di assicurazione e confermata la
prenotazione, il cliente dovrà fornire i dati relativi alla sua carta di credito.
Terminata la procedura, all’utente verrà visualizzata una pagina web che, una
volta stampata, avrà valore di ricevuta per la prenotazione effettuata. Tale
pagina dovrà contenere, oltre ad alcuni dati personali del cliente, codice e data
di prenotazione, più tutte le informazioni relative alla prenotazione effettuata
(filiale, periodo, tipo veicolo, costo del noleggio, etc.).
Il cliente potrà annullare la sua prenotazione gratuitamente entro i due giorni
precedenti la data prevista per il ritiro del veicolo, altrimenti dovrà pagare una
penale per ognuno dei veicoli prenotati. L’importo della penale è deciso dagli
amministratori e può variare secondo gli stessi parametri che determinano il
costo dei veicoli. Allo stesso modo, un cliente potrà effettuare modiche alla
prenotazione iniziale senza incorrere in una penale, a patto che tali variazioni
siano effettuate entro il termine dei due giorni. Le modiche di una prenotazione
potranno riguardare sia il tipo di veicolo che il periodo e, in base a ciò, il costo
del noleggio potrà subire un incremento/decremento.
Un cliente può prenotare più di un veicolo per lo stesso periodo. Tuttavia il
sistema dovrà rifiutare prenotazioni di veicoli di filiali diverse, effettuate dallo
stesso cliente per le stesse date. Il principio è che il cliente che effettua la
prenotazione per i veicoli di una filiale deve essere uno dei clienti che
effettivamente utilizzeranno uno di tali veicoli per le date prenotate. Ne segue
che,per la stessa data, un dato cliente non può prenotare veicoli in due filiali
diverse.
10. 10
Per quanto riguarda la carta di credito, non è ovviamente prevista
l'implementazione di un sistema funzionante di pagamento online. Tuttavia è
necessario implementare controlli relativi alla validità della carta di credito(ad
es.,la carta di credito deve essere attiva e in grado di coprire il costo delle
prenotazioni,la data di scadenza non deve essere precedente il giorno,o i
giorni,per cui si è prenotato il veicolo, nome e cognome dell’intestatario
devono essere gli stessi della persona che effettua la prenotazione). A tal
scopo si consiglia di creare un database fittizio, distinto da quello della SINV, in
cui memorizzare i dati delle carte di credito di almeno alcuni dei clienti.
L’applicativo dovrà quindi interrogare tale database per verificare se accettare
o meno una prenotazione.
Il cliente dovrà ritirare il veicolo presso la filiale indicata nella prenotazione, ma
potrà consegnarla in un’altra filiale. Questa informazione può essere specificata
dal cliente già in fase di prenotazione. Inoltre,il veicolo verrà consegnato al
cliente con il serbatoio pieno, e il cliente a sua volta dovrà provvedere a
consegnare il veicolo nello stesso stato.
Il personale deve poter visualizzare tutte le prenotazioni in corso, effettuare
eventualmente modiche su richiesta dei clienti e gestire il check-in e il check-
out degli stessi(cioè il ritiro e la consegna dei veicoli noleggiati). Inoltre il
personale deve registrare, per ogni prenotazione, il chilometraggio iniziale e
finale, eventuali ritardi nel ritiro o nella consegna,se il veicolo consegnato
presenta dei danni e se ha il serbatoio pieno(in tal caso,il cliente dovrà pagare
il costo del carburante necessario a riempire il serbatoio).
Tutti i dati relativi alle filiali e ai relativi veicoli possono essere modificati
dagli amministratori del sistema. Modiche relative a filiali e veicoli possono
essere effettuate solo se non esistono al momento prenotazioni per tali
filiali/veicoli. Inoltre la SINV adotta una politica di promozioni secondo la quale,
a partire dalle due settimane precedenti la prenotazione,il costo dei veicoli è
scontato del 20% nei giorni in cui esistono prenotazioni per un numero di
veicoli inferiore al 50%(vedi Esempio1).
2.2 Ristrutturazione delle specifiche
Si vuole realizzare un’applicazione web per la gestione/prenotazione online di
una società internazionale di noleggio veicoli (d’ora in poi indicata con la sigla
SINV). Per far ciò l’applicazione deve prevedere tre diverse interfacce: una per
la gestione dei dati delle filiali e del personale da parte degli amministratori del
sistema, una per la gestione delle prenotazioni da parte del personale delle
filiali, e una per effettuare prenotazioni online da parte dei clienti.
Le interfacce devono essere progettate tenendo presente che un personale
della SINV può essere anche cliente e quindi fare prenotazioni online (quindi
iscriversi e autenticarsi sul sito come cliente). In questo caso si deve applicare
uno sconto del 10% sul costo del noleggio. I dati del personale sono inseriti
direttamente dagli amministratori che dovranno loggarsi per poter inserire e
modificare il personale , mentre per effettuare una prenotazione i clienti
devono registrarsi sul sito. I dati registrati per il personale sono nome,
cognome, data di assunzione, username e password da utilizzare per il login
nell’applicazione, mentre lo storico delle filiali in cui hanno lavorato verrà
salvato in una tabella differente con data di inizio e di fine per ogni filiale .
11. 11
Oltre a nome, cognome, user e password, a un cliente è richiesto, in fase di
registrazione, anche l’indirizzo con via, nazione, provincia, città, numero civico,
un numero di telefono,l’indirizzo email, e le eventuali preferenze relative al tipo
di veicolo. Durante la registrazione un cliente può decidere se richiedere la
carta della SINV. Una carta può essere associata a un solo cliente, ed è carat-
terizzata da un codice, una data di attivazione. La carta permette di
accumulare dei punti, che potranno essere utilizzati per ottenere sconti sul
prezzo dei noleggi. Il numero di punti varia a seconda del tipo di veicolo e alla
durata del noleggio. I punti accumulati possono essere spesi per ottenere uno
sconto sul costo di un noleggio, ipotizzando un cambio di 10 punti per euro. I
punti da associare al tipo di veicolo e alla durata del noleggio, nonché il cambio
punti/euro,potranno essere modificati dall’amministratore della SINV.
Per ogni filiale sono disponibili le seguenti informazioni:
• un codice univoco, il nome e l’indirizzo,composto da via,provincia,
nazione numero civico e città;
• il sito web;
• il recapito email;
• la data in cui la filiale è stata istituita.
Per ogni veicolo sono disponibili:
tipo, marca, modello, anno di produzione, motore, targa,disponibilità, punti
giornalieri, litri del serbatoio, targa, prezzo giornaliero
• anno di acquisizione da parte della SINV;
• orari e giorni di apertura;
Lo storico delle filiali a cui è appartenuto il veicolo sarà salvato in una tabella
con data inizio e data fine per ogni filiale;
Lo storico delle prenotazioni e degli eventuali incidenti, riparazioni, tagliandi,
revisioni a cui il veicolo è stato soggetto saranno salvati in tabelle differenti;
In fase di prenotazione, i clienti possono effettuare una ricerca sui veicoli
disponibili indicando la città , la data di ritiro e consegna del noleggio. Il
sistema deve fornire al cliente, per ogni filiale, tutti i dati sopra indicati, a
eccezione delle informazioni sul personale.
Per effettuare una prenotazione, è necessario che il cliente si registri. Quindi,
una volta scelti filiale, veicolo, periodo e tipo di assicurazione,il cliente dovrà
fornire i dati relativi alla sua carta di credito: codice,nome, cognome,
scadenza, saldo. Terminata la procedura, al cliente verrà visualizzata una
pagina web che, una volta stampata, avrà valore di ricevuta per la
prenotazione effettuata. Tale pagina dovrà contenere, oltre ad alcuni dati
personali del cliente, codice e data di prenotazione, più tutte le informazioni
relative alla prenotazione effettuata (filiale, periodo, tipo veicolo, costo del
noleggio, etc.).
Il cliente potrà annullare la sua prenotazione gratuitamente entro i due giorni
precedenti la data prevista per il ritiro del veicolo, altrimenti dovrà pagare una
penale per ognuno dei veicoli prenotati. L’importo della penale è deciso dagli
amministratori e può variare secondo gli stessi parametri che determinano il
12. 12
costo dei veicoli. Allo stesso modo, un cliente potrà effettuare modifiche alla
prenotazione iniziale senza incorrere in una penale, a patto che tali variazioni
siano effettuate entro il termine dei due giorni. Le modifiche di una
prenotazione potranno riguardare sia il tipo di veicolo che il periodo e, in base
a ciò, il costo del noleggio potrà subire un incremento/ decremento.
Un cliente può prenotare solo un veicolo per lo stesso periodo(Per la stessa
data iniziale e finale,specificate con giorno,mese,anno). Tuttavia il sistema
dovrà rifiutare prenotazioni di veicoli effettuate dallo stesso cliente per le
stesse date(Per le stesse date iniziali e date finali,specificate con
giorno,mese,anno). Il principio è che il cliente che effettua la prenotazione per i
veicoli di una filiale deve essere uno dei clienti che effettivamente utilizzeranno
uno di tali veicoli per le date prenotate(Date iniziali e finali, giorno, mese,
anno). Ne segue che,perla stessa data(giorno,mese,anno), un dato cliente non
può prenotare veicoli in due filiali diverse.
Per quanto riguarda la carta di credito, non è ovviamente prevista l’imple-
mentazione di un sistema funzionante di pagamento online. Tuttavia è
necessario implementare controlli relativi alla validità della carta di
credito(Attributi codice,nome,cognome,scadenza,saldo)(ad es.,la carta di
credito deve essere attiva(Attributo scadenza) e in grado di coprire il costo
delle prenotazioni(Attributo saldo),la data di scadenza(giorno,mese,anno) non
deve essere precedente il giorno,o i giorni,per cui si è prenotato il veicolo,
nome e cognome dell’intestatario devono essere gli stessi del Cliente che
effettua la prenotazione). A tal scopo si consiglia di creare un database fittizio,
distinto da quello della SINV, in cui memorizzare i dati delle carte di credito di
almeno alcuni dei clienti. L’applicativo dovrà quindi interrogare tale database
per verificare se accettare o meno una prenotazione.
Il cliente dovrà ritirare il veicolo presso la filiale indicata nella prenotazione, ma
potrà consegnarla in un’altra filiale(L’attributo filialecons in
STORICOPRENOTAZIONI indica il codice filiale). Questa informazione può
essere specificata dal cliente già in fase di prenotazione. Inoltre,il veicolo verrà
consegnato al cliente con il serbatoio pieno, e il cliente a sua volta dovrà
provvedere a consegnare il veicolo nello stesso stato(Attributi su Entità
CHECKOUT).
Il personale deve poter visualizzare tutte le prenotazioni in corso per la filiale
in cui lavora, effettuare eventualmente modifiche su richiesta dei clienti e
gestire il check-in e il check-out degli stessi(cioè il ritiro e la consegna dei
veicoli noleggiati). Inoltre il personale deve registrare, per ogni prenotazione, il
chilometraggio iniziale e finale, eventuali ritardi nel ritiro o nella consegna,se il
veicolo consegnato presenta dei danni e se ha il serbatoio pieno(Gestito
tramite l’attributo Ltcarb in checkout che indica i litri rabboccati dal personale,
se tale attributo non è 0, verrà moltiplicato per ltcarburante e si somma al
costo del noleggio a carico del cliente).
Tutti i dati relativi alle filiali e ai relativi veicoli possono essere modificati dagli
amministratori del sistema. Modifiche relative a filiali e veicoli possono essere
effettuate solo se non esistono al momento prenotazioni per tali filiali/veicoli.
Inoltre la SINV adotta una politica di promozioni secondo la quale, a partire
dalle due settimane precedenti la prenotazione,il costo dei veicoli è scontato
del 20% nei giorni in cui esistono prenotazioni per un numero di veicoli
13. 13
inferiore al 50%(Gestito tramite dataattsconto, rapporto%veicoli in
AMMINISTRAZIONE).
“Esempio 1 Supponiamo che, in data 13 febbraio, solo 8 veicoli su 20 di una
data filiale F siano stati prenotati per il 28 febbraio. Supponiamo ora che,
sempre in data 13 febbraio, il cliente C1 prenoti un veicolo per il 28 febbraio.
In tal caso C1 pagherà la tariffa piena, dato che 28 − 13 > 14. Supponiamo
ora chela successiva prenotazione per il 28 febbraio sia effettuata dal cliente
C2 in data 15 febbraio. In tal caso C2 otterrà lo sconto, dato che 28 − 15 <
14. Supponiamo infine che subito dopo il cliente C3 prenoti un veicolo per il 28
febbraio. C3 pagherà la tariffa piena, dato che il 50% dei veicoli è prenotato
(infatti, con C1 e C2 , esistono prenotazioni per 10 veicoli su 20)”.
I valori dei parametri che determinano l’attivazione degli sconti(cioè il rapporto
tra veicoli liberi e veicoli prenotati, e il numero di giorni precedenti la data di
prenotazione), nonché la stessa percentuale di sconto, possono essere
modificati dagli amministratori(scontocli,dataattsconto,rapporto%veicoli in
AMMINISTRAZIONE). Inoltre, a discrezione degli amministratori, tali sconti
possono essere applicati a tutti i clienti .Lo sconto del 10% del personale non
può essere accumulato a un eventuale sconto sul prezzo del noleggio.
3 Progettazione concettuale
3.1 Schema scheletro
Inizialmente,leggendo le specifiche, abbiamo prodotto il seguente schema
scheletro, indicante l’architettura di base della nostra base di dati.
Di seguito descriviamo singolarmente i vari blocchi fino ad ottenere il modello
E-R definitivo.
14. 14
3.2 Sotto schema UTENTE
Abbiamo optato per una gerarchia di generalizzazione totale-condivisa, poiché
un membro del personale può essere presente anche nell’entità cliente nel
momento in cui vuole effettuare una prenotazione per se stesso. A sua volta,
un cliente, può richiedere la carta SINV per l’accumulo punti per un eventuale
sconto futuro. Nel dettaglio, Pref è una stringa indicante le preferenze che un
cliente specifica in fase di registrazione.
3.3 Sotto schema FILIALE
Abbiamo deciso di creare
l’entità AMMINISTRAZIONE
con la quale gestiamo i vari
sconti, penali e altre
informazioni che ogni filiale
adotterà come politica in
determinati periodi ed
indipendentemente dalla
politica generale della SINV.
Nel dettaglio vediamo:
-PenaleGG: attributo inserito
nel caso in cui la
prenotazione venga
modificata entro due giorni
dal ritiro del veicolo,indicante
il valore che moltiplicato al
costo totale del noleggio determina l’aumento di prezzo;
-CambioPnt: indica il rapporto punti/euro riguardo all’acquisizione e all’utilizzo
dei punti contenuti nella carta SINV;
-DataAttSconto: indica il periodo nel quale la promozione(riguardante lo sconto
sul costo del noleggio) è attiva;
-Rapporto%Veicoli: rapporto tra i veicoli disponibili e prenotati relativo
all’attributo sopra descritto.
15. 15
-LtCarburante: valore del singolo litro di carburante che la filiale utilizzerà per
calcolare l’eventuale costo aggiuntivo nel caso in cui la vettura restituita non
abbia il serbatoio pieno.
3.4 Integrazione UTENTE con FILIALE
Per gestire l’elenco dei membri del personale che hanno lavorato e lavorano in
una filiale, creiamo l’associazione STORICO LAVORO che conterrà la data
dell’assunzione (data-ini),la data di fine contratto( data-fin) che sarà NULL se il
soggetto lavora attualmente nella filiale e inoltre se è responsabile di una
determinata filiale(Responsabile). L’attributo Admin in PERSONALE indica
invece chi del personale è amministratore di una filiale.
3.5 Sotto schema VEICOLO
Ogni VEICOLO subisce, nel corso del
tempo, più interventi di manutenzione,
che si divideranno in INCIDENTE,
TAGLIANDO, REVISIONE e
RIPARAZIONE; la gerarchia di
generalizzazione è totale/esclusiva.
Nel dettaglio vediamo:
-Disp: indica la disponibilità di un
veicolo nel caso lo si voglia prenotare,
conterrà un valore negativo solo nel
caso in cui il noleggio sia in corso o il
mezzo sia incidentato.
-PrezzoGG: prezzo giornaliero di un
determinato veicolo che verrà
moltiplicato per la durata del noleggio.
-PuntiGG: numero di punti giornalieri
16. 16
che incrementeranno i punti della carta SINV.
-Costo: costo del danno prodotto che andrà a gravare sull’attributo DiffCosto
dell’entità CHECK-OUT solo se il tipo dell’assicurazione scelta non copre i danni
al veicolo.
3.6 Integrazione VEICOLO con FILIALE con UTENTE
Integrando il sotto schema VEICOLO con FILIALE l’associazione che ne deriva
sarà STORICO VEICOLI che gestirà il possesso dei veicoli in un dato periodo tra
le varie filiali, avrà Data-ini e Data-fin come attributi che indicheranno l’inizio e
la fine del periodo in cui il veicolo è stato in possesso di una filiale.
17. 17
3.7 Sotto schema STORICO PRENOTAZIONI
L’associazione prenota presente nello schema scheletro viene gestita come un
entità per mantenere informazioni sulle varie prenotazioni nel corso del tempo.
Nel dettaglio vediamo:
-Costo: conterrà il costo complessivo da versare/versato appena effettuata la
prenotazione.
-FilialeCons: indica il codice della filiale nella quale il veicolo verrà consegnato.
-IDCC: conterrà il codice della carta di credito relativo al cliente che effettua la
prenotazione e verrà utilizzato per controllare la validità, proprietà e il saldo
della carta di credito.
Il cliente deve scegliere una poliza assicurativa per ogni noleggio,
caratterizzata da una descrizione, un prezzo, un tipo, un codice ed un
massimale.
-Cod: sarà un codice numerico che si riferirà alla classe di appartenenza
dell’assicurazione scelta.
-Massimale: sarà la massima cifra che verrà coperta dall’assicurazione in caso
di danni a terzi.
Abbiamo gestito il ritiro e la consegna del veicolo con le entità CHECKIN e
CHECKOUT .
Vediamo nel dettaglio:
-OraEffRit/OraEffCons/DataEffRit/DataEffCons: indicheranno ora e data effettivi
di ritiro e consegna poiché ora e data possono non coincidere con quelle
indicate nella prenotazione e, nel caso, dovrà essere applicata una penale.
-LtCarb: indicherà i litri di carburante rabboccati dal personale una volta
consegnato il veicolo, verrà utilizzato per moltiplicarlo con Ltcarburante
(presente nell’entità AMMINISTRAZIONE) per determinare il prezzo che il
18. 18
cliente dovrà pagare per mancato pieno alla consegna; la somma verrà
memorizzata in diffcosto.
-Danni: Stringa che indentifica lo stato del veicolo al momento della consegna
(incidentato o meno).
3.8 Integrazione finale (modello E-R)
Creiamo l’associazione fra CLIENTE e STORICO PRENOTAZIONI chiamata
EFFETTUA contenente Data-Pren, che indica la data di prenotazione, e
l’associazione PRE VE tra le entità STORICO PRENOTAZIONI e VEICOLO.
3.9 Database fittizio Banca
Abbiamo deciso di creare un database
differente per gestire la carta di credito.
Oltre agli attributi che associano la
carta di credito al suo proprietario
abbiamo IDCC che identificherà il
proprietario in STORICO
PRENOTAZIONI.
-Pin indica il codice segreto di 3 cifre (opportunamente codificato in md5) verrà
richiesto al momento del pagamento.
19. 19
3.10 VINCOLI
V1:Lo stesso cliente nelle stesse date non può prenotare veicoli di filiali
diverse.
V2:Non si possono fare modifiche relative a filiali e veicoli se esistono delle
prenotazioni su queste filiali/veicoli.
3.11 GERARCHIE DI GENERALIZZAZIONE:
ENTITA’ ENTITA’ FIGLIE TIPOLOGIA
PADRE
UTENTE PERSONALE,CLIENTE TOTALE/CONDIVI
SA
MANUTENZIO INCIDENTE,TAGLIANDO,REVISIONE,RIPAR TOTALE/ESCLUSI
NE AZIONE VA
3.12 DIZIONARIO DELLE ENTITA’
NOME DESCRIZIO ATTRIBUTI IDENTIFICAT
NE ORI
UTENTE Utenti della USER USER
SINV PW
NOME
COGNOME
INDIRIZZO
CLIENTE Cliente che si E-MAIL Stessi di
registra nel TEL UTENTE
sistema della PREF
SINV
PERSONALE Personale DATAASS Stessi di
della SINV ADMIN UTENTE
CARTA Carta CODC CODC
punti(se DATAATT
richiesto dal PUNTI
cliente)
STORICO Storico CODP CODP
PRENOTAZIONI Prenotazioni IDCC
in corso e DATARIT
concluse DATACONS
20. 20
nella SINV FILIALECONS
COSTO
ORARIT
ORACONS
FILIALERIT
DATAPREN
COSTOPARZ
ASSICURAZIONE Assicurazion TIPO COD
e scelta dal DESCRIZIONE
cliente al PREZZO
momento COD
della MASSIMALE
prenotazione
CHECK-IN Controllo al ORAEFFRIT Stessi di PRE
momento del KM-INI NOL
ritiro del DATAEFFRIT
veicolo
CHECK-OUT Controllo al DIFFCOSTO Stessi di PRE
momento DATAEFFCONS NOL
della ORAEFFCONS
consegna LTCARB
KMFIN
DANNI
AMMINISTRAZI Gestione DATA-FIN CODF, DATA-
ONE amministrati DATA-INI INI, DATA-FIN
va della PENALEGG
SINV SCONTODIP
SCONTOCLI
CAMBIOPNT
DATAATTSCONTO
RAPPORTO%VEICO
LI
LTCARBURANTE
PENALECONS
PENALERIT
FILIALE Filiali della CODF CODF
SINV NOME
DATAIST
GGCHIUSURA
ORARIOAPE
ORARIOCHIU
E-MAIL
SITO
INDIRIZZO
VEICOLO Veicoli della TARGA TARGA
SINV DISP
LTSERBATOIO
ANNOPROD
21. 21
ANNOACQUISTO
MODELLO
MOTORE
TIPO
MARCA
PUNTIGG
PREZZOGG
IMMAGINI
CILINDRATA
KMINI
INFOVEICOLO
MANUTENZIONE Manutenzion IDM IDM
e effettuata DATA-INI
sui veicoli DATA-FIN
della SINV DESCRIZIONE
TIPO
INCIDENTE Manutenzion COSTO Stessi di
e per COPERTURAASS manutenzione
incidente
TAGLIANDO Manutenzion Stessi di
e per manutenzione
tagliando
REVISIONE Manutenzion Stessi di
e per manutenzione
revisione
RIPARAZIONE Manutenzion Stessi di
e per manutenzione
riparazione
CARTA Dati NOME IDCC
CREDITO riguardanti il COGNOME
proprietario TEL
SALDO
SCADENZA
IDCC
PIN
22. 22
3.13 DIZIONARIO DELLE ASSOCIAZIONI
NOME DESCRIZIONE ATTRIBUTI ENTITA’ COLLEGATE
POSSIEDE Possibile CARTA
possesso di CLIENTE
una carta da
parte di un
cliente
EFFETTUA Prenotazione DATA-PREN CLIENTE
effettuate PRENOL
HA Possibili ASSICURAZIONE
assicurazioni su PRE NOL
prenotazioni
SUBISCE1 Controllo PRE NOL
(check-in) sul CHECK-IN
ritiro di un
veicolo
SUBISCE2 Controllo PRE NOL
(check-out) CHECK-OUT
sulla consegna
di un veicolo
STORICO Storico DATA-INI PERSONALE
LAVORO personale delle DATA-FIN FILIALI
filiali RESPONSABIL
E
PRE VE prenotazione PRE NOL
su un veicolo VEICOLO
GESTISCE Gestione AMMINISTRAZIONE
amministrazion FILIALE
e filiale
STORICO Storico veicoli DATA-INI FILIALE
VEICOLI delle filiali DATA-FIN VEICOLO
SUBISCE3 Possibile VEICOLO
manutenzione MANUTENZIONE
su un veicolo
23. 23
3.14 Domini Attributi
Entità Carta:
CODC : Int
DATAATT: Date
PUNTI : Int
Entità Cliente:
E-MAIL : String
TEL : String
PREF : String
Entità Utente:
USER : String
PW : String
INDIRIZZO : String x String x String x String x Int
NOME : String
COGNOME : String
Entità Personale:
DATASS : Date
ADMIN:Boolean
Associazione Effettua:
DATA-PREN : Date
Entità Assicurazione:
PREZZO : Real
TIPO : String
DESCRIZIONE : String
COD : Int
MASSIMALE: Real
Entità Storico Prenotazioni:
CODP : Int
IDCC : String
DATARIT : Date
DATACONS : Date
FILIALECONS : String
COSTO : Real
ORARIT : Time
ORACONS : Time
FILIALERIT:String
COSTOPARZ:Real
DATAPREN:Date
24. 24
Entità Check In:
ORAEFFRIT : Time
KM-INI : Int
DATAEFFRIT : Date
Entità Check out:
DIFFCOSTO : Real
DATAEFFCONS : Date
ORAEFFCONS : Time
LTCARB : Real
KMFIN : Int
DANNI : Boolean
Associazione STORICO LAVORO:
DATA-INI : Date
DATA-FIN : Date
RESPONSABILE:Boolean
Entità AMMINISTRAZIONE:
DATA-FIN : Date
DATA-INI : Date
PENALEGG : Real
SCONTODIP : Real
SCONTOCLI : Real
CAMBIOPNT : Int
DATAATTSCONTO : Date
RAPPORTO%VEICOLI : Real
LTCARBURANTE : Real
PENALECONS : Real
PENALERIT : Real
Entità FILIALE:
CODF : Int
NOME : String
DATAIST : Date
GGCHIUSURA : String
ORARIOAPE : Time
ORARIOCHIU :Time
E-MAIL : String
SITO : String
INDIRIZZO : String x String x String x String x Int
Associazione STORICO VEICOLI:
DATA-INI : Date
DATA-FIN : Date
25. 25
Entità VEICOLO:
TARGA : String
DISP : Boolean
LTSERBATOIO : Real
ANNOPROD : Date
ANNOACQUISTO : Date
MODELLO : String
MOTORE : String
TIPO : String
MARCA : String
PUNTIGG : Int
PREZZOGG : Real
IMMAGINI:String
INFOVEICOLO:String
CILINDRATA:Real
KMINI:Int
Entità MANUTENZIONE:
IDM : Int
DATA-INI : Date
DATA-FIN : Date
DESCRIZIONE : String
TIPO:String
Entità INCIDENTE:
COSTO : Real
COPERTURAASS:Int
Entità CARTACREDITO:
NOME:String
COGNOME:String
IDCC:Int
SALDO:Real
SCADENZA:Date
PIN:String
26. 26
4-PROGETTAZIONE LOGICA
FASE DI RISTRUTTURAZIONE
4.1 SOTTO SCHEMA UTENTE
L’attributo composto indirizzo lo
abbiamo ristrutturato inserendo gli
attributi di INDIRIZZO ad UTENTE;
la gerarchia di generalizzazione
l’abbiamo gestita creando le
associazioni DATI CLIENTE e DATI
PERSONALE rispettivamente tra
entità padre UTENTE ed entità figlie
CLIENTE e PERSONALE.
4.2 SOTTO SCHEMA FILIALE
Anche in queso caso l’attributo composto
indirizzo è stato ristrutturato inserendo gli
attributi nell’entità FILIALE, questo per
rendere più semplice la modifica di questi
campi in maniera semplificata.
4.3 SOTTO SCHEMA VEICOLO
In questo caso la ristrutturazione della gerarchia di
generalizzazione è stata implementata mantenendo le
entità INCIDENTE in quanto rispetto alle altre entità figlie
è caratterizzata da un costo e coperturaass (copertura
assicurativa), poiché se un cliente danneggia la vettura e
possiede una copertura assicurativa di livello minore
rispetto alla kasko dovrà versare l’intero costo del danno
causato. Per quanto riguarda le altre entità figlie è stato
aggiunto l’attributo tipo in manutenzione che descrive la
causa dell’assenza di un veicolo in un dato periodo
(indicato con data-ini e data-fin).
29. 29
4.6 NORMALIZZAZIONE SCHEMA RELAZIONALE
Obiettivo: verificare che lo schema logico ottenuto sia normalizzato in forma
normale di Boyce-Codd, oppure in alternativa, in terza forma Normale.
- Definizione Boyce-Codd: Una relazione R è in forma normale di Boyce e Codd
(BCNF) se e solo se per ogni dipendenza funzionale X->Y,X è una superchiave
per R.
- Definizione Terza Forma Normale: Una relazione è in 3FN se per ogni
dipendenza funzionale X->Y è vera una delle seguenti condizioni:
- X è una superchiave della relazione
- Y è membro di una chiave della relazione
Risultato Finale:
Lo schema relazionale ottenuto è normalizzato in 3NF(Terza Forma Normale)
poiché in alcune relazioni abbiamo una chiave primaria ottenuta utilizzando
due attributi della stessa.
Abbiamo preferito effettuare questa scelta di normalizzazione, invece di
utilizzare identificativi numerici per ogni tupla delle relazioni, per facilitare
operazioni future sulle stesse.
4.7 SCELTE PROGETTUALI
-Per CC ( Carta Credito) creiamo un altro DB chiamato “banca fittizia” dove
registriamo per ogni utene la propria carta di credito;
-Per la disponibilità dei veicoli in fase prenotazione usiamo una query sia su
STORICO PRENOTAZIONI che su MANUTENZIONE (controllo che il veicolo non
sia impegnato in un altro noleggio o in manutenzione);
-Nella tabella MANUTENZIONE il “tipo” indica se si tratta di revisione, tagliando
o riparazione;
-Il veicolo dopo ogni check-out se risulta incidentato va in manutenzione e non
è più disponibile fino alla data fine (campo da compilare durante la gestione di
un incidente);
-La sensibilità oraria è gestita a giorni;
-La gestione dell’assicurazione è unica per tutta la SINV;
-Il prezzo del singolo veicolo è uguale per tutte le SINV;
30. 30
-Se un membro del personale si registra come cliente mantiene lo stesso
Username e Password;
-La data di inizio della manutenzione in caso di incidente dovrà essere uguale
alla data di consegna del veicolo noleggiato;
-La gestione dei vincoli V1 e V2 specificati sopra è stata implementata
mediante l’applicativo (controlli a livello php);
-Lo sconto del 10% viene applicato al cliente solo in fase di prenotazione e non
durante modifiche su richiesta;
-I punti vengono dati al cliente in solo in fase di pagamento durante la
prenotazione e non durante le modifiche successive;
-Nella realizzazione del dominio degli attributi, utilizziamo domini generici
consoni con il modello ER, ma in fase di create table i domini saranno consoni
al linguaggio sql;
-Se l’utente sceglie una filiale consegna diversa dalla filiale ritiro selezionata, il
veicolo sarà poi riportato alla filiale intestataria;
-Nella parte del personale le seguenti query vengono visualizzate per la filiale
di appartenenza del membro del personale:
Il personale dovrà poter visualizzare l’elenco completo delle prenotazioni
effettuate per ogni filiale e, per prenotazioni passate,quali e quanti dei clienti si
sono effettivamente presentati.
5 TRADUZIONE IN SQL
5.1 Creazioni tabelle (create-table)
CREATE TABLE Utente(
user VARCHAR(40) PRIMARY KEY,
pw VARCHAR(40) NOT NULL,
nome VARCHAR(10) NOT NULL,
cognome VARCHAR(15) NOT NULL,
via VARCHAR(20),
n-civ VARCHAR(5),
città VARCHAR(20) NOT NULL,
prov VARCHAR(20) NOT NULL,
naz VARCHAR(20),
UNIQUE(nome,cognome,tel)
);
31. 31
CREATE TABLE Cliente(
user VARCHAR(40) REFERENCES Utente
ON UPDATE CASCADE
ON DELETE NO ACTION,
tel VARCHAR(17) NOT NULL,
e-mail VARCHAR(33),
preferenze VARCHAR(100),
PRIMARY KEY(USER)
);
CREATE TABLE Carta(
codc DECIMAL(8) PRIMARY KEY,
punti DECIMAL(5) NOT NULL,
dataatt DATE NOT NULL,
user VARCHAR(40) REFERENCES Cliente
ON UPDATE CASCADE
ON DELETE CASCADE
);
CREATE TABLE Personale(
user VARCHAR(40) REFERENCES Utente
ON UPDATE CASCADE
ON DELETE NO ACTION,
dataass DATE NOT NULL,
admin BOOLEAN,
PRIMARY KEY(user)
);
CREATE TABLE Storicolavoro(
user VARCHAR(40) REFERENCES Personale
ON UPDATE CASCADE
ON DELETE CASCADE,
codf DECIMAL(8) REFERENCES Filiale
ON UPDATE CASCADE
ON DELETE CASCADE,
data-ini DATE NOT NULL,
data-fin DATE,
responsabile BOOLEAN,
PRIMARY KEY(user,codf)
);
CREATE TABLE Filiale(
codf DECIMAL(8) PRIMARY KEY,
nome VARCHAR(15) NOT NULL,
dataist DATE,
ggchiusura VARCHAR(30) NOT NULL,
orarioape TIME(4) NOT NULL,
32. 32
orariochiu TIME(4) NOT NULL,
e-mail VARCHAR(30),
sito VARCHAR(30),
città VARCHAR(20) NOT NULL,
via VARCHAR(20) NOT NULL,
n-civ VARCHAR(5) NOT NULL,
prov VARCHAR(20) NOT NULL,
naz VARCHAR(25) NOT NULL
);
CREATE TABLE Amministrazione(
codf DECIMAL(8) PRIMARY KEY,
data-ini DATE PRIMARY KEY,
data-fin DATE,
penalegg DECIMAL(8,2) NOT NULL,
penalerit DECIMAL(8,2) NOT NULL,
penalecons DECIMAL(8,2) NOT NULL,
scontodip DECIMAL(3,2) NOT NULL,
scontocli DECIMAL(3,2) NOT NULL,
cambiopunti DECIMAL(3,2) NOT NULL,
dataattsconto DECIMAL(2) NOT NULL,
rapportoPercVeicoli DECIMAL(4,2) NOT NULL,
ltcarburante DECIMAL(4,3) NOT NULL,
FOREIGN KEY (codf) REFERENCES filiale
ON DELETE NO ACTION
ON UPDATE CASCADE
);
CREATE TABLE Storicoveicoli(
Codf DECIMAL(8) REFERENCES filiale
ON UPDATE CASCADE
ON DELETE CASCADE,
targa VARCHAR(10) REFERENCES veicolo
ON UPDATE CASCADE
ON DELETE CASCADE,
data-ini DATE NOT NULL,
data-fin DATE,
PRIMARY KEY (codf,targa)
);
CREATE TABLE Veicolo(
targa VARCHAR(10) PRIMARY KEY,
prezzogg DECIMAL(6,2) NOT NULL,
puntigg DECIMAL(5) NOT NULL,
marca VARCHAR(20) NOT NULL,
tipo VARCHAR(15) NOT NULL,
33. 33
motore VARCHAR(10),
modello VARCHAR(20),
annoAcquisto DATE,
annoProd DATE,
ltserbatoio DECIMAL(6) NOT NULL,
disp BOOLEAN NOT NULL,
cilindrata DECIMAL(5) NOT NULL,
immagini VARCHAR (150),
infoveicolo VARCHAR(300),
kmini DECIMAL(7,1)
);
CREATE TABLE Manutenzione(
idm DECIMAL(8) PRIMARY KEY,
data-ini DATE NOT NULL,
data-fin DATE NOT NULL,
descrizione VARCHAR(100),
tipo VARCHAR(15) NOT NULL
targa VARCHAR(10) REFERENCES veicolo
ON DELETE NO ACTION
ON UPDATE CASCADE
);
CREATE TABLE Incidente(
idm DECIMAL(8) REFERENCES Manutenzione
ON UPDATE CASCADE
ON DELETE CASCADE,
costo DECIMAL(8,2) NOT NULL,
coperturaass DECIMAL(1) NOT NULL,
PRIMARY KEY(idm)
);
CREATE TABLE StoricoPrenotazioni(
codp DECIMAL(6)PRIMARY KEY,
orarit TIME NOT NULL ,
oracons TIME NOT NULL,
idcc DECIMAL(20) NOT NULL,
datarit DATE NOT NULL,
datacons DATE NOT NULL,
filialecons DECIMAL(8) NOT NULL,
filialerit DECIMAL(8) NOT NULL ,
costo DECIMAL (8,2) NOT NULL,
user VARCHAR(40) REFERENCES Cliente
ON UPDATE CASCADE
ON DELETE NO ACTION,
cod VARCHAR(6) REFERENCES Assicurazione
ON UPDATE CASCADE
ON DELETE NO ACTION,
34. 34
Targa VARCHAR(10) REFERENCES Veicolo
ON UPDATE NO ACTION
ON DELETE NO ACTION,
datapren DATE NOT NULL,
costoparz DACIMAL(8,2)
);
CREATE TABLE Assicurazione(
cod VARCHAR(6) PRIMARY KEY,
tipo VARCHAR(50) NOT NULL,
descrizione VARCHAR(500),
prezzo DECIMAL (8,2) NOT NULL,
massimale DECIMAL(10,2) NOT NULL
);
CREATE TABLE Checkin(
codp DECIMAL(6) REFERENCES StoricoPrenotazioni
ON UPDATE CASCADE
ON DELETE NO ACTION,
oraeffrit TIME NOT NULL,
kmini DECIMAL(7,1) NOT NULL,
dataeffrit DATE NOT NULL,
PRIMARY KEY(codp)
);
CREATE TABLE Checkout(
codp DECIMAL(6) REFERENCES StoricoPrenotazioni
ON UPDATE CASCADE
ON DELETE NO ACTION,
danni BOOLEAN,
kmfin DECIMAL(7,1) NOT NULL,
ltcarb DECIMAL(3) NOT NULL,
oraeffcons TIME NOT NULL,
diffcosto DECIMAL (8,2) NOT NULL,
dataeffcons DATE NOT NULL,
PRIMARY KEY(codp)
);