Base di Dati AMICI Piemonte Pasturenzi Francesco matricola: 131523 Tutor: Prof.ssa Silvia Chiusano Sommario Introduzione (2) 1 Teoria sulla progettazione 1.1 Diagramma E-R 1.1.1 Entità 1.1.2 Relazioni 1.1.3 Attributi 1.1.4 Identificatori 1.1.5 Generalizzazione 1.2 Traduzione logica 1.2.1 Ristrutturazione dello schema E-R 1.2.2 Traduzione nel modello relazionale (4) (4) (4) (5) (5) (6) (7) (7) (7) (9) 2 Progettazione database AMICI Piemonte 2.1 Descrizione del vecchio sistema 2.2 Descrizione del nuovo sistema 2.2.1 Diagramma relazioni in Access 2.2.2 Modello E-R 2.2.3 Traduzione logica (11) (11) (12) (12) (14) (15) 3 Use cases 3.1 Avvio Programma 3.1.1 Diagramma UML 3.1.2 Codice “Apertura database” 3.1.3 Interfaccia grafica in Visual Basic 6.0 3.2 Inserimento nuovo socio 3.2.1 Diagramma UML 3.2.2 Query SQL utilizzando linguaggio ADO 3.2.3 Interfaccia grafica in Visual Basic 6.0 3.3 Gestione pagamenti soci 3.3.1 Diagramma UML 3.3.2 Query SQL utilizzando linguaggio ADO 3.3.3 Interfaccia grafica in Visual Basic 6.0 3.4 Stampa etichette 3.4.1 Diagramma UML 3.4.2 Query SQL utilizzando linguaggio ADO 3.4.3 Progettazione di report di stampa con Visual Basic 6.0 3.4.4 Alcune anteprime di stampa (17) (17) (18) (18) (19) (19) (20) (20) (23) (24) (24) (24) (27) (28) (28) (29) (30) (30) 4 Riempimento (32) A Sintassi SQL A.1 Selezione record A.2 Inserimento record A.3 Aggiornamento record (35) (35) (35) (35) B Sintassi UML B.1 Elementi del modello B.2 Relazioni (36) (37) (37) Referenze (39) Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 1 Introduzione Una base di dati (o database) è una collezione di dati che rappresenta le informazioni di interesse per un sistema informativo. Una definizione più tecnica è che la base di dati è una collezione di dati gestita da un DBMS. Il DBMS(Data Base Management System) è sinonimo di “sistema per la gestione di basi di dati” è un sistema software in grado di gestire collezioni di dati che siano grandi,condivise, persistenti. In una base di dati sono definiti lo schema, che descrive la struttura dei dati (nome tabella e nomi colonne) e l’ istanza, costituita dal contenuto di ogni tabella, cioè dai valori effettivi dei dati (righe delle tabelle) L’ accesso ai dati avviene tramite l’uso di interfacce amichevoli che permettono di specificare interrogazioni senza utilizzare un linguaggio testuale. I linguaggi di accesso ai dati divisi in due categorie: • Linguaggi di definizione dei dati (DDL) utilizzati per definire gli schemi e le autorizzazioni per l’accesso. (Es: CREATE TABLE…) • Linguaggi di manipolazione dei dati (DML) utilizzati per l’interrogazione e l’aggiornamento delle istanze delle basi di dati. (Es: SELECT, INSERT, DELETE, UPDATE…) Per approfondimenti si consiglia il testo [1] e [4]. Il linguaggio usato per le interrogazioni (query) è SQL inserito all’interno del linguaggio ospite Visual Basic 6. La base dati è stata realizzata per A.M.I.C.I. Piemonte in quanto l’associazione in questione ha dato disponibilità di sistemare la sua base di dati. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 2 La base di dati raccoglie tutte le informazioni relative ai soci, dottori, politici e dirigenti che contribuiscono al lavoro dell’associazione. Per ogni dirigente sono elencate le informazioni relative alla società che dirige. Per quanto riguarda i soci la base di dati registra i versamenti effettuati nell’arco degli anni; della figura professionale dei medici sono registrate le specialità (intese sia come specialità nell’ambito lavorativo sia come specialità date durante gli studi). All’associazione collaborano anche politici e dirigenti d’azienda (ASL, altre ASSOCIAZIONI e CASE FARMACEUTICHE). Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 3 Capitolo 1 Teoria sulla progettazione dei database In questo capitolo si descrivono gli elementi necessari per progettare un database. Il paragrafo 1.1 parla sul come rappresentazione le specifiche informali sotto forma di schema concettuale. Lo schema concettuale serve per definire una descrizione formale e completa, l’obiettivo è la rappresentazione del contenuto informativo della base di dati. Il paragrafo 1.2 invece parla della traduzione del modello concettuale nello schema logico. Si spiegano criteri di ottimizzazione delle operazioni da fare sui dati. Fa riferimento al modello logico dei dati prescelto. Per approfondimenti si consiglia il testo [1] e [4]. 1.1 Diagramma E-R E’ il modello concettuale più diffuso. Fornisce costrutti per descrivere le specifiche sulla struttura dei dati • In modo semplice e comprensibile • Con un formalismo grafico • In modo indipendente dal modello dei dati, che può essere scelto in seguito 1.1.1 Entità Rappresenta classi di oggetti del mondo reale che hanno proprietà comuni e esistenza autonoma. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 4 1.1.2 Relazioni Rappresentano un legame logico tra due o più entità. Occorrenze di una relazione Un’occorrenza di una relazione è una n-ipla (n-riga) costituita da occorrenze di entità, una per ciascuna delle entità coinvolte. Non vi possono essere n-uple identiche. Cardinalità Descrive numero minimo e massimo di occorrenze di una relazione a cui può partecipare un occorrenza di un’entità. • Minimo assume i valori 0 (partecipazione opzionale) 1 (partecipazione obbligatoria) • Massimo varia tra 1 (al più un occorrenza) N (numero arbitrario di occorrenze) Esempio: E1(0,1) --------(1,1)E2 : E1 ha partecipazione opzionale e al più un occorrenza per ogni oggetto E2 ha partecipazione obbligatoria e al più un occorrenza per ogni oggetto. Le cardinalità minime raramente sono 1 per tutte le entità coinvolte in una relazione. 1.1.3 Attributi Descrivono una proprietà elementare di un’entità o di una relazione. Ogni attributo è caratterizzato dal dominio l’insieme dei valori ammissibili per l’attributo. Gli attributi si possono raggruppare anche tutti in uno. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 5 Esempio: Via civico Indirizzo Cardinalità Anche agli attributti può essere specificata una cardinalità. Se è omessa corrisponde ad (1,1). • Minima 0 corrisponde ad un attributo che ammette il valore nullo. • Massima N corrisponde ad un attributo che può assumere più di un valore per la stessa occorrenza (attributo multivalore). 1.1.4 Identificatori Sono specificati per ogni entità. Le relazioni NON hanno identificatori. Descrivono i concetti dello schema che permettono di individuare in modo univoco le occorrenze delle entità. Ogni entità deve avere almeno un identificatore e può esistere più di un identificatore appropriato per un’entità Identificatore interno Semplice: costituito da un solo attributo. Composto: costituito da più attributi (interni) della stessa entità. Identificatore esterno L’entità che non dispone internamente di attributi sufficiente per definire un identificatore è denominata entità debole. L’entità debole deve partecipare con cardinalità (1,1) in ognuna della relazioni che forniscono parte dell’identificatore. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 6 1.1.5 Generalizzazione Descrive un collegamento logico tra un’entità padre (quella a monte) e una o più entità figlie (quelle a valle). Proprietà Ogni occorrenza di un’entità figlia è anche un occorrenza dell’entità padre. Ogni proprietà dell’entità padre (attributi, identificatori, relazioni, ecc) è anche una proprietà di ogni entità figlia Proprietà nota come ereditarietà. Caratteristiche ortogonali: • Generalizzazione totale: se ogni occorrenza dell’entità padre è un occorrenza di almeno una delle entità figlie, parziale altrimenti. • Generalizzazione esclusiva: se ogni occorrenza dell’entità padre è al più un’occorrenza di una delle entità figlie, sovrapposta altrimenti. 1.2 Traduzione logica Obiettivo: • Definizione di uno schema logico relazionale corrispondente allo schema ER di partenza. 1.2.1 Ristrutturazione dello schema ER Lo schema ER ristrutturato tiene conto di aspetti realizzativi Non è più uno schema concettuale Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 7 Obiettivi • Eliminazione dei costrutti per cui non esiste una rappresentazione diretta nel modello relazionale • Trasformazioni voite ad aumentare l’efficienza delle operazioni di accesso ai dati Analisi delle ridondanze Rappresentano informazioni significative. Effetti delle ridondanze sullo schema logico • Semplificazione e velocizzazione delle interrogazioni • Maggiore complessità e rallentamento degli aggiornamenti • Maggiore occupazione di spazio Decisione se conservarle Eliminazione delle gerarchie Non sono rappresentabili direttamente nel modello relazionale. Le gerarchie vengono sostituite da entità e relazioni. Metodi di ristrutturazione: • Accorpamento delle entità figlie nell’entità padre. • Accorpamento dell’entità padre nelle entità figlie. Eliminazione degli attributi multivalore Non sono rappresentabili nel modello relazionale. L’attributo multivalore è rappresentato mediante una nuova entità collegata da una relazione all’entità originale. Eliminazione degli attributi composti Gli attributi composti non sono rappresentabili nel modello relazionale. Due alternative: • Si rappresentano in modo separato gli attributi componenti (adatto se è necessario accedere separatamente a ciascun attributo). • Si introduce un unico attributo che rappresenta la concatenazione degli attributi componenti (adatta se è sufficiente l’accesso all’informazione complessiva). Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 8 Scelta degli identificatori primari Necessaria per definire la chiave primaria delle tabelle. Un buon identificatore deve: • Non assume valore nullo. • Essere costituito da pochi attributi e possibilmente interno. • Essere utilizzato da molte operazioni d’accesso. 1.2.2 Traduzione nel modello relazionale Si esegue sullo schema ER ristrutturato. Ad ogni entità si fa corrisponde una tabella con gli stessi attributi invece per le relazioni occorre considerare la cardinalità massima. La chiave primaria deve essere sottolineata. Gli attributi opzionali devono essere indicati con asterisco (*). Relazioni Molti-a-Molti Ogni relazione molti a molti corrisponde ad una tabella • La chiave primaria è la combinazione degli identificatori delle due entità collegate Relazioni Uno-a-Molti Sono possibili due modalità di traduzione • Mediante attributi Gli eventuali attributi di una relazione di questo genere vengono messi nell’entità con cardinalità più bassa. Esempio: (1,1) o (0,1) • Mediante una nuova tabella Viene creata una tabella con i due identificatori delle due entità, ma come chiave primaria si tiene l’identificatore dell’entità con cardinalità più bassa più si aggiungono gli eventuali attributi della relazione. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 9 Relazioni Uno-a-Uno Sono possibili più traduzioni • Partecipazione obbligatoria da entrambi i lati Bisogna mettere l’identificatore della seconda entità come attributo nella prima entità più aggiungere gli attributi della relazione (oppure viceversa) • Partecipazione opzionale da un lato Esempio: E1 (0,1)----------E2 (1,1) L’identificatore dell’entità E1 viene messo come attributo nell’entità E2 assime agli attributi della relazione. • Partecipazione opzionale da entrambi i lati Si crea una tabella della relazione che ha entrambi gli identificatori delle due entità collegate, più gli eventuali attributi della relazione, ma solo uno dei due come chiave primaria Entità con identificatore esterno Quando si crea la tabella dell’entità debole (cioè quella con un identificatore esterno) si deve definire una chiave primaria composta, formata dall’identificatore dell’entità stessa più l’identificatore esterno dell’entita a cui è collegata. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 10 Capitolo 2 Progettazione database AMICI Piemonte In questo capitolo si farà una descrizione del vecchio e del nuovo database mettendo in rilievo le differenze più rilevanti tra le due basi di dati. Si parlerà dei linguaggi usati per la progettazione e implementazione della nuova base di dati. Per approfondimenti sui linguaggi che verranno accennati in questo capitolo si consiglia il testo [5], [6], [7], [8]. 2.1 Descrizione del vecchio sistema Nella precedente base di dati era presente una tabella per ogni oggetto e di conseguenza gli attributi comuni venivano duplicati ed erano in numero notevole. Inoltre le tabelle in questione non erano relazionate tra di loro; questo portava alla mancanza dei criteri di integrità referenziale ( aggiorna campi correlati a catena o elimina record correlati a catena). Nel caso in cui l’utente avesse cancellato/modificato un’ istanza di una tabella, quest’istanza sarebbe stata cancellata/modificata solo nella tabella correntemente utilizzata portando il sistema a funzionare si correttamente ma una successiva interrogazione tramite query avrebbe portato a falsi risultati. Esempio: se l’utente avesse cancellato un socio, l’istanza del socio sarebbe stata cancellata, ma i pagamenti relativi a quel socio sarebbero rimasti. Da questo esempio si evince che un successivo filtraggio dei dati avrebbe portato ad errori nella lettura della base di dati. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 11 2.2 Descrizione del nuovo sistema Il nuovo sistema è stato implementato usando Microsoft Access 2007, è stato usato Access perché oltre ad essere di facile e veloce utilizzo viene gestito molto bene sia da ADO (ActiveX Data Objects) che da Visual Basic 6 essendo i programmi usati per la gestione e la grafica della nuovo sistema. Con l’attuale versione sono state create tabelle di dimensioni più piccole con la possibilità di relazionarsi. In ogni tabella sono stati inseriti solo gli attributi più stretti associati alla tabella in questione; questo ha portato ad una struttura della base di dati più schematica con un aumento della complessità nella creazione delle query(interrogazioni) alle informazioni contenute in essa. Dopo aver definito gli attributi, le tabelle, le relazioni e le query si è passati alla scrittura del Il programma è stato realizzato usando Microsoft Visual Basic 6.0 per l’interfaccia grafica e il linguaggio ADO (ActiveX Data Objects) per l’accesso e gestione dei record della base di dati. Gli utenti dell’associazione hanno richiesto che il programma avesse come requisiti un filtraggio per attributi più esteso rispetto a quello che utilizzavano in precedenza. Hanno poi richiesto che i C.A.P. venissero memorizzati in un apposita tabella e che i pagamenti venissero filtrati per SOCI PAGANTI e NON PAGANTI in modo da rendere il loro lavoro veloce. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 12 2.2.1 Diagramma relazioni in Access Figura 1 Diagramma relazioni in Access Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 13 Email (0,1) Note (0,1) Tel (0,N) Persone Ind (0,1) Spec (1,N) (1,1) Soci Ind (0,1) (t,s) Indirizzo Data_Nasc (0,1) ID_P Sesso (0,1) Nome Qual (0,1) 2.2.2 Modello E-R Politici Dottori (0,1) (0,1) Dirigenti (1,1) (1,1) (1,1) Partito (0,1) Prov_Nasc (0,1) Citta_Nasc (0,1) (0,1) (0,N) (1,N) (0,N) (0,N) (0,N) Cap (0,N) (0,N) Malattie (1,1) (1,1) Pagamenti Ind Quota_€ (1,1) Nome_Soc Anno Società ID_SOC Data Cap (0,N) (0,N) Ind Nome ID_OSP (0,N) Citta Nome ID_MAL Provincia Ospedali (t,e) Causale (p,e) Iscrizioni Casa Farma (0,N) Asl Asssoc. (1,1) Tel (0,N) Tel Tel Spec (1,N) (1,N) (1,1) Spec_Dott Pasturenzi Francesco – Base di dati AMICI Piemonte Spec Pagina 14 2.2.3 Traduzione logica Persone (ID_P, NOME, COGNOME, QUAL*, SESSO*, APPUNTI*, EMAIL*) Tipo_Pers (ID_P, TIPO) Tel (TEL, ID_P) Soci (ID_S, DATA_NASC*, CITTA_NASC*, PROV_NASC*, INDIRIZZO, CAP, ID_MAL*, ID_OSP*) Dottori (ID_D, IND*, CAP, ID_OSP*) Spec_Dott (SPEC, ID_D) Malattie (ID_MAL, NOME) * = attributo opzionale __ (sottolineatura)=chiave primaria Ospedali (ID_OSP, NOME, IND, CAP) Politici (ID_POL, IND*, CAP, PARTITO*) Dirigenti (ID_DIR, ID_SOC) Società (ID_SOC, IND, CAP, TIPO, NOME_SOC) Cap (CAP, CITTA, PROVINCIA) Pagamenti (DATA, ID_P, CAUSALE*, QUOTA_€, TIPO*, ANNO) Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 15 Discussione sulla traduzione logica Nell’entità Persone sono stati fatti salire i figli (Soci, Dottori, Politici, Dirigenti) e quindi anche le loro relazioni. Essendo l’entità Persone totale-sovrapposta, ogni persona può appartenere solo a quelle categorie e a più di una. Questo porta alla definizione di una nuova tabella (Tipo_Pers) con una chiave primaria composta. L’attributo Tel di cardinalità (0,N) è stato normalizzato in un’entità con chiave primaria TEL(univoca) in quanto ogni persona può avere più di un numero di telefono e ogni numero di telefono può essere associato esclusivamente ad una persona. Nell’entità Società sono stati fatti salire i figli (Casa Farma, Associazioni, Asl) e quindi anche le loro relazioni. Essendo l’entità Società totale-esclusiva ogni società(identificata dall’ID_SOC) può appartenere solo a quelle categorie e ad una sola di esse. Questo porta a definire l’attributo TIPO all’interno della tabella Società. L’entità Pagamenti ha una chiave primaria composta (DATA, ID_P) quindi ogni Persona, più precisamente ogni socio, può fare più di un pagamento ma in date diverse. Nell’entità Pagamenti è stato fatto salire il figlio Iscrizioni che ha come attributo il TIPO di pagamento fatto. Essendo l’entità Iscrizioni parziale-esclusiva i pagamenti possono essere di qualsiasi tipo ma di uno solo di essi. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 16 Capitolo 3 Use cases In questo capitolo si parla della progettazione e dell’implementazione della base di dati . Vengono riportate figure con relative descrizioni riferite alla parte grafica vista e usata dall’utente. Inoltre vengono aggiunti i spezzoni di codici usati per selezionare inserire aggiornare la base di dati. E’ stato preso in esame l’avvio del programma, l’inserimento di un nuovo socio, la gestione dei pagamenti e la parte relativa alla stampa delle etichette. Ogni spezzone di codice è descritto attraverso l’uso di diagrammai UML. Per approfondimenti in merito all forme, frecce usate nei diagrammi UML si consiglia di leggere l’appendice B e il testo [2] e [3]. Per quanto riguarda il codice relativo si legga il testo [1] [4] [5] [6] [7] [8]. 3.1 Avvio programma L’utilizzatore quando avvia il programma si trova davanti ad una finestra di autenticazione con UserName e Password, l’username è fisso con il valore “admin” la password viene impostata in progettazione. Una volta digitata la password corrispondente il programma fa un controllo all’interno del sistema per confrontare se il percorso del database definito in progettazione corrisponde effettivamente alla posizione del database su disco. Se il confronto da esito positivo all’utente viene visualizzata una finestra (figura 3) con le possibili interrogazioni che può fare ad esso. Vedi figura 2 per i casi d’uso. Altrimenti viene fuori un'altra finestra che gli permette di ricercare e quindi di selezionare dal suo file system il database in questione. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 17 3.1.1 Diagramma UML Base di dati AMICI Piemonte Autenticazione <<include>> UTENTE <<include>> Persone <<include>> <<extend>> Visualizza /Ricerca Società <<extend>> <<include> <<include>> Stampa <<include> <<include> Inserisci/Modifica <<include> Ospedali/Malattie/Cap Figura 2 Diagramma dei Casi d’Uso – Avvio programma 3.1.2 Codice “Apertura database” Il codice riportato di seguito è stato scritto in un modulo .bas (modulo per le variabili globali). Nel Form_Load del frmINIZIO viene impostato il percorso del database all’avvio del programma: Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 18 3.1.3 Interfaccia grafica in Visual Basic 6.0 Interfaccia iniziale programma Figura 3 Interfaccia iniziale – Avvio programma Ogni pulsante porta ad un form(finestra) specifico. Ad ogni attivazione di un nuovo form, i form precedenti che hanno permesso l’attivazione vengono disabilitati. Questo evita che l’utente possa provocare danni nell’apertura e chiusura di recordset(righe della tabella) in uso in quel momento. 3.2 Inserimento “nuovo socio” L’utente ha la possibilità di inserire un nuova persona socio, politico, dirigente o dottore che sia. In questo paragrafo viene descritto solo l’inserimento del socio ma i passaggi descritti sono identici anche per le altre categorie. Vedi figura 4. L’utente può controllare se vuole se la persona è già presente (opzionale). Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 19 Successivamente inserisce i dati relativi alla persona e poi quelli specifici per il socio, una volta fatto questo il programma di preoccuperà di controllare i dati immessi e di salvarli come nuovo record nelle rispettive tabelle. Questo avviene tramite query di inserimento. Da notare che se l’utente inserisce dati relativi ad un socio già esistente, il programma non dà nessun errore, semplicemente ignora i dati immessi e tiene quelli già presenti. Per questo la ricerca del socio se è già esistente è opzionale. 3.2.1 Diagramma UML Inserimento SOCIO UTENTE Inserisci Persona <<include>> <<extend>> Verificare se già presente Aggiungi dati SOCIO Verificare dati inseriti Figura 4 Diagramma dei Casi d’Uso – Inserimento Socio 3.2.2 Query SQL utilizzando linguaggio ADO Inizializza controlli Cap, Malattia, Ospedale Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 20 Inserimento tupla nella tabella ‘Persone’ Questa parte di codice crea una nuova tupla nella tabella Persone con gli attributi uguali ai valori immessi nelle rispettive TextBox. Inserimento tupla nella tabella ‘Soci’ Il codice riportato di seguito controlla se è stato messo lo “svirgolo” nella CheckBox del SOCIO, se sì allora abilita le rispettive TextBox e quindi permette all’utente di inserire i valori. Vedi figura 5. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 21 Inoltre esegue due selezioni per “ID” una sulla tabella Malattie, l’altra sulla tabella Ospedali; questo serve per trovare gli ID corrispondenti ai nomi selezionati dai due menù a tendina. Dopodiché ottenuti i valori delle TextBox e gli ID delle tabelle Malattie e Ospedali, i dati del socio vengono aggiunti nella tabella Soci. E’ necessario eseguire un ulteriore inserimento nella tabella Tipo_Pers in quanto, come precedentemente descritto, una persona può appartenere a più categorie; quindi, nella tabella Tipo_Pers verrà inserito l’ID_P della nuova persona e al “Tipo” verrà assegnato il valore “ ‘SOCIO’ “. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 22 Per quanto riguarda l’Inserimento nelle categorie Dottore, Politico e Dirigente il codice è simile a quello visto per Socio (vedi sopra). Prima dell’effettivo inserimento VB6 effettua un controllo sui vari campi: se un campo obbligatorio non è stato inserito allora visualizza un messaggio di errore del tipo “Inserire i dati dove c’è l’asterisco (*)”. 3.2.3 Interfaccia grafica in Visual Basic 6.0 Interfaccia per l’inserimento Figura 5 Interfaccia per l’inserimento del socio Per PERSONE si intende Soci, Politici, Dottori e Dirigenti. Essendo che queste quattro categorie hanno alcune caratteristiche comuni è stato preferito creare un unico form per l’inserimento e per la modifica comune, questo porta ad una diminuzione del codice e dello spazio del programma con un aumento della complessità per la gestione degli attributi che differiscono tra le quattro categorie. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 23 3.3 Gestione “pagamenti soci” L’utente può visualizzare oltre che i dati anagrafici anche i pagamenti riferiti a quel socio. Inoltre può effettuare un filtraggio generale su tutti i pagamenti di tutti i soci presenti all’interno della base di dati e stampare le informazioni ottenute. Vedi figura 6. 3.3.1 Diagramma UML Pagamenti SOCIO Visualizzare SOCI Selezionare SOCIO UTENTE <<extend>> <<extend>> Filtraggio pagamenti Visualizza pagamenti associati <<include>> <<include>> Stampa Figura 6 Diagramma dei casi d’Uso – Pagamenti soci 3.3.2 Query SQL utilizzando linguaggio ADO Seleziona informazioni sui PAGAMENTI di un determinato SOCIO Questa parte di codice seleziona tutti gli attributi della tabella Pagamenti relativi ad un determinato socio: Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 24 Per visualizzare i pagamenti bisogna fare click sul pulsante PAGAMENTI SOCIO. Utilizzando il codice riportato di seguito si ottiene la sommatoria dell’attributo “Quota_€” della tabella Pagamenti per quel determinato socio: Seleziona informazioni sui PAGAMENTI di un determinato SOCIO per FILTRAGGIO Come richiesto dall’associazione AMICI Piemonte, è stato implementato il codice relativo ad un filtraggio più selettivo. L’associazione ha richiesto di poter filtrare i pagamenti per dati anagrafici dei soci e per intervalli di tempo ben definiti in modo da capire anche quali soci non hanno pagato. Vedi figura 7 e 8. Filtro normale: questo filtro visualizza alcuni attributi della tabella Persone e tutti gli attributi della tabella Pagamenti a seconda dei parametri immessi nelle TextBox di quel filtro. Codice: Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 25 Filtro per periodo: questo filtro visualizza alcuni attributi della tabella Persone e tutti gli attributi della tabella Pagamenti a seconda delle due date immesse: Filtro per soci non paganti: questo filtro visualizza alcuni attributi della tabella Persone e tutti gli attributi della tabella Pagamenti a seconda dell’anno in cui viene fatta la ricerca: Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 26 3.3.3 Interfaccia grafica in Visual Basic 6.0 Form per “Visualizzare i PAGAMENTI del SOCIO” Figura 7 Interfaccia grafica – Pagamenti socio Form per “Filtrare i PAGAMENTI dei SOCI” Figura 8 Interfaccia grafica – Filtra pagamenti soci Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 27 3.4 Stampa etichette All'interno di Visual Basic 6 è presente uno strumento che permette la creazione di report (denominato per l'appunto Data Report Designer) il quale consente di produrre tabulati. L’utente ha la possibilità di stampare per ogni categoria di persone le etichette. Le etichette sono utili nel caso in cui dovesse spedire delle lettere. In questo caso si può eseguire un filtraggio e poi si avvia la stampa delle sole persone filtrate. Si veda la figura 9 per i casi d’uso. 3.4.1 Diagramma UML Stampa Etichette <<extend>> UTENTE Visualizzare SOCI Stampa Etichette <<extend>> <<include>> Filtraggio Figura 9 Diagramma dei Casi d’Uso – Stampa etichette soci Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 28 3.4.2 Query SQL utilizzando linguaggio ADO Report ‘Etichette Soci’ Di seguito è riportato il codice che viene eseguito da Visual Basic 6 quando viene chiamata la “Stampa di etichette”: Questi parametri vengono inseriti in ordine all’interno della query del report in questione. Vedi figura 10. La finestra di proprietà del report: Figura 10 Proprietà per la stampa etichette soci SELECT Nome, Cognome, Qual, Ind, Societa.Cap, Citta, Tipo, Provincia, Nome_Soc FROM Persone, Dirigenti, Societa, Cap WHERE Persone.ID_P=Dirigenti.ID_DIR and Dirigenti.ID_SOC=Societa.ID_SOC and Societa.Cap=Cap.Cap and TIPO LIKE ? and Nome LIKE ? and Cognome LIKE ? and Societa.Cap LIKE ? and Citta LIKE ? and Provincia LIKE ? and Nome_SOC LIKE ? Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 29 3.4.3 Progettazione report di stampa con Visual Basic 6 Questo report è stato creato per la stampa di etichette dei soci filtrati. Figura 11 Report di progettazione Etichette 3.4.4 Alcune anteprime di stampa Etichette Soci Figura 12 Esempio di stampa etichette Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 30 Elenco Soci Figura 13 Esmpio di stampa elenco soci Pagamenti Socio Figura 14 Esmpio di stampa pagamenti soci Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 31 Capitolo 4 Migrazione Per quanto concerne il riempimento, le tabelle della precedente base di dati sono state esportate da Access a Excel, sono state fatte le modifiche necessarie per adattare i dati a questo sistema e poi nuovamente importate in Access. Si specifica che questo metodo non è il più adatto per effettuare un riempimento ma è il metodo più veloce per un database con così poche tabelle. Perché è stato utilizzato questo metodo? Nel precedente database era presente una tabella per ogni categoria di persone: Ang_Soci (ID, Cognome, Nome,…) Ang_Dottori (ID, Cognome, Nome,…) Ang_Politici (ID, Cognome, Nome,…) E ogni tabella aveva gli stessi attributi. (quindi attributi duplicati, tra cui l’ID=chiave primaria) Invece il nuovo database contiene: Persone (ID_P, Cognome, Nome,…) Soci (collegamento a ID_P, Data_Nasc, …) Politici (collegamento a ID_P, Ind,…) Dottori (collegamento a ID_P, Partito,….) Dirigenti (collegamento a ID_P, collegamento a ID_SOC) Da quanto illustrato precedentemente nel nuovo database viene creato solo un attributo ID(ID_P), gli altri sono collegamenti ad esso; nel vecchio database gli ID erano indipendenti(duplicati). Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 32 Gli ID e ID_P sono le chiavi primarie delle tabelle. Problema: Come fare a copiare gli attributi ID, Cognome, Nome, Qualifica, Sesso, Note dei record delle tabelle Ang_Soci, Ang_Dottori, Ang_Politici nella tabella Persone del nuovo database? Questo è un notevole problema perché essendo gli ID di queste tabelle indipendenti tra di loro sarà presente un record con ID=1 sia nella tabella Ang_Soci, sia nella tabella Ang_Dottori e sia nella tabella Ang_Politici. Quindi se si eseguisse una serie di query di questo genere: INSERT INTO Persone(ID_P, Nome, Cognome, Qual, Sesso, Appunti) (SELECT ID, Nome, Cognome, Qualifica, Sesso, Note FROM Ang_Soci) INSERT INTO Persone(ID_P, Nome, Cognome, Qual, Sesso, Appunti) (SELECT ID, Nome, Cognome, Qualifica, Sesso, Note FROM Ang_Dottori) INSERT INTO Persone(ID_P, Nome, Cognome, Qual, Sesso, Appunti) (SELECT ID, Nome, Cognome, Qualifica, Sesso, Note FROM Ang_Politici) La prima query va a buon fine le altre due NO! Perché? Perchè si cerca di duplicare i valori della chiave primaria ID_P con l’inserimento di ID già esistenti. Soluzione: 1. esportare le tre tabelle Ang_Soci, Ang_Dottori e Ang_Politici su Excel; 2. cambiare tutti gli ID, con le funzioni di incremento di Excel, in modo tale che siano tutti diversi; 3. importare nuovamente le tabelle in Access; 4. eseguire le query definite sopra. In questo modo non verranno generati errori e i dati selezionati verranno effettivamente inseriti. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 33 Un procedimento simile è stato utilizzato anche per altre tabelle del vecchio database come Ang_Asl, Ang_Associazioni, Ang_CaseFarma, Caratt_Dottori. Tali tabelle sono state tutte esportate in Excel, modificate e importate in Access. Dopodiché sono state create ed eseguite le query appropriate per il riempimento delle nuove tabelle. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 34 A Sintassi SQL A.1 Selezione record SELECT [DISTINCT] ElencoAttributiDaVisualizzare FROM ElencoTabelleDaUtilizzare [WHERE CondizioniTupla] [GROUP BY ElencoAttributiDiRaggruppamento] [HAVING CondizioniSuAggregati] [ORDER BY ElencoAttributiDiOrdinamento]; A.2 Inserimento record Inserimento di una tupla INSERT INTO NomeTabella [(ElencoColonne] VALUES (ElencoCostanti); Inserimento di più tuple INSERT INTO NomeTabella [(ElencoColonne] (Interrogazione); Sono inserite in NomeTabella tutte le tuple selezionate dall’Interrogazione. Esempio di Interrogazione: (SELECT ElencoColonne FROM Tabelle WHERE Condizioni); A.3 Aggiornamento record UPDATE NomeTabella SET colonna = espressione {, colonna = espressione} [WHERE condizione]; Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 35 B Linguaggio UML Ci sono modi diversi di guardare un sistema. Uno è quello di "aprirlo" e guardarci dentro, per vedere come è strutturato all'interno. E' il punto di vista del progettista, interessato agli aspetti architetturali, ad un livello di maggiore o minore dettaglio. Un altro punto di vista, opposto, è quello di guardare a come può essere utilizzato. In questo caso il sistema viene visto come una "black box", sigillata, ed è possibile osservarne solo i comportamenti dall'esterno. E' il punto di vista dell'utilizzatore, e di tutto ciò che interagisce con il sistema nell'ambito del suo funzionamento. Questo secondo punto di vista corrisponde al modello dei casi d'uso. I casi d'uso (il termine "use case" è stato coniato dal metodologo svedese Ivar Jacobson) sono semplicemente i modi in cui il sistema può essere utilizzato. I casi d'uso svolgono un duplice ruolo nello sviluppo di un sistema. Da un lato, particolarmente nelle fasi iniziali della progettazione, servono per chiarire cosa dovrà fare il sistema. Sull'altro fronte, i casi d'uso guidano l'intero progetto di sviluppo. Costituiscono il punto di partenza per la progettazione del sistema Il modello dei casi d'uso rappresenta le funzionalità che il sistema offre ai suoi utilizzatori. I diagrammi forniscono una "mappa visuale", estremamente sintetica, degli utilizzi del sistema. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 36 B.1 Elementi del modello Casi d’uso Sono le funzionalità che il sistema mette a disposizione dei suoi utilizzatori. Descrivono come verrà concretamente utilizzato. Attori Sono i soggetti, esterni al sistema, che interagiscono con il sistema. Gli attori interagiscono con il sistema tramite messaggi (richieste, comunicazioni, risposte). Sistema di riferimento E' l'entità i cui utilizzi vengono descritti dall'insieme dei casi d'uso. Più precisamente, un insieme completo di casi d'uso descrive in modo completo gli utilizzi del sistema, ossia dal punto di vista”esterno” degli attori che interagiscono con esso, senza rivelare la struttura interna del sistema. B.2 Relazioni Partecipazione Ogni caso d’uso è collegato agli attori, uno o più, che partecipano al caso d’uso stesso mediante una associazione che ha il significato di partecipazione. Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 37 Include Casi d’uso diversi possono avere in comune una sequenza di passi da svolgere. In questo caso è possibile enucleare la sequenza comune, e definirla come un caso d’uso a se stante, da “includere” nei casi d’uso originari. <<include>> Extend L'associazione "extend" permette di definire che un caso d'uso ("base") può venire "esteso" con il comportamento definito in un altro caso d'uso, (“di estensione”). L'estensione riguarda un comportamento opzionale del caso d'uso base, ed è soggetta ad una condizione di attivazione. <<extend>> Generalizzazione/Specializzazione Asssocia un caso d’uso di tipo generale ad uno o più casi d’uso specializzati Generale Pasturenzi Francesco – Base di dati AMICI Piemonte Specializzato Pagina 38 Referenze [1] https://dbdmg.polito.it/twiki/bin/view/Public/BD1_INF [2] http://it.wikipedia.org/wiki/UML [3] http://www.analisi-disegno.com/usecases/LineeGuidaUML-CasiUsoV2.pdf [4] Basi di dati: modelli e linguaggi di interrogazione – McGraw Hill 2002 di Atzeni, Ceri, Torione, Paraboschi [5] Microsoft Visual Basic 6 – Mondatori Informatica di Francesco Balena [6] Microsoft ADO.NET 2.0 Passo per Passo – Mondatori Informatica di Rebecca Riordan [7]ADO.NET Guida per lo sviluppatore – HOEPLY- pubblicazione 07/2003 [8] SQL i portatili – Mondatori Informatica di Micheal J. Hernandez, John L. Viescas Pasturenzi Francesco – Base di dati AMICI Piemonte Pagina 39