INTRODUZIONE ALLA TEORIA DEI DATABASE Autore: ing. Mauro Pullin 2 INDICE 1 INTRODUZIONE .......................................................................................................................3 2 SCHEMA DEL PERCORSO ...................................................................................................3 3 SVILUPPO DELLE LEZIONI ..................................................................................................4 3.1 3.2 3.3 3.4 LEZIONE 1 – LA MODELLAZIONE DEI DATI E LE ENTITÀ ........................................................4 LEZIONE 2 – LA CARDINALITÀ DELLE ASSOCIAZIONI............................................................7 LEZIONE 3 – ATTRIBUTI E CHIAVI PRIMARIE.........................................................................9 LEZIONE 4 – REGOLE DI DERIVAZIONE E CENNI SULLA NECESSITÀ DELLA NORMALIZZAZIONE..........................................................................................................................12 3.5 LEZIONE 5 – CONSIGLI, “TRUCCHI” E PRIME NOZIONI SULLA NORMALIZZAZIONE .............18 3 1 INTRODUZIONE La teoria dei database è un argomento molto vasto e la sua importanza è notevolissima, pertanto il ciclo di lezioni descritto nella presente dispensa riguarda esclusivamente l’introduzione alla tematica. La trattazione di seguito descritta si inserirà quindi in un percorso più ampio che prevede gli argomenti referenziati nella mappa concettuale di seguito rappresentata. Nella figura seguente, sono evidenziati con il colore giallo gli argomenti a cui ci si riferisce maggiormente nella presente dispensa. 2 SCHEMA DEL PERCORSO Per sviluppare il tema dell’introduzione alla teoria dei database, si è pensato di proporre gli argomenti di seguito elencati. • • Lezione 1 – La modellazione dei dati e le entità Lezione 2 – La cardinalità delle associazioni 4 • • • Lezione 3 – Attributi e chiavi primarie Lezione 4 – Regole di derivazione e cenni sulla necessità della normalizzazione Lezione 5 – Consigli, “trucchi” e prime nozioni sulla normalizzazione 3 SVILUPPO DELLE LEZIONI 3.1 Lezione 1 – La modellazione dei dati e le entità Fin dall’antichità l’uomo ha sempre avuto bisogno di memorizzare ed elaborare informazioni. Che fossero parole o numeri poco importava, quello che serviva era uno strumento per far sì che queste informazioni non fossero affidate solo alla memoria umana, ma continuassero ad esistere e ad essere disponibili a tutti. Prima dell’avvento dei computer l’unico supporto su cui era possibile memorizzare i dati era la carta (fogli, libri, ecc.) con tutte le limitazioni che essa comportava. Con l’introduzione dei computer le cose migliorarono decisamente, in quanto si cominciarono a studiare metodi e sistemi di gestione delle informazioni tali da ottimizzarne la ricerca e l’elaborazione. Si sentì quindi il bisogno di organizzare il contenuto dei file in maniera organica; perché ciò fosse possibile furono realizzati dei programmi che generavano database, vale a dire dei file in cui i dati erano memorizzati secondo precisi criteri di omogeneità e sequenzialità. Sulla base di tali criteri i suddetti programmi furono poi in grado di ricercare ed elaborare i dati con notevole velocità. In informatica, un’attività molto importante consiste nella modellazione dei dati. Modellare i dati significa costruire una rappresentazione semplificata della realtà osservata o di un problema riguardante – in genere – un’azienda, un ente pubblico o uno studio professionale, individuandone gli elementi caratterizzanti ed i legami intercorrenti tra essi. Riflettiamo su un fatto molto importante: in tutte le scienze applicate si è soliti procedere per modelli. Pensiamo, ad esempio, a come lavora un studio di architettura: si fa un modello su carta dell’edificio che si vuole costruire e questo modello è composto da vari disegni. Altro esempio: una casa automobilistica realizza il progetto della nuova automobile che intende mettere in produzione e anche questo progetto consiste in realtà in un modello, che viene esplicitato tramite un insieme di disegni. La progettazione di un modello di dati avviene a livelli diversi. • • • C’è, innanzi tutto, il livello concettuale, che rappresenta la realtà dei dati e le relazioni intercorrenti tra essi; lo si visualizza per mezzo di uno schema. Si passa poi al livello logico, che rappresenta il modo attraverso il quale i dati sono organizzati negli archivi elettronici: esso descrive, quindi, la composizione ed il formato dei dati nel loro aspetto di struttura logica di dati. Il livello logico viene derivato dal livello concettuale applicando alcune semplici regole di trasformazione. Alla fine si giunge al livello fisico, che rappresenta l’effettiva installazione degli archivi elettronici: esso indica l’ubicazione dei dati nelle memorie di massa (dischi). 5 Il livello fisico è quindi l’implementazione del livello logico sui supporti per la registrazione fisica dei dati: partizioni, puntatori, blocchi fisici, cluster, indici. L’attività di progettazione consente, prima di tutto, di costruire una rappresentazione astratta della realtà in modo indipendente dalla struttura dei dati. Fin dagli inizi l’informatica si occupò della memorizzazione elettronica di informazioni, ma non esistevano metodologie di progettazione degli archivi di dati e questo portava ad innumerevoli svantaggi e problemi. Un’analisi dettagliata di questi problemi portò il matematico Peter P. Chen – del Massachusetts Institute of Technology – a formulare, nel 1976, il modello Entità/Associazioni, in inglese Entity/Relationship. Si tratta di uno strumento per analizzare le caratteristiche di una qualsiasi realtà in modo indipendente dagli eventi che in essa accadono, cioè per costruire un modello concettuale dei dati indipendente dalle applicazioni, quindi indipendente dai programmi che con esso interagiranno. Il modello Entità/Associazioni si avvale di una rappresentazione grafica, detta schema E/R, che mette in evidenza gli aspetti fondamentali del modello concettuale, consentendo di porre in evidenza gli aspetti fondamentali del modello concettuale, con i dati caratterizzanti e le associazioni tra essi. Tra l’altro, gli schemi E/R risultano di facile comprensione anche per le persone che non sono specialisti di informatica e questo è importantissimo nei contesti aziendali. Va inoltre sottolineato che il modello E/R è sostenuto da alcuni concetti e regole che lo rendono preciso e rigoroso. Gli elementi di un modello Entità/Associazioni sono: le entità, le associazioni e gli attributi. Definizione. “L’entity set o insieme di entità (che è tradotto semplicemente – e un po’ impropriamente – con la parola entità), è un oggetto concreto o astratto, rilevante per il sistema informativo, che ha un significato anche quando viene considerato in modo isolato ed è di interesse per la realtà che si vuole modellare. Graficamente un entity set viene rappresentato con un rettangolo, contenente il nome all’interno”. Le entità possono essere classificate secondo un certo criterio di omogeneità, definendo il tipo di entità attraverso un nome. Per esempio, gli studenti di una scuola sono classificabili nel tipo entità Studente, i diversi modelli di automobile sono classificabili nel tipo entità Automobile. Sottolineiamo alla classe che, nel ragionamento fatto, ciascuno studente rappresenta un’istanza dell’entità studente. A titolo di esempio, consideriamo le tre entità seguenti: Studente Automobile Introduciamo ora un’altra nozione: quella di associazione. Individuo 6 Definizione. “L’associazione (in inglese relationship) è un legame che stabilisce un’interazione tra le entità”. L’associazione è identificata, in genere, mediante un verbo transitivo (oppure una perifrasi o locuzione equivalente). In alcuni libri di testo il verbo è scritto all’interno di un rombo, posto tra le due entità collegate; in altri, invece, il verbo viene riportato sopra oppure a fianco di un segmento che connette le due entità collegate. Persona Possiede Automobile Analizziamo un esempio di schema E/R molto “classico”. Esempio di schema E/R Lo schema E/R che si vuole analizzare si riferisce ad un problema importantissimo e ‘classico’: l’emissione degli ordini di acquisto dei clienti nei confronti di un’azienda. cliente redige ordine contiene articolo Osserviamo che ciascun ordine comprende una testata ed una o più righe; in ogni riga è referenziato un articolo, il cui codice è presente in una opportuna tabella degli articoli. Schematizziamo ora quanto analizzato. cliente redige testata ordine comprende riga ordine contiene articolo 7 3.2 Lezione 2 – La cardinalità delle associazioni Cerchiamo ora di comprendere quali differenze ci sono tra le tre situazioni di seguito rappresentate. Persona Possiede Carta d’indentità Persona Possiede Automobile Scuola Assume Insegnante Osserviamo che: • • • nel primo caso, ad una istanza dell’entità Persona corrisponde un’istanza dell’entità Carta d’identità e viceversa; nel secondo caso, ad una istanza dell’entità Persona possono corrispondere una o più istanze dell’entità Automobile, ma ad una istanza dell’entità Automobile corrisponde una sola istanza dell’entità Persona; nel terzo caso, ad una istanza dell’entità Scuola corrispondono più istanze dell’entità Insegnante e ad una istanza dell’entità Insegnante possono corrispondere più istanze dell’entità Scuola (ad esempio, all’istanza “I.T.I.S. Severi” dell’entità Scuola corrispondono circa oltre istanze dell’entità Insegnante, ad alcune istanze dell’entità Insegnante possono corrispondere anche tre istanze dell’entità Scuola. E’ ora possibile proporre la definizione seguente. “La molteplicità di un’associazione è il numero di possibili istanze di un’entità che viene messo in corrispondenza con un’istanza dell’altra entità che partecipa all’associazione. Il numero minimo e massimo di possibili istanze vengono rappresentati simbolicamente mediante una coppia di valori separati dai due punti: 1:1, 1:N, N:M. Esistono quindi un valore minimo (che in genere è 1) ed un valore massimo (che è 1, N oppure M). Il valore massimo definisce la cardinalità della partecipazione all’associazione. Esso assume, in genere, uno dei due valori 1 oppure N (M), per indicare una o molte partecipazioni all’associazione. La cardinalità può quindi essere ‘a uno’ oppure ‘a molti’ e pertanto le associazioni tra due entità si classificano nei tipi seguenti: 8 • • • associazione ‘uno a uno’ o biunivoca, indicata con 1:1 (è il caso del legame tra l’entità Persona e l’entità Carta d’identità); associazione ‘uno a molti’, indicata con 1:N (è il caso del legame tra l’entità Persona e l’entità Carta d’identità); associazione ‘molti a molti’, indicata con N:M (è il caso del legame tra l’entità Scuola e l’entità Insegnante). C’è anche la possibillità che un’associazione sia opzionale. Per comprendere questo concetto analizziamo, ad esempio, il legame esistente tra l’entità Persona e l’entità Patente di Guida. Una patente di guida APPARTIENE ad una persona, ma una persona PUO’ POSSEDERE una patente di guida (non è detto che ce l’abbia, la mia bisnonna – ad esempio – non l’ha mai conseguita!). Il legame è obbligatorio dal lato Persona, ma è opzionale dal lato Patente di Guida. Vediamo, di seguito, come si può rappresentare tale fatto. Persona Possiede Patente di Guida Consideriamo nuovamente le tre situazioni precedentemente analizzate. Scriviamo in ogni schema le cardinalità delle associazioni. Persona Persona Scuola 1 1 N Possiede Possiede Assume 1 N M Carta d’indentità Automobile Insegnante Continuiamo con l’analisi dello schema E/R relativo al problema dell’emissione degli ordini di acquisto che i clienti formulano nei confronti di un’azienda. Le cardinalità delle varie associazioni presenti in esso sono date dallo schema di seguito raffigurato: 9 cliente 1 redige N ordine M contiene M articolo Infatti, ogni cliente può redigere più ordini, ma un ordine può essere redatto da un solo cliente; ogni ordine può contenere più articoli, ed ogni articolo può essere contenuto in più ordini. Vediamo, di seguito, cosa accade alle cardinalità se l’ordine viene scomposto in testata e righe. cliente 1 redige N testata ordine 1 comprende N riga ordine N contiene 1 articolo Con queste prime due lezioni sono stati introdotti i concetti più importanti del modello relazionale. Nel corso della terza lezione saranno trattati i concetti di attributo e chiave primaria. 3.3 Lezione 3 – Attributi e chiavi primarie Riprendiamo quindi l’analisi di tre situazioni già viste la lezione precedente, delle quali vengono riproposti, di seguito, gli schemi già presentati. Persona 1 Possiede 1 Carta d’indentità 10 Persona Scuola 1 N Possiede Assume N M Automobile Insegnante Si può osservare che mancano del tutto le proprietà delle entità e delle associazioni. E’ possibile, a questo punti, introdurre la definizione di attributo. Definizione. “Si definiscono attributi le proprietà delle entità e delle associazioni”. Le caratteristiche di ogni attributo sono il formato (testo, numero intero, numero a virgola mobile, data/ora, ecc.), la dimensione (50, 100, ecc.) e l’opzionalità (cioè se si tratta di un dato obbligatorio oppure no). Gli attributi saranno rappresentati con dei pallini, collegati alla rispettiva entità mediante un arco o un segmento di retta. Vediamo ora qualche esempio di attributi di entità. Tipo di scuola Denominazione Indirizzo Scuola Cognome Nome Materia insegnata Insegnante Si può osservare che le caratteristiche dell’attributo ‘Tipo scuola’ devono prevedere che esso dovrà poter contenere dei testi (cioè stringhe di caratteri alfanumerici), con lunghezza opportuna (10 caratteri sono senz’altro troppo pochi; anche 20 caratteri sono troppo pochi; 30 caratteri forse bastano). 11 L’attributo ‘Denominazione’, invece, dovrà poter contenere dei testi (cioè stringhe di caratteri alfanumerici), con lunghezza opportuna: 100 caratteri dobrebbero bastare. Per esercizio, il lettore potrà individuare le caratteristiche degli altri attributi. Per quanto riguarda la necessità del concetto di “chiave primaria”, si può osservare che è necessario caratterizzare in modo univoco le singole istanze di un’entità, individuando uno o più attributi i cui valori consentano di reperire una ed una sola istanza di un’entità; informalmente, per “chiave primaria” si intende un sottoinsieme dei suoi attributi che identifica univocamente ogni istanza dell’entità stessa. In pratica, fissato il valore alla chiave primaria deve essere individuata, al massimo, una sola istanza dell’entità. Il motivo per cui è necessario individuare una chiave primaria può essere giustificato osservando la realtà. Consideriamo, ad esempio, gli articoli venduti in un supermercato: per motivi di praticità, deve essere possibile distinguere in modo esatto e senza ambiguità un qualsiasi tipo di articolo da tutti gli altri, quindi ad essi sono applicati i codici a barre; dato un codice a barre, esiste uno ed un solo tipo di articolo che lo possiede. Il problema dell’identificazione, però, non ce l’hanno solo i supermercati: guardando il retro di un qualsiasi libro di testo, si può osservare che anche in questo caso è stampato il codice a barre. Anche lo Stato usa questo tipo di tecnica. Pensiamo, ad esempio, l’entità CONTRIBUENTE: il codice fiscale identifica in modo certo e preciso il singolo contribuente in quanto, dato un certo codice fiscale, esiste uno ed un solo contribuente che lo possiede. Dopo questi ragionamenti, si può proporre la definizione di chiave primaria. Definizione. “Si indica con il termine chiave o chiave primaria (primary key) un insieme minimale di attributi che permettono di distinguere tra loro le istanze di una stessa entità”. Gli attributi si possono rappresentare con dei pallini vuoti, che recano a fianco il nome, collegati all’entità con segmenti di linea curva o segmenti di retta. La chiave primaria può invece essere rappresentata con pallini anneriti. Codice fiscale Cognome Nome Contribuente Codice articolo Denominazione Prezzo Articolo 12 Le relazioni (relation set) dello schema concettuale vengono rappresentate nello schema logico facendo uso delle cosiddette ‘chiavi esterne’. Una chiave esterna (foreign key) di una tabella è un insieme di attributi che corrispondono a quelli che costituiscono la chiave primaria di un’altra tabella, e stabiliscono quindi un riferimento tra le righe delle due tabelle. Ad esempio, nell’associazione esistente tra ‘testata ordine’ e ‘riga ordine’ precedentemente analizzata e studiata, ogni istanza dell’entità ‘riga ordine’ sarà associata alla corrispondente istanza dell’entità ‘testata ordine’, perché in essa sono presenti gli attributi che corrispondono alla chiave primaria di ‘testata ordine’. Supponiamo che la chiave primaria di ‘testata ordine’ sia composta dagli attributi ANNO e NUMERO ORDINE; anche ‘riga ordine’ avrà questi attributi, che però non corrisponderanno alla chiave primaria di ‘riga ordine’; per ogni istanza di quest’ultima entità questi due attributi conterranno dei valori che saranno uguali ai valori che questi attributi hanno nell’istanza corrispondente di ‘testata ordine’”. 3.4 Lezione 4 – Regole di derivazione e cenni sulla necessità della normalizzazione Lo scopo di questa lezione è comprendere quali sono le regole e le modalità con cui si può effettuare il passaggio dal modello concettuale al modello logico dei dati e fornire alcuni esempi di database. Per ottenere questo risultato, analizzeremo – in particolare – il contenuto di alcune tabelle di esempio. Dal modello concettuale dei dati, studiato nel corso delle lezione precedente, è possibile ottenere il cosiddetto modello logico dei dati, che ora andremo ad analizzare. Esso consente di definire la struttura degli archivi adatti a contenere e ad organizzare i dati. Nel modello logico le entità corrispondono a tabelle. Le tabelle si possono rappresentare per mezzo di matrici in cui ogni colonna, detta anche campo, corrisponde ad un attributo dell’entità ‘di partenza e ogni riga, detta anche record, corrisponde ad un’istanza della suddetta entità. Passiamo ora ad analizzare alcuni esempi. Consideriamo un’azienda: essa avrà – ovviamente – dei clienti e dei fornitori. Una tabella dei clienti, ad esempio, può contenere i seguenti campi che descrivono le caratteristiche di ciascun cliente: codice cliente; nome; cognome; indirizzo; città; CAP. Vediamo ora una possibile tabella dei clienti. 13 Ci si può chidere se qualcosa potrebbe essere migliorato nella tabella proiettata (per essere maggiormente precisi: ci sono dati in più?). Nota per il lettore esperto. E’ chiara, a questo punto, l’intenzione di far scoprire al lettore non esperto la necessità di normalizzare i dati; infatti le colonne denominate “città” e “CAP” possono contenere dati potenzialmente ripetuti. In questa lezione non verranno date le definizioni rigorose riguardanti la normalizzazione, ma è importante che il lettore non esperto inizi a porsi il problema. Cercando di ottimizzare le modalità di accesso ai database, ci si accorse ben presto che i database, se li strutturiamo in modo ‘naturale’, contengono talvolta molti dati inutilmente ripetuti. Dovendo archiviare gli ordini dei clienti, ad esempio, sarebbe necessario ripetere per ogni ordine i dati anagrafici dei clienti che hanno effettuato più di un ordine, come si può osservare vedere nella situazione che viene esposta di seguito. Se, in aggiunta, si desiderano memorizzare le fatture emesse dall’azienda, ecco che i dati anagrafici dei clienti debbono essere di nuovo ripetuti, con un evidente spreco di tempo degli operatori e di spazio sui dischi dei computer, ma soprattutto creando possibili anomalie a seguito di operazioni di aggiornamento e ciò a causa della ridondanza. 14 Pensiamo, ad esempio, al fatto che il nome ‘Mario’ ed il cognome ‘Rossi’ devono essere inseriti più volte. Può accadere ad un terminalista distratto di inserire per errore, qualche volta (magari a causa della fretta), il cognome o il nome in modo errato: ‘Marrio’, ‘Rosi’, ecc.; è chiaro che questo errore non sarebbe possibile se, anziché dover inserire ogni volta il nome ed il cognome per intero, fosse sufficiente scrivere il codice del cliente. Per ovviare a questo inconveniente, si cercò il modo di progettare delle strutture o database in grado di archiviare i dati in ‘contenitori’ differenti, in base alla loro natura: nel modello concettuale sono le entità, che nel modello logico divengono le tabelle; tali entità o tabelle dovranno essere poste in relazione tra loro, secondo le necessità. Nacquero così i cosiddetti RDBMS, acronimo che significa ‘Relational Data Base Management System’ (Sistemi per la Gestione di Database Relazionali)”. Analizziamo ora, di seguito, un’altra situazione importante. Nella figura precedente, si può osservare una cosa importante. Nelle varie tabelle ciascun record è contraddistinto da un campo contenente un identificatore univoco (un dato che compare una volta soltanto nell’intera tabella); questo identificatore viene utilizzato nelle altre tabelle, invece di ripetere per intero il record che lo contiene. 15 Se ad esempio, ogni cliente contenuto nella tabella anagrafica dei clienti viene identificato da un numero progressivo, detto ID Cliente (ID sta per IDentificatore), nella tabella degli ordini e in quella delle fatture emesse sarà sufficiente inserire questo numero invece di ripetere ogni volta tutti i dati anagrafici del cliente. Si può ora procedere al seguente: Ripasso del modello relazionale Il modello relazionale presuppone il riconoscimento dei tipi di legame, cioè la natura delle associazioni, che collegano le diverse entità del fenomeno che si intende rappresentare. Costruire un database relazionale significa quindi: • • • • • individuare i dati elementari; identificare le entità (che diverranno le tabelle); individuare, per ogni entità, la chiave; scoprirne le relazioni; creare un modello della realtà che faccia riferimento alle entità individuate ed alle loro relazioni. 16 Il modello relazionale garantisce espandibilità e flessibilità nella costruzione del modello e delle applicazioni che ne derivano; esso elimina la necessità di duplicare i dati; pensiamo, a titolo di esempio, al caso degli ordini (cliente, testata d’ordine, riga d’ordine, articolo): cerchiamo di analizzare e comprendere cosa accadrebbe se l’ordine non fosse scisso in testata e riga/righe e se l’articolo non fosse “codificato” per mezzo dell’entitò articolo, ad esso corrispondente.. Ripasso dei concetti di entità e tabella Le informazioni relative ad una entità vengono memorizzate in una struttura chiamata tabella. La tabella è organizzata in righe (dette anche “record”) e colonne (dette anche “campi”). Ogni campo identifica una proprietà dell’entità ed assume in ogni record un valore specifico appartenente al relativo dominio e soddisfacente eventuali vincoli di integrità; ogni riga identifica un elemento dell’insieme delle entità. In ogni riga viene registrata l’informazione relativa a una specifica entità. Ripasso della nozione di associazione Per costruire un modello relazionale bisogna poter associare, se due tabelle (entità) sono in relazione, ogni record di una tabella con il record corrispondente della tabella collegata. Ripasso delle associazioni “uno a uno” Ad ogni record di una tabella principale è associato al più un record della tabella relazionata. Per richiamarci ad un esempio analizzato, pensiamo al legame esistente tra l’entità ‘Persona’ e l’entità ‘Carta di Identità’. Ripasso delle associazioni “uno a molti” Ad ogni record di una tabella possono essere associati nessuno o molti record di una tabella collegata, ma ad ogni record di questa è associato sempre un’unico record di quella d’origine. In ogni record della tabella relazionata si deve inserire il riferimento al record corrispondente della tabella principale 17 Ripasso/approfondimento delle associazioni “molti a molti” Ogni record di una tabella può essere associato a molti record della tabella collegata, e viceversa. Nelle relazioni molti a molti bisogna creare una tabella intermedia, legata con una relazione “uno a molti” con entrambe le tabelle originarie. Vediamo, ad esempio, il legame esistente tra l’entità Dipendente e l’entità Filiale di un’azienda, che – considerato nella sua evoluzione temporale – è di tipo “molti a molti”, perché una persona, nel corso degli anni, può aver lavorato in filiali diverse e quindi può avere ricoperto diversi incarichi: Si giungerà alla situazione di seguito rappresentata. Dipendente 1 Possiede N Incarico M E’ svolto in 1 Filiale Le relazioni (relation set) dello schema concettuale vengono rappresentate nello schema logico facendo uso delle cosiddette ‘chiavi esterne’. Una chiave esterna (foreign key) di una tabella è un insieme di attributi che corrispondono a quelli che costituiscono la chiave primaria di un’altra tabella, e stabiliscono quindi un riferimento tra le righe delle due tabelle. 18 3.5 Lezione 5 – Consigli, normalizzazione “trucchi” e prime nozioni sulla Regole per una buona modellazione dei dati Per eseguire una buona modellazione dei dati, è consigliabile seguire le regole di seguito elencate. 1. Leggere più volte e attentamente il testo prima di decidere il modello dei dati. 2. L’ambito del problema non è un’entità (per esempio in un problema come il seguente: “In un Istituto scolastico si vogliono gestire con un database le informazioni sui docenti e gli studenti…” l’istituto non è un’entità) 3. Alcune regole che valgono (quasi) sempre: i sostantivi corrispondono alle entità, gli aggettivi e le proprietà corrispondono agli attributi, i verbi alle associazioni. 4. Leggere attentamente anche le richieste di output e il testo delle interrogazioni, per determinare correttamente e in modo completo gli attributi delle entità. 5. Gli attributi descrittivi che si ripeteranno con valori uguali per istanze diverse della stessa entità, per esigenze di normalizzazione, devono diventare entità (per esempio, Comuni, causali, tipologie, ecc.) legate da un’associazione 1:N con l’entità che devono descrivere. Esse saranno poi derivate in tabelle di decodifica (codice, descrizione). 6. Motivare, se necessario, le scelte fatte, spiegandone le ragioni ed evidenziando ipotesi aggiuntive e vincoli introdotti. 7. Nella scelta del tipo di associazioni, la cardinalità 1:1 è molto rara, talvolta (ma non sempre) si risolve con una sola entità con gli attributi opportuni; la cardinalità 1:N è la più frequente; la cardinalità N:M può esserci, oppure si può spezzare già nella fase di modellazione in due associazioni 1:N; in questo caso le due entità di partenza vanno vicino a 1 e l’entità “di legame” va vicino a N. In caso contrario, dal modello E/R con associazione N:N, la regola di derivazione crea tre tabelle: la terza tabella contiene la chiave della prima entità, la chiave della seconda e gli eventuali attributi dell’associazione. 8. Le entità di tipo “dinamico” (o movimenti) hanno sicuramente una data di registrazione; inoltre possono essere opportunamente caratterizzate da una chiave autoincrementale (ID di tipo contatore), numerico progressivo (numero di registrazione). Note sulle descrizioni dei dati 1. I campi che non vengono usati in calcoli sono di tipo testo (stringa); per esempio, telefono, partita IVA, CAP, pur essendo composti da cifre sono di tipo testo. 2. Per facilitare la comprensione a se stessi e al docente, si possono esplicitare alcuni dati di esempio per ciascuna delle tabelle. 19 Primi cenni sulla normalizzazione Come accennato due lezioni fa, se la definizione dello schema della base di dati non è fatto ad hoc, può succedere che si abbiano delle anomalie nel database, quali, per esempio, la ripetizione delle informazioni con spreco di tempo (per l’inserimento dei dati) e di spazio (memoria) ed il rischio di errori/inconsistenza. La teoria della normalizzazione ha come scopo quello di fornire metodi per progettare basi di dati senza anomalie. In pratica la normalizzazione consente di verificare se la definizione dello schema corrisponde a dei “canoni standard” di correttezza della base di dati. Dopo aver definito lo schema, si devono seguire alcune regole per rendere le tabelle in quelle che sono chiamate le forme normali, cioè per fare in modo che lo schema corrisponda a dei “canoni standard”. La teoria della normalizzazione è un argomento ampio, complesso e la sua trattazione esula dagli scopi della presente dispensa introduttiva.