5. Riscrittura e Raggruppamenti Cliente: Si vogliono registrare, per ciascun cliente, i dati anagrafici (codice fiscale, nome, cognome, indirizzo, telefono) e informazioni più specifiche ai fini delle polizze,quali: stato civile, stato di salute, sesso e data di nascita. Bisogna tenere conto del fatto che le persone possono rivestire più di un ruolo in ciascuna polizza: chi acquista la polizza è il contraente, che può essere ancheassicurato e beneficiario in caso di polizze vita. Agente: Per comodità, gli agenti vogliono memorizzare anche i propri dati, oltre al codice del mandato e al codice di iscrizione all'albo. Esame: Per beneficiare di una polizza vita, il contraente deve fare alcune visite ed esami clinici: visita di base, esami del sangue, radiografia al torace. Di ciascun esame si registra il tipo, l’esito, il medico o il laboratorio che ha effettuato l’analisi, la data. Polizza: Le polizze possono avere più di una persona assicurata. Ogni polizza ha un identificativo numerico e viene venduta da un solo agente. Le polizze sono di diversi tipi, ognuno con caratteristiche proprie; questa agenzia tratta polizze casa, auto, vita, malattia e infortuni. Per le polizze casa si devono conoscere le caratteristiche dell'abitazione; nelle polizze auto si indicano la targa e la classe bonus-malus; per le polizze vita va indicato il tipo di premio, il tipo di beneficio e quali sono i beneficiari; per le polizze malattia e per le polizze infortuni si deve segnalare la professione dell'assicurato. Garanzie: Ogni polizza comprende delle garanzie, ognuna identificata da un codice; ogni garanzia ha un premio, Massimali: Si specificano (per ogni garanzia) i massimali Rischio: Ogni garanzia comprende una descrizione dei rischi coperti (intesa come la descrizione di ognuno dei rischi coperti)
6. Scelte progettuali Motivazione dell’ inserimento di nuovi attributi (Per la polizza vita non vengono effettuate aggiunte)
7.
8. Figura 1- Esempio suddivisione appartamento/villino e per classe territoriale
15. Glossario garanzia Descrizione massimale Massimale garanzia Descrizione del rischio Rischi vita Esito, medico/laboratorio, data, tipo Esami polizza Codice Garanzia polizza Nome, cognome, telefono, codice di iscrizione all’albo, codice del mandato, via, n°civico, CAP, comune, provincia Agente specializzazione di polizza Premio, beneficio Polizza vita specializzazione di polizza Caratteristiche abitazione, classe territoriale, oggetto garanzie Polizza casa specializzazione di polizza Targa, classe di merito B/M, alimentazione, marca auto, modello, auto, potenza fiscale, classe di rischio, tipo d’ uso Polizza auto specializzazione di polizza Professione assicurato, fumatore, malattie pregresse, interventi pregressi, patologie Polizza malattia specializzazione di polizza Professione assicurato, tipologia Polizza infortuni persona, agente, garanzia Codice polizza, data Polizza polizza,vita Stato civile, stato di salute, sesso, data di nascita, nome, cognome, telefono, via, n° civico, CAP, comune, provincia Persona Associaz/specif Proprietà Entità
21. Trasformazione della gerarchia Sostituiamo la gerarchia di specializzazione con tante associazioni 1:1 quante sono le classi figlie
22.
23. Trasformazione del ciclo Si uniscono le 3 associazioni che esprimono le relazioni tra persona e polizza.La discriminazione tra queste avviene mediante il flag tipoCliente
29. Persona ( CF , nome, cognome, {telefono}, stato civile, stato di salute,sesso, data di nascita, (via, n° civico, CAP, comune, provincia)) Persona ( CF , nome, cognome, stato civile, stato di salute, sesso, data di nascita, via, n° civico, CAP, comune,provincia) TelPersona ( CF , telefono )
45. Proprietà imposte per un campo chiave In primo luogo un campo chiave deve rispettare il primo vincolo di integrità ed è per questo che abbiamo imposto “si” nel campo “richiesto” e “no” in “consenti lunghezza zero”. Siccome un campo chiave deve identificare univocamente un record della tabella, bisogna imporre “duplicati non ammessi” in “indicizzato”
46. Esempio: associazione 1:n In questo esempio possiamo vedere come a un codPolizza corrispondono più garanzie
47. Esempio: proprietà imposte per la foreign key Lo screenshoot mette in luce la relazione tra tabella principale e quella che ne importa la chiave. Imponendo di applicare l’integrità referenziale, si selezione solo l’aggiornamento dei campi correlati a catena, in quanto la selezione dell’opzione successiva può provocare la perdita di interi record.
48. Esempio: secondo vincolo d’integrità (su altre due tabelle con, in questo caso, relazione 1:1) Dalle immagini si evince come questa chiave importata soddisfi il secondo vincolo di integrità: le chiavi della tabella vita sono un sottoinsieme delle chiavi della tabella polizza.
49. Query 1: Quante sono le donne al di sopra dei 40 anni che hanno stipulato polizze vita? Espressione relazionale: Codice SQL: SELECT COUNT (*) FROM Persona, PerPol, Polizza, Vita WHERE Persona.CF=PerPol.CF AND PerPol.codPolizza=Polizza.codPolizza AND Polizza.codPolizza=Vita.codPolizza AND Persona.sesso=“F” AND PerPol.tipoCliente=“Contraente” AND Persona.data di nascita<01/01/1966
53. Query 1: screenshoots(4/4) Schermata dei Risultati: (Corrispondenti ai clienti: Villani Sara e Milani Maria Cristina, come evidenziato nelle tabelle coinvolte)
54. Query 2: Restituire i dati anagrafici dei beneficiari di polizze vita stipulate dall’agente che ha codice mandato 2323. Espressione relazionale: Codice SQL: SELECT Persona.nome, Persona.cognome, Persona.via, Persona.n° civico, Persona.CAP, Persona.provincia FROM Persona, PerPol, Polizza, Vita, Agente WHERE Persona.CF=PerPol.CF AND PerPol.codPolizza=Polizza.codPolizza AND Polizza.codPolizza=Vita.codPolizza AND Agente.codIscr=Polizza.codIscr AND PerPol.tipoCliente=“Beneficiario” AND Agente.codIscr=“2323”
60. Query 3: Qual è l’età media dei contraenti di polizze casa? Espressione relazionale: Codice SQL: SELECT Avg((Date()-Persona.data di nascita)/365) FROM Persona, PerPol, Polizza, Casa WHERE Persona.CF=PerPol.CF AND PerPol.codPolizza=Polizza.codPolizza AND Polizza.codPolizza=Casa.codPolizza AND PerPol.tipoCliente=“Contraente”
65. Query 4: Restituire i dati anagrafici dei contraenti di ciascun agente? Espressione relazionale: Codice SQL: SELECT Persona.nome, Persona.cognome, Persona.via, Persona.n°civico, Agente.nome, Agente.cognome FROM Persona, PerPol, Polizza, Agente WHERE Persona.CF=PerPol.CF AND PerPol.codPolizza=Polizza.codPolizza AND Polizza.codIscr=Agente.codIscr AND PerPol.tipoCliente=‘Contraente’ GROUP BY Persona.nome, Persona.cognome, Persona.via, Persona.n°civico, Agente.nome, Agente.cognome
71. Query 5: Quali clienti hanno stipulato polizze di massimale massimo? Espressione relazionale:
72. Query 5: Codice SQL: SELECT Persona.nome, Persona.cognome, Massimale.massimale FROM Persona, PerPol, Polizza, Garanzia, GarPol, GarMax, Massimale WHERE Persona.CF=PerPol.CF AND PerPol.codPolizza=Polizza.codPolizza AND Polizza.codPolizza=GarPol.codPolizza AND GarPol.codGaranz=Garanzia.codGaranz AND Garanzia.codGaranz=GarMax.codGaranz AND GarMax.codMax=Massimale.codMax AND PerPol.tipoCliente=‘Contraente’ AND GarPol.codMax=Massimale.codMax AND Massimale.massimale=( SELECT MAX (massimale) FROM Massimale)) GROUP BY Persona.nome, Persona.cognome, Massimale.massimale
82. Utenti significativi e opportuni dritti(2/3) Un agente può leggere, aggiornare e inserire i dati relativi a nuove polizze. Non sono invece autorizzati, ad esempio, ad eliminare dati o modificare la struttura delle tabelle
83. Utenti significativi e opportuni diritti(3/3) Un cliente ha strettamente il diritto di lettura e nessun altro tipo di autorizzazione