Progettazione di un Database Per comprendere il processo di
by user
Comments
Transcript
Progettazione di un Database Per comprendere il processo di
Progettazione di un Database Per comprendere il processo di progettazione di un Database deve essere chiaro il modo con cui vengono organizzati e quindi memorizzati i dati in un sistema di gestione di Database Relazionale, ad es.: MS-Access, File Maker, Paradox., e conoscere quali sono gli elementi che si possono trovare all’interno della struttura di un database. In genere, a prescindere dal programma utilizzato per la progettazione, gli elementi di un Database sono: - tabelle - maschere query (interrogazioni) report macro e moduli. Tabelle. Alla base della struttura di un DATABASE vi sono le tabelle, formate da righe e colonne, dove vengono inseriti i dati organizzati secondo schemi logici; la prima riga di ogni tabella contiene l’intestazione dei campi (o attributi). Le informazioni relative ad argomenti diversi devono essere memorizzati in tabelle distinte, in tal modo è possibile accedere più rapidamente e direttamente a tali informazioni. Per esempio, è conveniente creare una tabella per memorizzare le informazioni relative agli studenti e una relativa agli esami sostenuti. L' attenzione va posta, quindi, sulla relazione che deve intercorrere fra le due tabelle (ad es.: il campo matricola che deve essere comune ad entrambe le tabelle). Maschere. La funzione delle maschere (ad es. in MS-Access) è quella di visualizzare i dati e/o modificare gruppi di record, o visualizzare tutti i campi di un singolo record all’interno di una maschera, o i dati provenienti dall’esecuzione di una query. Una maschera può essere definita come la rappresentazione a video di un modulo su carta. Il vantaggio della visualizzazione dei dati mediante maschera, è che non bisogna rispettare rigorosamente la struttura righe/colonne. Query. Una query consente la ricerca dei dati in una o più tabelle. Sono utilizzate per filtrare i dati delle tabelle in base a “criteri” assegnati dall’utente. Le query possono, anzi sono spesso, utilizzate come base per creare maschere e report. Consentono di definire quali record e quali campi visualizzare. Report. Un report consente di stampare su supporto cartaceo i dati delle tabelle, o dei risultati delle query. La realizzazione di un report è simile all’impostazione di una maschera: è possibile scegliere in che modo raggruppare i record e determinare la posizione dei campi nel report. Macro e moduli. Sono, in pratica, gli strumenti di programmazione dei database. Consistono in azioni e istruzioni, scritte in un opportuno linguaggio di programmazione (in Access è il Visual Basic), che è possibile fare eseguire all’interno di un database. Strutturalmente la macro è un insieme di istruzioni, ognuno delle quali viene chiamata azione. Le azioni eseguibili, in Access, sono fornite in un elenco all’interno del programma. 6 Struttura di un database La struttura di un Database è un elemento sostanziale che va esaminato prima ancora di creare le tabelle, evidenziando l' obiettivo che si intende raggiungere e indicando le relazioni che devono intercorrere fra le informazioni in esso contenute. 7 Fasi di progettazione di un Database Fase 1: Definizione dello scopo. - Determinare quali informazioni dovranno essere memorizzate nel Database Fase 2: Definizione delle tabelle. - Suddividere le informazioni in argomenti distinti; ciascun argomento deve costituire una tabella del database. Definizione dei campi. Fase 3: Fase 4: Fase 5: Determinare le informazioni che devono essere contenuti in ciascuna tabella, ovvero i campi (o categorie) della tabella; definire una eventuale chiave primaria. Definizione delle relazioni. - Stabilire le relazioni che intercorrono fra i dati delle tabelle. Se necessario aggiungere dei campi alle tabelle. Ritocchi finali alla struttura. - Analizzare la struttura per la ricerca di eventuali errori, creando le tabelle e aggiungendo dati di esempio. Fase 1. - Definizione dello scopo. Definire lo scopo e la modalità di utilizzo del DATABASE equivale a stabilire il tipo di informazioni che dovranno essere gestite dal DATABASE stesso. Quindi bisogna fissare gli argomenti nei quali scomporre le informazioni (le tabelle) e le categorie in cui suddividere ogni argomento (i campi delle tabelle). Esempio. Creare un database che contenga informazioni relative agli studenti iscritti ad una facoltà all’interno dell’Università, agli esami che andranno a sostenere e ai vari corsi di laurea cui appartengono. La prima cosa che si andrà a fare è quella di determinare una serie di domande alle quali il Database dovrà poter rispondere. Come per esempio: "Quanti esami sono stati sostenuti da uno studente?", "Chi ha sostenuto più esami?", "Qual è l’esame più sostenuto?". A queste domande il Database dovrà rispondere elaborando le informazioni disponibili e visualizzarle mediante maschere o sotto forma di report, o stampare, eventualmente, delle etichette postali relative agli studenti. Fase 2. - Definizione delle tabelle. Le tabelle sono la struttura portante di un database, la loro definizione determina la fase più complessa nella progettazione di un Database. Attraverso le tabelle vengono fornite al Database le categorie di base alle quali sono riconducibili i dati che si intendono inserire. Inizialmente tutte le informazioni che il DATABASE deve gestire non sono organizzate in maniera logica, quindi bisogna creare dei raggruppamenti che evitino di ripetere informazioni nel Database causando inutili sprechi di memoria del supporto utilizzato, o che evitino di eliminare informazioni valide se vengono cancellati i record di una tabella. Es.: “Annullare le date degli esami sostenuti da uno studente perché inizia un nuovo anno”. Se le informazioni relative allo studente (i dati anagrafici) e agli esami sono contenute in un’unica tabella, allora eliminando i record relativi agli esami verranno eliminati anche i dati anagrafici del dipendente, mentre questi devono rimanere; allora, è necessario raggruppare tutte le informazioni relative allo studente in una tabella distinta denominata “Studenti” e tutte le informazioni relative agli esami dello studente in un’altra tabella denominata “Esami_sostenuti”. Quindi, si devono esaminare le informazioni che il Database deve gestire e suddividerle in argomenti logici, quali studenti, esami, struttura e così via. Ciascun argomento costituirà una tabella distinta. A questo punto è possibile ottenere una bozza delle tabelle del Database: Esami_sostenuti ………… …………….. ………………… Studenti ………… …………….. ………………… Esami ………… …………….. ………………… Osservazioni: • Una tabella contiene molti campi con informazioni relative a diversi argomenti. (Es.: la tabella contiene campi relativi agli studenti e campi relativi agli esami oppure ai corsi di laurea: conviene creare più tabelle). • • Alcuni record di una tabella contengono dei campi vuoti perché appartengono ad un' altra tabella. Sono state create varie tabelle, molte delle quali contengono gli stessi campi. (Es.: una tabella relativa agli esami sostenuti a gennaio, una con quelli sostenuti a febbraio e così via; basta creare un' unica tabella con il campo “data”). Fase 3. - Definizione dei campi. Ogni categoria di informazioni contenuta in una tabella determina un campo, che corrisponde ad una colonna di essa. Esempio di campo è il Cognome della tabella Studenti; questo conterrà il cognome dello studente. Nota per la definizione dei campi: Ogni campo di una tabella deve riferirsi univocamente all’argomento della tabella. Se il campo contiene informazioni relative all’argomento di un’altra tabella vuol dire che è stato incluso nella tabella sbagliata. (Parleremo più avanti di relazioni). Non includere campi derivati o risultati calcolati. Non è conveniente memorizzare nei campi delle tabelle il risultato di calcoli. Questo può essere eseguito solo quando si vuole visualizzare il risultato. Es. nei report per visualizzare i totali di alcune quantità di dati; “il numero di esami sostenuti da uno studente”, verrà calcolato il totale degli studenti nella relativa tabella solo quando si vuole visualizzare o stampare il risultato, non deve mai essere memorizzato il totale in un campo della tabella. Includere tutte le informazioni necessarie. Può darsi che durante la fase di progettazione non vengano inserite delle informazioni necessarie. In tal caso bisogna ritornare alla prima fase del processo e inserirle. Immettere in campi distinti informazioni raggruppate. È conveniente, per esempio creare un campo per il Nome e uno per il Cognome e non un unico campo che li contiene entrambi; se infatti si vuole fare la ricerca per cognome risulterà complicato poterlo considerare singolarmente. Campi chiave. Un sistema di gestione di database relazionale è molto più potente quanto maggiore è la sua capacità, in termine di velocità, di raggruppare e ricercare le informazioni contenute nelle tabelle. Per questo motivo ogni tabella del Database dovrebbe contenere un campo che identifichi in modo univoco ciascun record memorizzato (vedi paragrafo 3). Tale campo viene chiamato Chiave primaria della tabella. Per esempio, un campo chiave potrebbe essere la matricola per gli studenti. Se una tabella non contiene un proprio identificatore vedremo, più avanti, come sarà possibile utilizzare un campo che assegni a ciascun record un numero progressivo, quindi univoco, e definire questo campo come chiave primaria. Nella definizione dei campi “chiave primaria” bisogna tenere presente che: non possono essere immessi valori duplicati o nulli. non deve contenere valori troppo lunghi da ricordare o da digitare, soprattutto quando questo viene utilizzato per ricercare un record. la sua dimensione incide sulla velocità delle operazioni di un Database, quindi utilizzare le più piccole dimensioni di campo adatte ai valori da memorizzare nel campo stesso. Es. numerico tipo byte o sigla alfanumerica. Esempio: Completiamo lo schema precedente delle tabelle considerando anche i campi: Studenti Matricola Cognome Nome Data_nasc Luogo Corso_laurea Esami_sostenuti Esami Matricola Codice_esame Esame Descrizione Data_esame Voto Fase 4. - Definizione delle relazioni. Come detto precedentemente una relazione consente di “correlare” o “legare” due o più tabelle. In particolare esistono diverse tipologie di relazioni che possono essere definite tra due tabelle: • Relazione uno a molti • Relazione molti a molti • Relazione uno a uno La relazione uno a molti è il tipo di relazione più frequente in un Database relazionale: in questo tipo di relazione ad un record di una tabella A possono corrispondere più record di una tabella B, mentre ad un record di una tabella B corrisponde un solo record della tabella A. Un esempio di relazione uno a molti è quello visto precedentemente tra clienti ed ordini: ad un record della tabella clienti corrispondono più record della tabella ordini, mentre ad un record della tabella ordini corrisponde un solo record della tabella cliente (l’associazione in oggetto può essere letta come: un cliente può effettuare più ordini - più ordini sono effettuati dallo stesso cliente). In una relazione molti a molti ad un record della tabella A possono corrispondere più record della tabella B e viceversa ad un record della tabella B possono corrispondere più record della tabella A. Questo tipo di relazione è possibile solo definendo una terza tabella, chiamata tabella di congiunzione, che dispone di due chiavi esterne: una è collegata alla chiave primaria della tabella A, l’altra invece alla chiave primaria della tabella B. Una relazione molti a molti è pertanto composta da due relazioni uno a molti con una terza tabella; quest’ultima può anche essere composta da due soli campi (le due chiavi esterne). Un esempio è rappresentato nella figura seguente, in cui esiste una relazione molti a molti tra la tabella studenti e quella esami (più studenti possono sostenere più esami e viceversa), e viene realizzata inserendo una terza tabella (esami_sostenuti) che contiene le due chiavi esterne collegate alle tabelle principali. In una relazione uno a uno, ad un record della tabella A può corrispondere un solo record della tabella B, e viceversa. Si tratta di relazioni poco usate nella pratica, poiché generalmente le informazioni che risiedono nelle due tabelle possono essere fuse in un’unica tabella. Un tipico esempio di tale relazione è quella tra la “tabella marito” e la “tabella moglie”: un “marito” può avere una sola “moglie” e viceversa (almeno per la legge italiana!), in questo caso è possibile creare una relazione tra i campi “codice_fiscale” delle due tabelle, che saranno due chiavi primarie all’interno delle rispettive tabelle, come mostrato in figura: N.B. Una relazione può essere creata soltanto tra campi dello stesso tipo, non può esistere ad esempio una relazione tra un campo di testo ed un altro di tipo numerico; Osservazione – l’ integrità referenziale. Quando si crea una relazione tra due tabelle può essere utile impostare l’integrità referenziale. L’integrità referenziale, come detto precedentemente è un insieme predefinito di regole che il programma, nel nostro caso Access, utilizza per accettarsi che la relazione sia valida e prevenire modifiche o cancellazioni accidentali dei dati. Si ricorda che, affinché sia possibile applicare l’integrità referenziale devono essere verificate alcune condizioni, e cioè: il campo correlato nella tabella primaria deve essere chiave primaria, i campi correlati devono avere lo stesso tipo di dati, le tabelle devono appartenere allo stesso database.