SlideShare a Scribd company logo
1 of 34
1159510-25400<br />PROGETTO DATABASE 2009/2010<br />Realizzato da:Polidoro Alessio, Mazzotta Simone, Lucca Alessandro<br />INDICE<br />Tema del progetto<br />Descrizione del dominio applicativo...........................................3<br />Volume dei dati................................................................6<br />Operazioni e carico di lavoro previsti........................................6<br />Interfaccia amministrativa................................................6<br />Interfaccia personale........................................................7<br />Interfaccia cliente........................................................7<br />2.  Analisi dei requisiti........................................................................8<br />     2.1   Individuazione entità, attributi...............................................8<br />     2.2   Ristrutturazione specifiche...............................................10<br />3. Progettazione concettuale...............................................................13<br />     3.1   Schema scheletro...............................................................13<br />     3.2   Sotto schema utente  .............................................................14<br />     3.3   Sotto schema filiale...............................................................14<br />     3.4   Integrazione utente con filiale...............................................15<br />     3.5   Sotto schema veicolo.......................................................15<br />     3.6   Integrazione veicolo con filiale con utente...............................16<br />     3.7   Sotto schema storico prenotazione.......................................17<br />     3.8   Integrazione finale (modello E-R).......................................18<br />     3.9   Database fittizio (Banca).......................................................18<br />     3.10 Vincoli...............................................................................19<br />     3.11 Gerarchie di generalizzazione...............................................19<br />     3.12 Dizionario delle entità.......................................................19<br />     3.13 Dizionario delle associazioni...............................................22<br />     3.14 Dominio di ogni singolo attributo.......................................23<br />4. Progettazione logica.......................................................................26<br />     4.1   Sotto schema utente.......................................................26<br />     4.2   Sotto schema filiale.......................................................26<br />     4.3   Sotto schema veicolo.......................................................26<br />     4.4   Schema E-R ristrutturato.......................................................27<br />     4.5   Schema logico...............................................................28<br />     4.6   Normalizzazione schema relazionale ........................................  29<br />     4.7   Scelte progettuali...............................................................29<br />5. Traduzione SQL.......................................................................30<br />     5.1   Creazione tabelle...............................................................30<br />1 Tema progetto <br />1.1 Descrizione del dominio applicativo <br />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. <br />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. <br />Per ogni filiale sono disponibili (almeno) le seguenti informazioni: <br />un codice univoco, il nome e l’indirizzo; <br />il sito web; <br />il recapito e-mail; <br />l’elenco dei membri personale che hanno lavorato e lavorano nella filiale; <br />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); <br />numero di veicoli per ogni tipo di veicolo; <br />la data in cui la filiale è stata istituita. <br />categoria, marca, modello, anno di produzione, ti podi motore(benzina, diesel, etc.); <br />anno di acquisizione da parte della SINV; <br />storico delle filiali a cui è appartenuto il veicolo; <br />storico delle prenotazioni del veicolo; <br />storico degli eventuali incidenti a cui il veicolo è stato soggetto; <br />storico delle riparazioni, tagliandi, revisioni effettuati;<br />orari e giorni di apertura.<br />Inoltre, per ogni veicolo, il sistema deve registrare: <br />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. <br />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.). <br />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. <br />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. <br />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. <br />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. <br />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). <br />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). <br />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). <br />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. 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. <br />1.2 Volume dati <br />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. <br />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). <br />1.3 Operazioni e carico di lavoro previsti <br />Le operazioni da prevedere sulla base di dati sono le seguenti(il carico di lavoro previsto è indicato tra parentesi): <br />1.3.1 Interfaccia amministrativa(Alessio Polidoro): <br />(a) gestione personale: inserimento/modica/cancellazione dati del personale(frequenza: 100dipendenti/mese); <br />(b) gestione filiali: <br />i. inserimento/modica/cancellazione filiali (frequenza: 10 filiali/ mese); <br />ii. inserimento/modica/cancellazione veicoli(frequenza: 50 veicoli/mese); <br />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);<br /> (c) gestione promozioni: <br />i. report che evidenzi, per ogni filiale, quali sono le promozioni eventualmente assegnate nel corso del tempo; <br />ii. report che evidenzi i periodi in cui vi sono stati più filiali con promozioni; <br />iii. report che evidenzi le filiali in cui si sono verificati gli sconti maggiori, con relativo periodo; <br />1.3.2 Interfaccia personale(Alessandro Lucca): <br />(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; <br />(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; <br />(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. <br />1.3.3 Interfaccia cliente(Simone Mazzotta): <br />(a) gestione profilo cliente: <br />i. registrazione cliente(frequenza: 100 clienti/giorno); <br />ii. visualizzazione/modifica dati personali, e visualizzazione saldo punti; <br />(b) ricerca e prenotazione filiali(frequenza:1.000prenotazioni/giorno): <br />i. i parametri di ricerca devono prevedere la possibilità di scegliere la città, la filiale, e il periodo di noleggio; <br />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; <br />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; <br />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; <br />v. confermata la prenotazione,il sistema dovrà restituire una pagina web 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. <br />2-Analisi dei requisiti<br />2.1 Individuazione entità e attributi<br />Entità<br />Attributi<br />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. <br />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. <br />Per ogni filiale sono disponibili (almeno) le seguenti informazioni: <br />un codice univoco, il nome e l’indirizzo; <br />il sito web; <br />il recapito e-mail; <br />l’elenco dei membri personale che hanno lavorato e lavorano nella filiale; <br />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); <br />numero di veicoli per ogni tipo di veicolo; <br />la data in cui la filiale è stata istituita. <br />categoria, marca, modello, anno di produzione, ti podi motore(benzina, diesel, etc.); <br />anno di acquisizione da parte della SINV; <br />storico delle filiali a cui è appartenuto il veicolo; <br />storico delle prenotazioni del veicolo; <br />storico degli eventuali incidenti a cui il veicolo è stato soggetto; <br />storico delle riparazioni, tagliandi, revisioni effettuati;<br />orari e giorni di apertura.<br />Inoltre, per ogni veicolo, il sistema deve registrare: <br />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. <br />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.). <br />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. <br />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. <br />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. <br />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. <br />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). <br />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). <br />2.2 Ristrutturazione delle specifiche<br />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. <br />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 . 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 è caratterizzata 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. <br />Per ogni filiale sono disponibili le seguenti informazioni: <br />un codice univoco, il nome e l’indirizzo,composto da via,provincia,  nazione numero civico e città; <br />il sito web; <br />il recapito email; <br />la data in cui la filiale è stata istituita. <br />Per ogni veicolo sono disponibili:<br />tipo, marca, modello, anno di produzione, motore, targa,disponibilità, punti giornalieri, litri del    serbatoio, targa, prezzo giornaliero<br />anno di acquisizione da parte della SINV; <br />• orari e giorni di apertura;<br />Lo storico delle filiali a cui è appartenuto il veicolo sarà salvato in una tabella con data inizio e data fine per ogni filiale;<br />Lo storico delle prenotazioni e degli eventuali incidenti, riparazioni, tagliandi, revisioni a cui il veicolo è stato soggetto saranno salvati in tabelle differenti;<br />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. <br />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.). <br />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 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. <br />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. <br />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(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. <br />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). <br />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). <br />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 inferiore al 50%(Gestito tramite dataattsconto, rapporto%veicoli in AMMINISTRAZIONE). <br />“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)”. <br />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.<br />10782308445503 Progettazione concettuale<br />3.1 Schema scheletro<br />Inizialmente,leggendo le specifiche, abbiamo prodotto il seguente schema scheletro, indicante l’architettura di base della nostra base di dati.<br />Di seguito descriviamo singolarmente i vari blocchi fino ad ottenere il modello E-R definitivo.<br />3.2 Sotto schema UTENTE<br />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.<br />3.3 Sotto schema FILIALE<br />22860109855Abbiamo 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.<br />Nel dettaglio vediamo:<br />-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;<br />-CambioPnt: indica il rapporto punti/euro riguardo all’acquisizione e all’utilizzo dei punti contenuti nella carta SINV;<br />-DataAttSconto: indica il periodo nel quale la promozione(riguardante lo sconto sul costo del noleggio) è attiva;<br />-Rapporto%Veicoli: rapporto tra i veicoli disponibili e prenotati relativo all’attributo sopra descritto.<br />-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.<br />3.4 Integrazione UTENTE con FILIALE <br />228607620<br />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.<br />   <br />3.5 Sotto schema VEICOLO<br />-20828010795<br />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:<br />-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.<br />-PrezzoGG: prezzo giornaliero di un determinato veicolo che verrà moltiplicato per la durata del noleggio.<br />-PuntiGG: numero di punti giornalieri che incrementeranno i punti della carta SINV.<br />-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.<br />-5899155238753.6 Integrazione VEICOLO con FILIALE con UTENTE<br />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.<br />3.7 Sotto schema STORICO PRENOTAZIONI<br />L’associazione prenota presente nello schema scheletro viene gestita come un entità per mantenere informazioni sulle varie prenotazioni nel corso del tempo.<br />Nel dettaglio vediamo:<br />-Costo: conterrà il costo complessivo da versare/versato appena effettuata la prenotazione.<br />-FilialeCons: indica il codice della filiale nella quale il veicolo verrà consegnato.<br />-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.<br />Il cliente deve scegliere una poliza assicurativa per ogni noleggio, caratterizzata da una descrizione, un prezzo, un tipo, un codice ed un massimale.<br />-Cod: sarà un codice numerico che si riferirà alla classe di appartenenza dell’assicurazione scelta.<br />-Massimale: sarà la massima cifra che verrà coperta dall’assicurazione in caso di danni a terzi.<br />Abbiamo gestito il ritiro e la consegna del veicolo con le entità CHECKIN e CHECKOUT .<br />Vediamo nel dettaglio:<br />-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.<br />-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 cliente dovrà pagare per mancato pieno alla consegna; la somma verrà memorizzata in diffcosto. <br />-Danni: Stringa che indentifica lo stato del veicolo al momento della consegna (incidentato o meno).<br />3.8 Integrazione finale (modello E-R)<br />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.<br />3.9 Database fittizio Banca<br />225292153<br />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.<br />-Pin indica il codice segreto di 3 cifre (opportunamente codificato in md5) verrà richiesto al momento del pagamento.<br />3.10 VINCOLI<br />V1:Lo stesso cliente nelle stesse date non può prenotare veicoli di filiali diverse.<br />V2:Non si possono fare modifiche relative a filiali e veicoli se esistono delle prenotazioni su queste filiali/veicoli.<br />3.11 GERARCHIE DI GENERALIZZAZIONE:<br />ENTITA’ PADREENTITA’ FIGLIETIPOLOGIAUTENTEPERSONALE,CLIENTETOTALE/CONDIVISAMANUTENZIONEINCIDENTE,TAGLIANDO,REVISIONE,RIPARAZIONETOTALE/ESCLUSIVA<br />3.12 DIZIONARIO DELLE ENTITA’<br />NOMEDESCRIZIONEATTRIBUTIIDENTIFICATORIUTENTEUtenti della SINVUSERPWNOMECOGNOMEINDIRIZZOUSERCLIENTECliente che si registra nel sistema della SINVE-MAILTELPREFStessi di UTENTEPERSONALEPersonale della SINVDATAASSADMINStessi di UTENTECARTACarta punti(se richiesto dal cliente)CODCDATAATTPUNTICODCSTORICO PRENOTAZIONIStorico Prenotazioni in corso e concluse nella SINVCODPIDCCDATARITDATACONSFILIALECONSCOSTOORARITORACONSFILIALERITDATAPRENCOSTOPARZCODPASSICURAZIONEAssicurazione scelta dal cliente al momento della prenotazioneTIPODESCRIZIONEPREZZOCODMASSIMALECODCHECK-INControllo al momento del ritiro del veicoloORAEFFRITKM-INIDATAEFFRITStessi di PRE NOLCHECK-OUTControllo al momento della consegnaDIFFCOSTODATAEFFCONSORAEFFCONSLTCARBKMFINDANNIStessi di PRE NOLAMMINISTRAZIONEGestione amministrativa della SINVDATA-FINDATA-INIPENALEGGSCONTODIPSCONTOCLICAMBIOPNTDATAATTSCONTORAPPORTO%VEICOLILTCARBURANTEPENALECONSPENALERITCODF, DATA-INI, DATA-FINFILIALEFiliali della SINVCODFNOMEDATAISTGGCHIUSURAORARIOAPEORARIOCHIU E-MAILSITOINDIRIZZOCODFVEICOLOVeicoli della SINVTARGADISPLTSERBATOIOANNOPRODANNOACQUISTOMODELLOMOTORETIPOMARCAPUNTIGGPREZZOGGIMMAGINICILINDRATAKMINIINFOVEICOLOTARGAMANUTENZIONEManutenzione effettuata sui veicoli della SINVIDMDATA-INIDATA-FINDESCRIZIONETIPOIDMINCIDENTEManutenzione per incidenteCOSTOCOPERTURAASS Stessi di manutenzioneTAGLIANDOManutenzione per tagliandoStessi di manutenzioneREVISIONEManutenzione per revisioneStessi di manutenzioneRIPARAZIONEManutenzione per riparazioneStessi di manutenzioneCARTACREDITODati riguardanti il proprietarioNOMECOGNOMETELSALDOSCADENZAIDCCPINIDCC<br />3.13 DIZIONARIO DELLE ASSOCIAZIONI<br />NOMEDESCRIZIONEATTRIBUTIENTITA’ COLLEGATEPOSSIEDEPossibile possesso di una carta da parte di un clienteCARTACLIENTEEFFETTUAPrenotazione effettuateDATA-PRENCLIENTEPRENOLHAPossibili assicurazioni su prenotazioniASSICURAZIONEPRE NOLSUBISCE1Controllo (check-in) sul ritiro di un veicoloPRE NOL CHECK-INSUBISCE2Controllo (check-out) sulla consegna di un veicoloPRE NOLCHECK-OUTSTORICO LAVOROStorico personale delle filialiDATA-INIDATA-FINRESPONSABILEPERSONALE FILIALIPRE VEprenotazione su un veicoloPRE NOLVEICOLOGESTISCEGestione amministrazione filialeAMMINISTRAZIONE FILIALESTORICO VEICOLIStorico veicoli delle filialiDATA-INIDATA-FINFILIALEVEICOLOSUBISCE3Possibile manutenzione su un veicoloVEICOLOMANUTENZIONE<br />3.14 Domini Attributi<br />Entità Carta:<br />CODC : Int     <br />DATAATT: Date<br />PUNTI : Int<br />Entità Cliente:<br />E-MAIL : String<br />TEL : String<br />PREF : String<br />Entità Utente:<br />USER : String<br />PW : String<br />INDIRIZZO : String x String x String x String x Int<br />NOME : String<br />COGNOME : String<br />Entità Personale:<br />DATASS : Date<br />ADMIN:Boolean<br />Associazione Effettua:<br />DATA-PREN : Date<br />Entità Assicurazione:<br />PREZZO : Real<br />TIPO : String<br />DESCRIZIONE : String<br />COD : Int<br />MASSIMALE: Real<br />Entità Storico Prenotazioni:<br />CODP : Int<br />IDCC : String<br />DATARIT : Date<br />DATACONS : Date<br />FILIALECONS : String<br />COSTO : Real<br />ORARIT : Time<br />ORACONS : Time<br />FILIALERIT:String<br />COSTOPARZ:Real<br />DATAPREN:Date<br />Entità Check In:<br />ORAEFFRIT : Time<br />KM-INI : Int<br />DATAEFFRIT : Date<br />Entità Check out:<br />DIFFCOSTO : Real <br />DATAEFFCONS : Date<br />ORAEFFCONS : Time<br />LTCARB : Real<br />KMFIN : Int <br />DANNI : Boolean<br />Associazione  STORICO LAVORO:<br />DATA-INI : Date<br />DATA-FIN : Date<br />RESPONSABILE:Boolean<br />Entità  AMMINISTRAZIONE:<br />DATA-FIN : Date<br />DATA-INI : Date<br />PENALEGG : Real<br />SCONTODIP : Real<br />SCONTOCLI : Real<br />CAMBIOPNT : Int<br />DATAATTSCONTO : Date<br />RAPPORTO%VEICOLI : Real<br />LTCARBURANTE : Real<br />PENALECONS : Real <br />PENALERIT : Real<br />Entità  FILIALE:<br />CODF : Int<br />NOME : String<br />DATAIST : Date<br />GGCHIUSURA : String<br />ORARIOAPE : Time<br />ORARIOCHIU :Time<br />E-MAIL : String<br />SITO : String<br />INDIRIZZO : String x String x String x String x Int<br />Associazione  STORICO VEICOLI:<br />DATA-INI : Date<br />DATA-FIN : Date<br />Entità  VEICOLO:<br />TARGA : String<br />DISP : Boolean<br />LTSERBATOIO : Real<br />ANNOPROD : Date<br />ANNOACQUISTO : Date<br />MODELLO : String<br />MOTORE : String<br />TIPO : String<br />MARCA : String<br />PUNTIGG : Int<br />PREZZOGG : Real<br />IMMAGINI:String<br />INFOVEICOLO:String<br />CILINDRATA:Real<br />KMINI:Int<br />Entità  MANUTENZIONE:<br />IDM : Int<br />DATA-INI : Date<br />DATA-FIN : Date<br />DESCRIZIONE : String<br />TIPO:String<br />Entità  INCIDENTE:<br />COSTO : Real<br />COPERTURAASS:Int<br />Entità CARTACREDITO:<br />NOME:String<br />COGNOME:String<br />IDCC:Int<br />SALDO:Real<br />SCADENZA:Date<br />PIN:String<br />4-PROGETTAZIONE LOGICA<br />FASE DI RISTRUTTURAZIONE<br />4.1 SOTTO SCHEMA UTENTE<br />-6540586360L’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.<br />4.2 SOTTO SCHEMA FILIALE<br />-2540013970<br />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.<br />4.3 SOTTO SCHEMA VEICOLO<br />6985043180In 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).<br />4.4 SCHEMA E-R RISTRUTTURATO-8521701617980<br />4.5 SCHEMA LOGICO SINV<br />Cliente ( userutente , email, tel, preferenze )<br />Utente(user , pw, nome, cognome, citta, via, nciv, naz, prov)<br />Carta( codc, punti, dataatt,usercliente )<br />Personale(userutente , dataass, admin )<br />Storicolavoro(userpersonale, codffiliale, dataini, datafin, responsabile )<br />Filiale( codf, nome, dataist, ggchiusura, orarioape, email, sito, citta, via, nciv, prov, naz, orariochiu )<br />Amministrazione( codffiliale, dataini, datafin, penalegg, penalerit, penalecons, scontodip, scontocli, cambiopunti, dataattsconto, rapportopercveicoli, ltcarburante )<br />Storicoveicoli( codffiliale, targaveicolo, dataini, datafin )<br />Veicolo( targa, prezzogg, puntigg, marca, tipo, motore, modello, AnnoAcquisto, annoProd, ltserbatoio, disp,cilindrata,immagini,infoveicolo,kmini)<br />Manutenzione( idm, targaveicolo, dataini, datafin, descrizione, tipo )<br />Incidente( idmmanutenzio ne, costo,coperturaass)<br />Storico Prenotazioni( codp, orarit, oracons, idcc, datarit, datacons, filialecons, filialerit, costo, costoparz, datapren,  usercliente, codassicurazione, targaveicolo)<br />Assicurazione( cod, tipo, descrizione, prezzo,massimale)<br />Checkin( codpstoricoprenotazione, oraeffrit, kmini, dataeffrit )<br />Checkout(codpstoricoprenotazione, danni, kmfin, ltcarb, oraeffcons, diffcosto, dataeffcons )<br />4.6 NORMALIZZAZIONE SCHEMA RELAZIONALE<br />Obiettivo: verificare che lo schema logico ottenuto sia normalizzato in forma normale di Boyce-Codd, oppure in alternativa, in terza forma Normale.<br />- 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.<br />- Definizione Terza Forma Normale: Una relazione è in 3FN se per ogni dipendenza funzionale X->Y è vera una delle seguenti condizioni:<br />- X è una superchiave della relazione <br />- Y è membro di una chiave della relazione<br />Risultato Finale:<br />Lo schema relazionale ottenuto è normalizzato in 3NF(Terza Forma Normale) poiché in alcune relazioni abbiamo una chiave primaria ottenuta utilizzando due attributi della stessa.<br />Abbiamo preferito effettuare questa scelta di normalizzazione, invece di utilizzare identificativi numerici per ogni tupla delle relazioni, per facilitare operazioni future sulle stesse.<br />4.7 SCELTE PROGETTUALI<br />-Per CC ( Carta Credito) creiamo un altro DB chiamato “banca fittizia” dove registriamo per ogni utene la propria carta di credito;<br />-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);<br />-Nella tabella MANUTENZIONE il “tipo” indica se si tratta di revisione, tagliando o riparazione;<br />-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);<br />-La sensibilità oraria è gestita a giorni;<br />-La gestione dell’assicurazione è unica per tutta la SINV;<br />-Il prezzo del singolo veicolo  è uguale per tutte le SINV;<br />-Se un membro del personale si registra come cliente mantiene lo stesso Username e Password;<br />-La data di inizio della manutenzione in caso di incidente dovrà essere uguale alla data di consegna del veicolo noleggiato;<br />-La gestione dei vincoli V1 e V2 specificati sopra è stata implementata mediante l’applicativo (controlli a livello php);<br />-Lo sconto del 10% viene applicato al cliente solo in fase di prenotazione e non durante modifiche su richiesta;<br />-I punti vengono dati al cliente in solo in fase di pagamento durante la prenotazione e non durante le modifiche successive; <br />-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;<br />-Se l’utente sceglie una filiale consegna diversa dalla filiale ritiro selezionata, il veicolo sarà poi riportato alla filiale intestataria;<br />-Nella parte del personale le seguenti query vengono visualizzate per la filiale di appartenenza del membro del personale:<br />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.<br />5 TRADUZIONE IN SQL<br />5.1 Creazioni tabelle (create-table)<br />CREATE TABLE Utente(<br />user  VARCHAR(40) PRIMARY  KEY,<br />pw VARCHAR(40) NOT NULL,<br />nome VARCHAR(10) NOT NULL,<br />cognome VARCHAR(15) NOT NULL,<br />via VARCHAR(20),<br />n-civ VARCHAR(5),<br />città VARCHAR(20) NOT NULL,<br />prov VARCHAR(20) NOT NULL,<br />naz VARCHAR(20),<br />UNIQUE(nome,cognome,tel) <br />);<br />CREATE TABLE Cliente(<br />user VARCHAR(40) REFERENCES Utente<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />tel VARCHAR(17) NOT NULL,<br />e-mail VARCHAR(33),<br />preferenze VARCHAR(100),<br />PRIMARY KEY(USER)<br />);<br />CREATE TABLE Carta(<br />codc DECIMAL(8) PRIMARY KEY,<br />punti DECIMAL(5) NOT NULL,<br />dataatt DATE NOT NULL,<br />user VARCHAR(40) REFERENCES Cliente<br /> ON UPDATE CASCADE<br /> ON DELETE CASCADE   <br />);<br />CREATE TABLE Personale(<br />user VARCHAR(40) REFERENCES Utente<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />dataass DATE NOT NULL,<br />admin BOOLEAN,<br />PRIMARY KEY(user)<br />);<br />CREATE TABLE Storicolavoro(<br />user VARCHAR(40) REFERENCES Personale<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />codf DECIMAL(8) REFERENCES Filiale<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />data-ini DATE NOT NULL,<br />data-fin DATE,<br />responsabile BOOLEAN,<br />PRIMARY KEY(user,codf)<br />);<br />CREATE TABLE Filiale(<br />codf DECIMAL(8) PRIMARY KEY,<br />nome VARCHAR(15) NOT NULL,<br />dataist DATE,<br />ggchiusura VARCHAR(30) NOT NULL,<br />orarioape TIME(4) NOT NULL,<br />orariochiu TIME(4) NOT NULL,<br />e-mail VARCHAR(30),<br />sito VARCHAR(30),<br />città VARCHAR(20) NOT NULL,<br />via VARCHAR(20) NOT NULL,<br />n-civ VARCHAR(5) NOT NULL,<br />prov VARCHAR(20) NOT NULL,<br />naz VARCHAR(25) NOT NULL<br />);<br />CREATE TABLE Amministrazione(<br />codf  DECIMAL(8) PRIMARY KEY,<br />data-ini DATE PRIMARY KEY,<br />data-fin DATE,<br />penalegg DECIMAL(8,2) NOT NULL,<br />penalerit DECIMAL(8,2) NOT NULL,<br />penalecons DECIMAL(8,2) NOT NULL,<br />scontodip DECIMAL(3,2) NOT NULL,<br />scontocli DECIMAL(3,2) NOT NULL,<br />cambiopunti DECIMAL(3,2) NOT NULL,<br />dataattsconto DECIMAL(2) NOT NULL,<br />rapportoPercVeicoli DECIMAL(4,2) NOT NULL,<br />ltcarburante DECIMAL(4,3) NOT NULL,<br />FOREIGN KEY (codf) REFERENCES filiale<br />ON DELETE NO ACTION<br />ON UPDATE CASCADE<br />);<br />CREATE TABLE Storicoveicoli(<br />Codf DECIMAL(8) REFERENCES filiale<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />targa VARCHAR(10) REFERENCES veicolo<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />data-ini DATE NOT NULL,<br />data-fin DATE,<br />PRIMARY KEY (codf,targa)<br />);<br />CREATE TABLE Veicolo(<br />targa VARCHAR(10) PRIMARY KEY,<br />prezzogg DECIMAL(6,2) NOT NULL,<br />puntigg DECIMAL(5) NOT NULL,<br />marca VARCHAR(20) NOT NULL,<br />tipo VARCHAR(15) NOT NULL,<br />motore VARCHAR(10),<br />modello VARCHAR(20),<br />annoAcquisto DATE,<br />annoProd DATE,<br />ltserbatoio DECIMAL(6) NOT NULL,<br />disp BOOLEAN NOT NULL,<br />cilindrata DECIMAL(5) NOT NULL,<br />immagini VARCHAR (150),<br />infoveicolo VARCHAR(300),<br />kmini DECIMAL(7,1)<br />);<br />CREATE TABLE Manutenzione(<br />idm DECIMAL(8) PRIMARY KEY,<br />data-ini DATE NOT NULL,<br />data-fin DATE NOT NULL,<br />descrizione VARCHAR(100),<br />tipo VARCHAR(15) NOT NULL<br />targa VARCHAR(10) REFERENCES veicolo<br />ON DELETE NO ACTION<br />ON UPDATE CASCADE<br />);<br />CREATE TABLE Incidente(<br />idm DECIMAL(8) REFERENCES Manutenzione<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />costo DECIMAL(8,2) NOT NULL,<br />coperturaass DECIMAL(1) NOT NULL,<br />PRIMARY KEY(idm)<br />);<br />CREATE TABLE StoricoPrenotazioni(<br />codp DECIMAL(6)PRIMARY KEY,<br />orarit TIME NOT NULL , <br />oracons TIME NOT NULL,<br />idcc DECIMAL(20) NOT NULL, <br />datarit DATE NOT NULL, <br />datacons DATE NOT NULL, <br />filialecons DECIMAL(8)  NOT NULL, <br />filialerit DECIMAL(8)  NOT NULL , <br />costo DECIMAL (8,2) NOT NULL,<br />user  VARCHAR(40) REFERENCES  Cliente<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />cod VARCHAR(6) REFERENCES  Assicurazione<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />Targa VARCHAR(10) REFERENCES  Veicolo<br />ON UPDATE NO ACTION<br />ON DELETE NO ACTION,<br />datapren DATE NOT NULL,<br />costoparz DACIMAL(8,2)<br />);<br />CREATE TABLE Assicurazione(<br /> cod VARCHAR(6) PRIMARY KEY,<br /> tipo VARCHAR(50) NOT NULL, <br />descrizione VARCHAR(500), <br />prezzo DECIMAL (8,2) NOT NULL,<br />massimale DECIMAL(10,2) NOT NULL<br /> );<br />CREATE TABLE Checkin( <br />codp DECIMAL(6) REFERENCES StoricoPrenotazioni<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />oraeffrit TIME NOT NULL, <br />kmini DECIMAL(7,1) NOT NULL, <br />dataeffrit DATE NOT NULL,<br />PRIMARY KEY(codp)<br /> );<br />CREATE TABLE Checkout(<br />codp DECIMAL(6) REFERENCES StoricoPrenotazioni<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />danni BOOLEAN, <br />kmfin DECIMAL(7,1) NOT NULL,<br />ltcarb DECIMAL(3) NOT NULL, <br />oraeffcons TIME NOT NULL, <br />diffcosto DECIMAL (8,2) NOT NULL, <br />dataeffcons DATE NOT NULL,<br />PRIMARY KEY(codp)<br /> );<br />
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva
Documentazione sinv definitiva

