Mapping Database Atsilo Componenti : Antonio Cesarano Luca Di Costanzo Luigi Lomasto Mapping del database Memorizzare i dati persistenti è uno dei problemi principali nello sviluppo di un software. Purtroppo i linguaggi di programmazione Object Oriented non forniscono un modo per salvare i dati, per questo motivo abbiamo deciso di utilizzare un Database Relazionale. Il modello relazionale si basa sul concetto di tabella. Ogni tabella è divisa in record composti da campi. Trade off (Relazionale vs Ad Oggetti) Il database relazionale permette di memorizzare i dati in tabelle seguendo un linguaggio standard per le operazioni (SQL) PRO: Le query che andremo ad effettuare saranno più semplici da scrivere e comprendere. Le performance sono maggiori rispetto al modello ad oggetti. CONTRO: Bisogna effettuare un’operazione di mapping non sempre semplice. Trade off (Relazionale vs Ad Oggetti) Il database ad oggetti aggiunge al modello del database relazionale nuove funzionalità per supportare l’utilizzo degli oggetti. PRO : Non bisogna effettuare un’operazione di mapping Viene utilizzato per database di grandi dimensioni e più complessi CONTRO : Query più difficili da scrivere e da comprendere Performance peggiori. Dati persistenti Durante la fase di Analisi dei Requisiti è stato prodotto in output il documento relativo al Dizionario dei Dati contenente le specifiche sui dati presenti nel nostro sistema. Da questo abbiamo selezionato gli oggetti persistenti che dovranno essere salvati nel nostro database. Euristiche Utilizzate Per individuare le classi, gli attributi e le relazioni abbiamo utilizzato l’euristica di Abbott. Esempio: “La maestra inserisce nel registro di classe le attività svolte dai bambini” Utilizzando l’euristica di Abbott individuiamo gli oggetti attraverso i nomi comuni (“Maestra,Bambino,Registro,Attività”) e le relazioni che intercorrono fra loro individuando i verbi (“inserire”, “svolgere”) Mapping Database Una volta individuata la classe e gli attributi da inserire nel database procediamo con il mapping. Fattura +id:INT +descrizione:String +personaleAsilo:String Fattura id:INT descrizione:Varchar(100) personaleAsilo:Varchar(50) Il tipo di dato selezionato per la “descrizione” può coincidere a diversi tipi di dato presenti nel database (Es. text-char etc.) Mapping Database Tabella FATTURA id descrizione personale_asilo 1 “Pagamento n°....” CSRNTC95L12C129M 2 “Pagamento n°....” RFTCTC94L12C139K 3 “Pagamento n°....” SDRTBC65F17S432R Primary key Foreign key ID rappresenta la chiave primaria della nostra tabella in quanto attributo unico di ogni record. Il PersonaleAsilo è chiave referenziale della tabella Personale Asilo ed indica il codice fiscale dell’impiegato che ha emesso la fattura Linee Guida Utilizzate Al fine di ottenere un modello di database “standard” abbiamo scelto di seguire le seguenti linee guida per evitare determinati problemi. Nomi delle tabelle in maiuscolo singolare. Nomi dei campi minuscolo singolare. Underscore al posto degli spazi. Caratteri speciali non permessi. Risoluzione delle Molteplicità Le relazioni tra due o più entità danno vita a diversi tipi di associazione: One to One : Sono mappate inserendo la chiave esterna in una delle due tabelle. One to Many : Sono mappate inserendo la chiave esterna nella tabella con la cardinalità “*”. Many to Many : Sono mappate creando una tabella di smistamento che contiene le chiavi delle due tabelle. Associazione One to One Bambino 1 Bambino nome codice_fisc. 1 Domanda Iscrizione Domanda Iscrizione id data codfisc Aldo RF124FGGC3D 56 alice RF12… Paolo DS874QCRG8R 79 john DS87… Associazione One to Many Bambino 1 * Classe Bambino nome codice_fisc. classe id codfisc Aldo RF124FGGC3D 56 RF12… Paolo DS874QCRG8R 79 DS87… Associazione Many to Many Retta * * Extra Retta id name 23 novice 24 expert Extra ... id Possiede id_retta id_extra 23 56 23 79 descr. 56 Supp… 79 Supp… ... Risoluzione delle Molteplicità E’ possibile risolvere l’associazione “one to one” o “one to many” con una tabella di smistamento come con l’associazione “many to many”. Trade Off Migliore manutenibilità. Performance peggiori. Risoluzione Ereditarietà L’ereditarietà non è supportata dai database relazionali, per questo dobbiamo trovare un modo per eliminarla. Nel nostro caso avevamo la tabella “Utente” che era padre di “PersonaleAsilo”, “Genitore”, “Psico pedagogo” ed “Educatore Didattico”. Attraverso il mapping orizzontale abbiamo eliminato la tabella “Utente” inserendo gli attributi comuni nelle tabelle figlie e duplicando le relazioni della tabella padre. Risoluzione Ereditarietà Utente Nome Cognome Codice Fiscale Educatore Didattico Genitore Tipo Account Titolo Studi Educatore Didattico nome codfisc Tipo Account Marco GF4F3… Iscritto Genitore ... nome codfisc Titolo studi Paolo GF4F3… Diploma Superiore ...