More Related Content

Viewers also liked (12)

GENERATION \'95
GENERATION \'95GENERATION \'95
GENERATION \'95
 
Presentazione guns n roses
Presentazione guns n rosesPresentazione guns n roses
Presentazione guns n roses
 
Artopia
ArtopiaArtopia
Artopia
 
Case INDT parte 1
Case INDT parte 1Case INDT parte 1
Case INDT parte 1
 
Effectiveness of Hallux Valgus Strap: A Prospective, Randomized Single-Blinde...
Effectiveness of Hallux Valgus Strap: A Prospective, Randomized Single-Blinde...Effectiveness of Hallux Valgus Strap: A Prospective, Randomized Single-Blinde...
Effectiveness of Hallux Valgus Strap: A Prospective, Randomized Single-Blinde...
 
Prs
PrsPrs
Prs
 
Modul penuh mentor mentee
Modul penuh mentor menteeModul penuh mentor mentee
Modul penuh mentor mentee
 
Fail meja ubk
Fail meja ubkFail meja ubk
Fail meja ubk
 
Modul modul mentor mentee
Modul modul mentor menteeModul modul mentor mentee
Modul modul mentor mentee
 
Kertas kerja mentor mentee
Kertas kerja mentor menteeKertas kerja mentor mentee
Kertas kerja mentor mentee
 
Kertas kerja anti dadah rokok
Kertas kerja anti dadah rokokKertas kerja anti dadah rokok
Kertas kerja anti dadah rokok
 
B2B vs B2C
B2B vs B2CB2B vs B2C
B2B vs B2C
 

Similar to Documentazione sinv definitiva

Vert2002 trasferte 2002_accordo_01
Vert2002 trasferte 2002_accordo_01Vert2002 trasferte 2002_accordo_01
Vert2002 trasferte 2002_accordo_01
Fiom GD
 
Vert2002 trasferte 2002_piattaforma_01
Vert2002 trasferte 2002_piattaforma_01Vert2002 trasferte 2002_piattaforma_01
Vert2002 trasferte 2002_piattaforma_01
Fiom GD
 

Similar to Documentazione sinv definitiva (20)

Documentazione sinv
Documentazione sinvDocumentazione sinv
Documentazione sinv
 
SIAE - Istruzioni per recupero crediti autorali (2013)
SIAE - Istruzioni per recupero crediti autorali (2013)SIAE - Istruzioni per recupero crediti autorali (2013)
SIAE - Istruzioni per recupero crediti autorali (2013)
 
CashManagement versione 1.0 - Manuale d’uso.pdf
CashManagement versione 1.0 - Manuale d’uso.pdfCashManagement versione 1.0 - Manuale d’uso.pdf
CashManagement versione 1.0 - Manuale d’uso.pdf
 
Vert2002 trasferte 2002_accordo_01
Vert2002 trasferte 2002_accordo_01Vert2002 trasferte 2002_accordo_01
Vert2002 trasferte 2002_accordo_01
 
ARXivar per Autorama: cartellina elettronica e gestione processi Dealer Autom...
ARXivar per Autorama: cartellina elettronica e gestione processi Dealer Autom...ARXivar per Autorama: cartellina elettronica e gestione processi Dealer Autom...
ARXivar per Autorama: cartellina elettronica e gestione processi Dealer Autom...
 
Autorama case history Talea Consulting
Autorama case history Talea ConsultingAutorama case history Talea Consulting
Autorama case history Talea Consulting
 
Vert2002 trasferte 2002_piattaforma_01
Vert2002 trasferte 2002_piattaforma_01Vert2002 trasferte 2002_piattaforma_01
Vert2002 trasferte 2002_piattaforma_01
 
Presentazione Semcat
Presentazione SemcatPresentazione Semcat
Presentazione Semcat
 
Veicoli for business - Gestione flotta
Veicoli for business - Gestione flottaVeicoli for business - Gestione flotta
Veicoli for business - Gestione flotta
 
Meccanico auto economico: 5 fondamentali domande per valutare una rete di aut...
Meccanico auto economico: 5 fondamentali domande per valutare una rete di aut...Meccanico auto economico: 5 fondamentali domande per valutare una rete di aut...
Meccanico auto economico: 5 fondamentali domande per valutare una rete di aut...
 
Scooter Sharing Genova
Scooter Sharing GenovaScooter Sharing Genova
Scooter Sharing Genova
 
Carte tachigrafiche per tachigrafo digitale
Carte tachigrafiche per tachigrafo digitaleCarte tachigrafiche per tachigrafo digitale
Carte tachigrafiche per tachigrafo digitale
 
Brochure AGE
Brochure AGEBrochure AGE
Brochure AGE
 
Scheda prenotazione hpt
Scheda prenotazione hptScheda prenotazione hpt
Scheda prenotazione hpt
 
MosaicoX Autofficine software per autoriparatori, carrozzieri
MosaicoX Autofficine software per autoriparatori, carrozzieriMosaicoX Autofficine software per autoriparatori, carrozzieri
MosaicoX Autofficine software per autoriparatori, carrozzieri
 
ARXivar per Autorigoldi | Gestione Processi Dealer Automotive
ARXivar per Autorigoldi | Gestione Processi Dealer AutomotiveARXivar per Autorigoldi | Gestione Processi Dealer Automotive
ARXivar per Autorigoldi | Gestione Processi Dealer Automotive
 
Assilea - novità leasing 2014
Assilea - novità leasing 2014Assilea - novità leasing 2014
Assilea - novità leasing 2014
 
Easymulta
EasymultaEasymulta
Easymulta
 
Gestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzatoGestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzato
 
Forma Trade Assistenza Tecnica
Forma Trade Assistenza TecnicaForma Trade Assistenza Tecnica
Forma Trade Assistenza Tecnica
 

Documentazione sinv definitiva

  • 1. 1159510-25400<br />PROGETTO DATABASE 2009/2010<br />Realizzato da:Polidoro Alessio, Mazzotta Simone, Lucca Alessandro<br />INDICE<br />Tema del progetto<br />Descrizione del dominio applicativo...........................................3<br />Volume dei dati................................................................6<br />Operazioni e carico di lavoro previsti........................................6<br />Interfaccia amministrativa................................................6<br />Interfaccia personale........................................................7<br />Interfaccia cliente........................................................7<br />2. Analisi dei requisiti........................................................................8<br /> 2.1 Individuazione entità, attributi...............................................8<br /> 2.2 Ristrutturazione specifiche...............................................10<br />3. Progettazione concettuale...............................................................13<br /> 3.1 Schema scheletro...............................................................13<br /> 3.2 Sotto schema utente .............................................................14<br /> 3.3 Sotto schema filiale...............................................................14<br /> 3.4 Integrazione utente con filiale...............................................15<br /> 3.5 Sotto schema veicolo.......................................................15<br /> 3.6 Integrazione veicolo con filiale con utente...............................16<br /> 3.7 Sotto schema storico prenotazione.......................................17<br /> 3.8 Integrazione finale (modello E-R).......................................18<br /> 3.9 Database fittizio (Banca).......................................................18<br /> 3.10 Vincoli...............................................................................19<br /> 3.11 Gerarchie di generalizzazione...............................................19<br /> 3.12 Dizionario delle entità.......................................................19<br /> 3.13 Dizionario delle associazioni...............................................22<br /> 3.14 Dominio di ogni singolo attributo.......................................23<br />4. Progettazione logica.......................................................................26<br /> 4.1 Sotto schema utente.......................................................26<br /> 4.2 Sotto schema filiale.......................................................26<br /> 4.3 Sotto schema veicolo.......................................................26<br /> 4.4 Schema E-R ristrutturato.......................................................27<br /> 4.5 Schema logico...............................................................28<br /> 4.6 Normalizzazione schema relazionale ........................................ 29<br /> 4.7 Scelte progettuali...............................................................29<br />5. Traduzione SQL.......................................................................30<br /> 5.1 Creazione tabelle...............................................................30<br />1 Tema progetto <br />1.1 Descrizione del dominio applicativo <br />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. <br />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. <br />Per ogni filiale sono disponibili (almeno) le seguenti informazioni: <br />un codice univoco, il nome e l’indirizzo; <br />il sito web; <br />il recapito e-mail; <br />l’elenco dei membri personale che hanno lavorato e lavorano nella filiale; <br />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); <br />numero di veicoli per ogni tipo di veicolo; <br />la data in cui la filiale è stata istituita. <br />categoria, marca, modello, anno di produzione, ti podi motore(benzina, diesel, etc.); <br />anno di acquisizione da parte della SINV; <br />storico delle filiali a cui è appartenuto il veicolo; <br />storico delle prenotazioni del veicolo; <br />storico degli eventuali incidenti a cui il veicolo è stato soggetto; <br />storico delle riparazioni, tagliandi, revisioni effettuati;<br />orari e giorni di apertura.<br />Inoltre, per ogni veicolo, il sistema deve registrare: <br />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. <br />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.). <br />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. <br />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. <br />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. <br />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. <br />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). <br />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). <br />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). <br />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. 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. <br />1.2 Volume dati <br />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. <br />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). <br />1.3 Operazioni e carico di lavoro previsti <br />Le operazioni da prevedere sulla base di dati sono le seguenti(il carico di lavoro previsto è indicato tra parentesi): <br />1.3.1 Interfaccia amministrativa(Alessio Polidoro): <br />(a) gestione personale: inserimento/modica/cancellazione dati del personale(frequenza: 100dipendenti/mese); <br />(b) gestione filiali: <br />i. inserimento/modica/cancellazione filiali (frequenza: 10 filiali/ mese); <br />ii. inserimento/modica/cancellazione veicoli(frequenza: 50 veicoli/mese); <br />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);<br /> (c) gestione promozioni: <br />i. report che evidenzi, per ogni filiale, quali sono le promozioni eventualmente assegnate nel corso del tempo; <br />ii. report che evidenzi i periodi in cui vi sono stati più filiali con promozioni; <br />iii. report che evidenzi le filiali in cui si sono verificati gli sconti maggiori, con relativo periodo; <br />1.3.2 Interfaccia personale(Alessandro Lucca): <br />(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; <br />(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; <br />(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. <br />1.3.3 Interfaccia cliente(Simone Mazzotta): <br />(a) gestione profilo cliente: <br />i. registrazione cliente(frequenza: 100 clienti/giorno); <br />ii. visualizzazione/modifica dati personali, e visualizzazione saldo punti; <br />(b) ricerca e prenotazione filiali(frequenza:1.000prenotazioni/giorno): <br />i. i parametri di ricerca devono prevedere la possibilità di scegliere la città, la filiale, e il periodo di noleggio; <br />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; <br />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; <br />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; <br />v. confermata la prenotazione,il sistema dovrà restituire una pagina web 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. <br />2-Analisi dei requisiti<br />2.1 Individuazione entità e attributi<br />Entità<br />Attributi<br />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. <br />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. <br />Per ogni filiale sono disponibili (almeno) le seguenti informazioni: <br />un codice univoco, il nome e l’indirizzo; <br />il sito web; <br />il recapito e-mail; <br />l’elenco dei membri personale che hanno lavorato e lavorano nella filiale; <br />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); <br />numero di veicoli per ogni tipo di veicolo; <br />la data in cui la filiale è stata istituita. <br />categoria, marca, modello, anno di produzione, ti podi motore(benzina, diesel, etc.); <br />anno di acquisizione da parte della SINV; <br />storico delle filiali a cui è appartenuto il veicolo; <br />storico delle prenotazioni del veicolo; <br />storico degli eventuali incidenti a cui il veicolo è stato soggetto; <br />storico delle riparazioni, tagliandi, revisioni effettuati;<br />orari e giorni di apertura.<br />Inoltre, per ogni veicolo, il sistema deve registrare: <br />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. <br />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.). <br />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. <br />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. <br />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. <br />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. <br />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). <br />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). <br />2.2 Ristrutturazione delle specifiche<br />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. <br />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 . 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 è caratterizzata 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. <br />Per ogni filiale sono disponibili le seguenti informazioni: <br />un codice univoco, il nome e l’indirizzo,composto da via,provincia, nazione numero civico e città; <br />il sito web; <br />il recapito email; <br />la data in cui la filiale è stata istituita. <br />Per ogni veicolo sono disponibili:<br />tipo, marca, modello, anno di produzione, motore, targa,disponibilità, punti giornalieri, litri del serbatoio, targa, prezzo giornaliero<br />anno di acquisizione da parte della SINV; <br />• orari e giorni di apertura;<br />Lo storico delle filiali a cui è appartenuto il veicolo sarà salvato in una tabella con data inizio e data fine per ogni filiale;<br />Lo storico delle prenotazioni e degli eventuali incidenti, riparazioni, tagliandi, revisioni a cui il veicolo è stato soggetto saranno salvati in tabelle differenti;<br />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. <br />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.). <br />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 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. <br />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. <br />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(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. <br />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). <br />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). <br />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 inferiore al 50%(Gestito tramite dataattsconto, rapporto%veicoli in AMMINISTRAZIONE). <br />“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)”. <br />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.<br />10782308445503 Progettazione concettuale<br />3.1 Schema scheletro<br />Inizialmente,leggendo le specifiche, abbiamo prodotto il seguente schema scheletro, indicante l’architettura di base della nostra base di dati.<br />Di seguito descriviamo singolarmente i vari blocchi fino ad ottenere il modello E-R definitivo.<br />3.2 Sotto schema UTENTE<br />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.<br />3.3 Sotto schema FILIALE<br />22860109855Abbiamo 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.<br />Nel dettaglio vediamo:<br />-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;<br />-CambioPnt: indica il rapporto punti/euro riguardo all’acquisizione e all’utilizzo dei punti contenuti nella carta SINV;<br />-DataAttSconto: indica il periodo nel quale la promozione(riguardante lo sconto sul costo del noleggio) è attiva;<br />-Rapporto%Veicoli: rapporto tra i veicoli disponibili e prenotati relativo all’attributo sopra descritto.<br />-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.<br />3.4 Integrazione UTENTE con FILIALE <br />228607620<br />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.<br /> <br />3.5 Sotto schema VEICOLO<br />-20828010795<br />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:<br />-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.<br />-PrezzoGG: prezzo giornaliero di un determinato veicolo che verrà moltiplicato per la durata del noleggio.<br />-PuntiGG: numero di punti giornalieri che incrementeranno i punti della carta SINV.<br />-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.<br />-5899155238753.6 Integrazione VEICOLO con FILIALE con UTENTE<br />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.<br />3.7 Sotto schema STORICO PRENOTAZIONI<br />L’associazione prenota presente nello schema scheletro viene gestita come un entità per mantenere informazioni sulle varie prenotazioni nel corso del tempo.<br />Nel dettaglio vediamo:<br />-Costo: conterrà il costo complessivo da versare/versato appena effettuata la prenotazione.<br />-FilialeCons: indica il codice della filiale nella quale il veicolo verrà consegnato.<br />-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.<br />Il cliente deve scegliere una poliza assicurativa per ogni noleggio, caratterizzata da una descrizione, un prezzo, un tipo, un codice ed un massimale.<br />-Cod: sarà un codice numerico che si riferirà alla classe di appartenenza dell’assicurazione scelta.<br />-Massimale: sarà la massima cifra che verrà coperta dall’assicurazione in caso di danni a terzi.<br />Abbiamo gestito il ritiro e la consegna del veicolo con le entità CHECKIN e CHECKOUT .<br />Vediamo nel dettaglio:<br />-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.<br />-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 cliente dovrà pagare per mancato pieno alla consegna; la somma verrà memorizzata in diffcosto. <br />-Danni: Stringa che indentifica lo stato del veicolo al momento della consegna (incidentato o meno).<br />3.8 Integrazione finale (modello E-R)<br />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.<br />3.9 Database fittizio Banca<br />225292153<br />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.<br />-Pin indica il codice segreto di 3 cifre (opportunamente codificato in md5) verrà richiesto al momento del pagamento.<br />3.10 VINCOLI<br />V1:Lo stesso cliente nelle stesse date non può prenotare veicoli di filiali diverse.<br />V2:Non si possono fare modifiche relative a filiali e veicoli se esistono delle prenotazioni su queste filiali/veicoli.<br />3.11 GERARCHIE DI GENERALIZZAZIONE:<br />ENTITA’ PADREENTITA’ FIGLIETIPOLOGIAUTENTEPERSONALE,CLIENTETOTALE/CONDIVISAMANUTENZIONEINCIDENTE,TAGLIANDO,REVISIONE,RIPARAZIONETOTALE/ESCLUSIVA<br />3.12 DIZIONARIO DELLE ENTITA’<br />NOMEDESCRIZIONEATTRIBUTIIDENTIFICATORIUTENTEUtenti della SINVUSERPWNOMECOGNOMEINDIRIZZOUSERCLIENTECliente che si registra nel sistema della SINVE-MAILTELPREFStessi di UTENTEPERSONALEPersonale della SINVDATAASSADMINStessi di UTENTECARTACarta punti(se richiesto dal cliente)CODCDATAATTPUNTICODCSTORICO PRENOTAZIONIStorico Prenotazioni in corso e concluse nella SINVCODPIDCCDATARITDATACONSFILIALECONSCOSTOORARITORACONSFILIALERITDATAPRENCOSTOPARZCODPASSICURAZIONEAssicurazione scelta dal cliente al momento della prenotazioneTIPODESCRIZIONEPREZZOCODMASSIMALECODCHECK-INControllo al momento del ritiro del veicoloORAEFFRITKM-INIDATAEFFRITStessi di PRE NOLCHECK-OUTControllo al momento della consegnaDIFFCOSTODATAEFFCONSORAEFFCONSLTCARBKMFINDANNIStessi di PRE NOLAMMINISTRAZIONEGestione amministrativa della SINVDATA-FINDATA-INIPENALEGGSCONTODIPSCONTOCLICAMBIOPNTDATAATTSCONTORAPPORTO%VEICOLILTCARBURANTEPENALECONSPENALERITCODF, DATA-INI, DATA-FINFILIALEFiliali della SINVCODFNOMEDATAISTGGCHIUSURAORARIOAPEORARIOCHIU E-MAILSITOINDIRIZZOCODFVEICOLOVeicoli della SINVTARGADISPLTSERBATOIOANNOPRODANNOACQUISTOMODELLOMOTORETIPOMARCAPUNTIGGPREZZOGGIMMAGINICILINDRATAKMINIINFOVEICOLOTARGAMANUTENZIONEManutenzione effettuata sui veicoli della SINVIDMDATA-INIDATA-FINDESCRIZIONETIPOIDMINCIDENTEManutenzione per incidenteCOSTOCOPERTURAASS Stessi di manutenzioneTAGLIANDOManutenzione per tagliandoStessi di manutenzioneREVISIONEManutenzione per revisioneStessi di manutenzioneRIPARAZIONEManutenzione per riparazioneStessi di manutenzioneCARTACREDITODati riguardanti il proprietarioNOMECOGNOMETELSALDOSCADENZAIDCCPINIDCC<br />3.13 DIZIONARIO DELLE ASSOCIAZIONI<br />NOMEDESCRIZIONEATTRIBUTIENTITA’ COLLEGATEPOSSIEDEPossibile possesso di una carta da parte di un clienteCARTACLIENTEEFFETTUAPrenotazione effettuateDATA-PRENCLIENTEPRENOLHAPossibili assicurazioni su prenotazioniASSICURAZIONEPRE NOLSUBISCE1Controllo (check-in) sul ritiro di un veicoloPRE NOL CHECK-INSUBISCE2Controllo (check-out) sulla consegna di un veicoloPRE NOLCHECK-OUTSTORICO LAVOROStorico personale delle filialiDATA-INIDATA-FINRESPONSABILEPERSONALE FILIALIPRE VEprenotazione su un veicoloPRE NOLVEICOLOGESTISCEGestione amministrazione filialeAMMINISTRAZIONE FILIALESTORICO VEICOLIStorico veicoli delle filialiDATA-INIDATA-FINFILIALEVEICOLOSUBISCE3Possibile manutenzione su un veicoloVEICOLOMANUTENZIONE<br />3.14 Domini Attributi<br />Entità Carta:<br />CODC : Int <br />DATAATT: Date<br />PUNTI : Int<br />Entità Cliente:<br />E-MAIL : String<br />TEL : String<br />PREF : String<br />Entità Utente:<br />USER : String<br />PW : String<br />INDIRIZZO : String x String x String x String x Int<br />NOME : String<br />COGNOME : String<br />Entità Personale:<br />DATASS : Date<br />ADMIN:Boolean<br />Associazione Effettua:<br />DATA-PREN : Date<br />Entità Assicurazione:<br />PREZZO : Real<br />TIPO : String<br />DESCRIZIONE : String<br />COD : Int<br />MASSIMALE: Real<br />Entità Storico Prenotazioni:<br />CODP : Int<br />IDCC : String<br />DATARIT : Date<br />DATACONS : Date<br />FILIALECONS : String<br />COSTO : Real<br />ORARIT : Time<br />ORACONS : Time<br />FILIALERIT:String<br />COSTOPARZ:Real<br />DATAPREN:Date<br />Entità Check In:<br />ORAEFFRIT : Time<br />KM-INI : Int<br />DATAEFFRIT : Date<br />Entità Check out:<br />DIFFCOSTO : Real <br />DATAEFFCONS : Date<br />ORAEFFCONS : Time<br />LTCARB : Real<br />KMFIN : Int <br />DANNI : Boolean<br />Associazione STORICO LAVORO:<br />DATA-INI : Date<br />DATA-FIN : Date<br />RESPONSABILE:Boolean<br />Entità AMMINISTRAZIONE:<br />DATA-FIN : Date<br />DATA-INI : Date<br />PENALEGG : Real<br />SCONTODIP : Real<br />SCONTOCLI : Real<br />CAMBIOPNT : Int<br />DATAATTSCONTO : Date<br />RAPPORTO%VEICOLI : Real<br />LTCARBURANTE : Real<br />PENALECONS : Real <br />PENALERIT : Real<br />Entità FILIALE:<br />CODF : Int<br />NOME : String<br />DATAIST : Date<br />GGCHIUSURA : String<br />ORARIOAPE : Time<br />ORARIOCHIU :Time<br />E-MAIL : String<br />SITO : String<br />INDIRIZZO : String x String x String x String x Int<br />Associazione STORICO VEICOLI:<br />DATA-INI : Date<br />DATA-FIN : Date<br />Entità VEICOLO:<br />TARGA : String<br />DISP : Boolean<br />LTSERBATOIO : Real<br />ANNOPROD : Date<br />ANNOACQUISTO : Date<br />MODELLO : String<br />MOTORE : String<br />TIPO : String<br />MARCA : String<br />PUNTIGG : Int<br />PREZZOGG : Real<br />IMMAGINI:String<br />INFOVEICOLO:String<br />CILINDRATA:Real<br />KMINI:Int<br />Entità MANUTENZIONE:<br />IDM : Int<br />DATA-INI : Date<br />DATA-FIN : Date<br />DESCRIZIONE : String<br />TIPO:String<br />Entità INCIDENTE:<br />COSTO : Real<br />COPERTURAASS:Int<br />Entità CARTACREDITO:<br />NOME:String<br />COGNOME:String<br />IDCC:Int<br />SALDO:Real<br />SCADENZA:Date<br />PIN:String<br />4-PROGETTAZIONE LOGICA<br />FASE DI RISTRUTTURAZIONE<br />4.1 SOTTO SCHEMA UTENTE<br />-6540586360L’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.<br />4.2 SOTTO SCHEMA FILIALE<br />-2540013970<br />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.<br />4.3 SOTTO SCHEMA VEICOLO<br />6985043180In 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).<br />4.4 SCHEMA E-R RISTRUTTURATO-8521701617980<br />4.5 SCHEMA LOGICO SINV<br />Cliente ( userutente , email, tel, preferenze )<br />Utente(user , pw, nome, cognome, citta, via, nciv, naz, prov)<br />Carta( codc, punti, dataatt,usercliente )<br />Personale(userutente , dataass, admin )<br />Storicolavoro(userpersonale, codffiliale, dataini, datafin, responsabile )<br />Filiale( codf, nome, dataist, ggchiusura, orarioape, email, sito, citta, via, nciv, prov, naz, orariochiu )<br />Amministrazione( codffiliale, dataini, datafin, penalegg, penalerit, penalecons, scontodip, scontocli, cambiopunti, dataattsconto, rapportopercveicoli, ltcarburante )<br />Storicoveicoli( codffiliale, targaveicolo, dataini, datafin )<br />Veicolo( targa, prezzogg, puntigg, marca, tipo, motore, modello, AnnoAcquisto, annoProd, ltserbatoio, disp,cilindrata,immagini,infoveicolo,kmini)<br />Manutenzione( idm, targaveicolo, dataini, datafin, descrizione, tipo )<br />Incidente( idmmanutenzio ne, costo,coperturaass)<br />Storico Prenotazioni( codp, orarit, oracons, idcc, datarit, datacons, filialecons, filialerit, costo, costoparz, datapren, usercliente, codassicurazione, targaveicolo)<br />Assicurazione( cod, tipo, descrizione, prezzo,massimale)<br />Checkin( codpstoricoprenotazione, oraeffrit, kmini, dataeffrit )<br />Checkout(codpstoricoprenotazione, danni, kmfin, ltcarb, oraeffcons, diffcosto, dataeffcons )<br />4.6 NORMALIZZAZIONE SCHEMA RELAZIONALE<br />Obiettivo: verificare che lo schema logico ottenuto sia normalizzato in forma normale di Boyce-Codd, oppure in alternativa, in terza forma Normale.<br />- 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.<br />- Definizione Terza Forma Normale: Una relazione è in 3FN se per ogni dipendenza funzionale X->Y è vera una delle seguenti condizioni:<br />- X è una superchiave della relazione <br />- Y è membro di una chiave della relazione<br />Risultato Finale:<br />Lo schema relazionale ottenuto è normalizzato in 3NF(Terza Forma Normale) poiché in alcune relazioni abbiamo una chiave primaria ottenuta utilizzando due attributi della stessa.<br />Abbiamo preferito effettuare questa scelta di normalizzazione, invece di utilizzare identificativi numerici per ogni tupla delle relazioni, per facilitare operazioni future sulle stesse.<br />4.7 SCELTE PROGETTUALI<br />-Per CC ( Carta Credito) creiamo un altro DB chiamato “banca fittizia” dove registriamo per ogni utene la propria carta di credito;<br />-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);<br />-Nella tabella MANUTENZIONE il “tipo” indica se si tratta di revisione, tagliando o riparazione;<br />-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);<br />-La sensibilità oraria è gestita a giorni;<br />-La gestione dell’assicurazione è unica per tutta la SINV;<br />-Il prezzo del singolo veicolo è uguale per tutte le SINV;<br />-Se un membro del personale si registra come cliente mantiene lo stesso Username e Password;<br />-La data di inizio della manutenzione in caso di incidente dovrà essere uguale alla data di consegna del veicolo noleggiato;<br />-La gestione dei vincoli V1 e V2 specificati sopra è stata implementata mediante l’applicativo (controlli a livello php);<br />-Lo sconto del 10% viene applicato al cliente solo in fase di prenotazione e non durante modifiche su richiesta;<br />-I punti vengono dati al cliente in solo in fase di pagamento durante la prenotazione e non durante le modifiche successive; <br />-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;<br />-Se l’utente sceglie una filiale consegna diversa dalla filiale ritiro selezionata, il veicolo sarà poi riportato alla filiale intestataria;<br />-Nella parte del personale le seguenti query vengono visualizzate per la filiale di appartenenza del membro del personale:<br />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.<br />5 TRADUZIONE IN SQL<br />5.1 Creazioni tabelle (create-table)<br />CREATE TABLE Utente(<br />user VARCHAR(40) PRIMARY KEY,<br />pw VARCHAR(40) NOT NULL,<br />nome VARCHAR(10) NOT NULL,<br />cognome VARCHAR(15) NOT NULL,<br />via VARCHAR(20),<br />n-civ VARCHAR(5),<br />città VARCHAR(20) NOT NULL,<br />prov VARCHAR(20) NOT NULL,<br />naz VARCHAR(20),<br />UNIQUE(nome,cognome,tel) <br />);<br />CREATE TABLE Cliente(<br />user VARCHAR(40) REFERENCES Utente<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />tel VARCHAR(17) NOT NULL,<br />e-mail VARCHAR(33),<br />preferenze VARCHAR(100),<br />PRIMARY KEY(USER)<br />);<br />CREATE TABLE Carta(<br />codc DECIMAL(8) PRIMARY KEY,<br />punti DECIMAL(5) NOT NULL,<br />dataatt DATE NOT NULL,<br />user VARCHAR(40) REFERENCES Cliente<br /> ON UPDATE CASCADE<br /> ON DELETE CASCADE <br />);<br />CREATE TABLE Personale(<br />user VARCHAR(40) REFERENCES Utente<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />dataass DATE NOT NULL,<br />admin BOOLEAN,<br />PRIMARY KEY(user)<br />);<br />CREATE TABLE Storicolavoro(<br />user VARCHAR(40) REFERENCES Personale<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />codf DECIMAL(8) REFERENCES Filiale<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />data-ini DATE NOT NULL,<br />data-fin DATE,<br />responsabile BOOLEAN,<br />PRIMARY KEY(user,codf)<br />);<br />CREATE TABLE Filiale(<br />codf DECIMAL(8) PRIMARY KEY,<br />nome VARCHAR(15) NOT NULL,<br />dataist DATE,<br />ggchiusura VARCHAR(30) NOT NULL,<br />orarioape TIME(4) NOT NULL,<br />orariochiu TIME(4) NOT NULL,<br />e-mail VARCHAR(30),<br />sito VARCHAR(30),<br />città VARCHAR(20) NOT NULL,<br />via VARCHAR(20) NOT NULL,<br />n-civ VARCHAR(5) NOT NULL,<br />prov VARCHAR(20) NOT NULL,<br />naz VARCHAR(25) NOT NULL<br />);<br />CREATE TABLE Amministrazione(<br />codf DECIMAL(8) PRIMARY KEY,<br />data-ini DATE PRIMARY KEY,<br />data-fin DATE,<br />penalegg DECIMAL(8,2) NOT NULL,<br />penalerit DECIMAL(8,2) NOT NULL,<br />penalecons DECIMAL(8,2) NOT NULL,<br />scontodip DECIMAL(3,2) NOT NULL,<br />scontocli DECIMAL(3,2) NOT NULL,<br />cambiopunti DECIMAL(3,2) NOT NULL,<br />dataattsconto DECIMAL(2) NOT NULL,<br />rapportoPercVeicoli DECIMAL(4,2) NOT NULL,<br />ltcarburante DECIMAL(4,3) NOT NULL,<br />FOREIGN KEY (codf) REFERENCES filiale<br />ON DELETE NO ACTION<br />ON UPDATE CASCADE<br />);<br />CREATE TABLE Storicoveicoli(<br />Codf DECIMAL(8) REFERENCES filiale<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />targa VARCHAR(10) REFERENCES veicolo<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />data-ini DATE NOT NULL,<br />data-fin DATE,<br />PRIMARY KEY (codf,targa)<br />);<br />CREATE TABLE Veicolo(<br />targa VARCHAR(10) PRIMARY KEY,<br />prezzogg DECIMAL(6,2) NOT NULL,<br />puntigg DECIMAL(5) NOT NULL,<br />marca VARCHAR(20) NOT NULL,<br />tipo VARCHAR(15) NOT NULL,<br />motore VARCHAR(10),<br />modello VARCHAR(20),<br />annoAcquisto DATE,<br />annoProd DATE,<br />ltserbatoio DECIMAL(6) NOT NULL,<br />disp BOOLEAN NOT NULL,<br />cilindrata DECIMAL(5) NOT NULL,<br />immagini VARCHAR (150),<br />infoveicolo VARCHAR(300),<br />kmini DECIMAL(7,1)<br />);<br />CREATE TABLE Manutenzione(<br />idm DECIMAL(8) PRIMARY KEY,<br />data-ini DATE NOT NULL,<br />data-fin DATE NOT NULL,<br />descrizione VARCHAR(100),<br />tipo VARCHAR(15) NOT NULL<br />targa VARCHAR(10) REFERENCES veicolo<br />ON DELETE NO ACTION<br />ON UPDATE CASCADE<br />);<br />CREATE TABLE Incidente(<br />idm DECIMAL(8) REFERENCES Manutenzione<br />ON UPDATE CASCADE<br />ON DELETE CASCADE,<br />costo DECIMAL(8,2) NOT NULL,<br />coperturaass DECIMAL(1) NOT NULL,<br />PRIMARY KEY(idm)<br />);<br />CREATE TABLE StoricoPrenotazioni(<br />codp DECIMAL(6)PRIMARY KEY,<br />orarit TIME NOT NULL , <br />oracons TIME NOT NULL,<br />idcc DECIMAL(20) NOT NULL, <br />datarit DATE NOT NULL, <br />datacons DATE NOT NULL, <br />filialecons DECIMAL(8) NOT NULL, <br />filialerit DECIMAL(8) NOT NULL , <br />costo DECIMAL (8,2) NOT NULL,<br />user VARCHAR(40) REFERENCES Cliente<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />cod VARCHAR(6) REFERENCES Assicurazione<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />Targa VARCHAR(10) REFERENCES Veicolo<br />ON UPDATE NO ACTION<br />ON DELETE NO ACTION,<br />datapren DATE NOT NULL,<br />costoparz DACIMAL(8,2)<br />);<br />CREATE TABLE Assicurazione(<br /> cod VARCHAR(6) PRIMARY KEY,<br /> tipo VARCHAR(50) NOT NULL, <br />descrizione VARCHAR(500), <br />prezzo DECIMAL (8,2) NOT NULL,<br />massimale DECIMAL(10,2) NOT NULL<br /> );<br />CREATE TABLE Checkin( <br />codp DECIMAL(6) REFERENCES StoricoPrenotazioni<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />oraeffrit TIME NOT NULL, <br />kmini DECIMAL(7,1) NOT NULL, <br />dataeffrit DATE NOT NULL,<br />PRIMARY KEY(codp)<br /> );<br />CREATE TABLE Checkout(<br />codp DECIMAL(6) REFERENCES StoricoPrenotazioni<br />ON UPDATE CASCADE<br />ON DELETE NO ACTION,<br />danni BOOLEAN, <br />kmfin DECIMAL(7,1) NOT NULL,<br />ltcarb DECIMAL(3) NOT NULL, <br />oraeffcons TIME NOT NULL, <br />diffcosto DECIMAL (8,2) NOT NULL, <br />dataeffcons DATE NOT NULL,<br />PRIMARY KEY(codp)<br /> );<br />