SCUOLA INTERUNIVERSITARIA SICILIANA DI SPECIALIZZAZIONE PER L’INSEGNAMENTO SECONDARIO Classe di Concorso: 42A Michele Brischetto Unità didattica 3: Normalizzazione delle relazioni e Gestione dei database Docente: Prof. Cantone Prerequisiti Gli studenti devono conoscere: 1. Nozioni associazione di entità, attributo, chiave, 2. Il modello E/R e le regole di derivazione del modello logico Competenze 1. Definire relazioni normalizzate a partire da relazioni non in forma normale 2. Applicare le regole di integrità referenziale 3. Sapere cosa è un software di gestione di database (DBMS) 4. Conoscere le caratteristiche principali di un DBMS Contenuti 1. Cosa è la normalizzazione 2. Le varie forme normali 3. L’integrità referenziale 4. Cosa è, e cosa fa un DBMS 5. I linguaggi per database Metodologie Lezione frontale Lezione dialogata “Brainstorming” Spazi Aula Laboratorio Strumenti Libro di testo e dispense Computer Proiettore Verifiche Periodiche e costanti, tese sia alla valutazione globale del percorso formativo che ad una sua parte. Vengono usate le seguenti tipologie: Colloqui individuali Interventi di vario genere Questionari e Test Prove in laboratorio Valutazione La valutazione sarà di due tipi: Di tipo formativo (in relazione all’applicazione, all’impegno, all’attenzione, al metodo di lavoro dimostrato da ogni studente durante l’attività didattica, e alla capacità di lavorare assieme agli altri) Di tipo sommativo (ricavata dalla misurazione delle varie prove), in cui gli studenti dovranno dimostrare di: avere acquisito conoscenze e informazioni circa i contenuti avere maturato abilità e competenze specifiche alla disciplina Tempi Lezione in aula Laboratorio Verifica Recupero e/o Potenziamento 12 ore 8 ore 4 ore 6 ore La normalizzazione Obiettivi della normalizzazione: evitare la ripetizione e la ridondanza dei dati, durante la fase di definizione della struttura di una tabella, al fine di evitare futuri problemi nelle successive fasi di trattamento della tabella stessa, tramite operazioni di modifica o cancellazione di record in essa contenuti. In pratica: Si tratta di un insieme di operazioni, tramite le quali, a partire da una data tabella (non normalizzata), vengono create nuove tabelle, seguendo opportune regole, che trasformano la tabella originaria, in altre tabelle. In ogni caso deve essere garantito che la trasformazione di una tabella in altre tabelle di forma normale superiore non provochi la perdita di informazioni. Concetti chiave: • chiave o chiave primaria : è un insieme di uno o più attributi che identificano in modo univoco un record della tabella. • Chiave candidata : è un in insieme di uno o più attributi che possono svolgere la funzione di chiave (ci possono essere diverse chiavi candidate, ma una sola chiave primaria). • Attributo non chiave : è un campo della tabella che non fa parte della chiave primaria. • Dipendenza funzionale : indica il fatto che il valore di un attributo A1 determina il valore di un altro attributo A2, e si indica con A1 A2 (A1è un determinante per A2) • Dipendenza transitiva : si ha quando un attributo A2 dipende da un attributo A1, e l’attributo A3 dipende da A2, cioè: se A1 A2 e A2 A3 allora A1 A3 in modo transitivo. Prima forma normale Una tabella è in 1FN se rispetta i requisiti fondamentali del modello relazionale cioè: • Tutte le righe della tabella contengono lo stesso numero di colonne • Gli attributi rappresentano informazioni elementari • I valori che compaiono in una colonna sono dello stesso tipo, cioè appartengono allo stesso dominio • Non ci devono essere due righe con gli stessi valori nelle colonne Esempio di entità non normalizzata Dipendenti Matricola Nome Indirizzo Familiari a carico L’attributo Familiari a carico non è elementare in quanto è costituito da un gruppo di attributi ripetuti dello stesso tipo (i nomi dei familiari dell’ i- esimo dipendente). Tabelle normalizzate in 1FN Soluzione: la tabella precedente viene scissa nella seguenti due tabelle Dipendenti Matricola Nome Familiari Indirizzo CodiceFam NomeFam MatricolaDip Vantaggi: * Abbiamo 2 elementi distinti che rappresentano meglio la realtà. Inoltre è più facile aggiungere nuovi attributi. * Risultano semplificate le operazioni di inserimento, cancellazione e modifica. Seconda forma normale Una tabella è in 2FN quando è in 1FN e tutti i suoi attributi non chiave dipendono unicamente dall’ intera chiave, cioè non possiede attributi che dipendono soltanto da una parte della chiave. La seconda forma normale elimina la dipendenza parziale degli attributi dalla chiave e riguarda il caso di tabelle con chiavi composte, cioè formate da più attributi. Es: si abbia un inventario di merci, le quali si trovano in alcuni magazzini dislocati in località diverse. Le informazioni essenziali possono essere rappresentate con la seguente tabella: Merci Codice Magazzino Quantità LocalitàMagazzino Osservazioni: • la chiave è composta, in quanto il solo codice non basta per identificare la merce, la quale può essere presente in magazzini diversi. • l’indirizzo del magazzino riguarda solo l’attributo Magazzino, quindi l’attributo “LocalitàMagazzino” dipende solo da una parte della chiave. La tabella non è quindi in 2FN La tabella vista prima non è in seconda forma normale e ciò può provocare problemi di questo genere: La località del magazzino è ripetuta per tutte le righe della tabella che si riferiscono a prodotti presenti in quel magazzino; se la località del magazzino cambia, ogni riga contenente merci presenti in quel magazzino dovrà essere aggiornata; La ridondanza può provocare l'inconsistenza delle informazioni perche la località potrebbe essere scritta in modo differente in righe diverse per lo stesso magazzino, oppure perché potrebbe accadere che alcuni record vengano aggiornati ed altri no; Se in un certo periodo non ci fossero merci presenti in un magazzino, non avremmo alcuna informazione sulla località del magazzino. La cancellazione di righe potrebbe quindi determinare una perdita complessiva di informazioni nella base di dati. Risoluzione del problema: La soluzione consiste nel costruire nuove tabelle, a partire dalla tabella non normalizzata, togliendo dalla tabella di partenza gli attributi che dipendono solo parzialmente dalla chiave primaria. Es: nel caso precedente otterremo: Merci Codice Depositi Magazzino Quantità Magazzino Queste due tabelle sono in 2FN LocalitàMagazzino Formalizzazione del passaggio in 2FN Data la tabella R1 (A1,A2,A3,A4,A5) in cui (A1,A2) A3 , A1 A4, A2 A5 essa non è in 2FN. ma può essere trasformata nelle seguenti tabelle in 2FN: R21(A1,A2,A3) R22(A1,A4) R23(A2,A5) Osservazioni: Il processo di normalizzazione diminuisce la ridondanza dei dati e la possibilità di inconsistenze, ma rende più complesse le operazioni di ritrovamento dei dati. Es: supponiamo di volere conoscere la località del magazzino dove è presente una merce di cui si conosce il codice. Nella tabella non normalizzata basterà esaminare solo le sue righe, mentre nella tabella in seconda forma normale occorre congiungere le righe delle due tabelle ottenute dal processo di normalizzazione, secondo l'attributo comune Magazzino. La normalizzazione quindi è importante nel modello di un database perché l'integrità e la consistenza dei dati sono prioritarie rispetto alla velocità di ritrovamento dei dati, che rimane comunque un fattore essenziale. Terza forma normale Una relazione è in terza forma normale (3FN) quando è in seconda forma normale e tutti gli attributi non-chiave dipendono direttamente dalla chiave, cioè non possiede attributi non-chiave che dipendono da altri attributi non-chiave. La terza forma normale elimina quindi la dipendenza transitiva degli attributi dalla chiave. Es: si consideri la gestione anagrafica di un'associazione di studenti di scuole diverse. Le informazioni più importanti siano rappresentate con la seguente tabella: Studenti Nome Scuola TelefonoScuola Osservazioni: Il nome è l'attributo chiave, e il telefono della scuola, pur essendo un’informazione che riguarda lo studente, dipende però dalla scuola cui lo studente è iscritto. Nella tabella è quindi presente un attributo non-chiave (TelefonoScuola) che dipende da un altro attributo non-chiave (Scuola). La tabella non è in terza forma normale in quanto l'attributo TelefonoScuola dipende solo transitivamente dalla chiave (Nome). Possibili anomalie il telefono di una scuola sarà ripetuto per ogni studente appartenente a quella scuola; se il telefono di una scuola cambia, occorrerà modificare tutte le righe contenenti studenti di quella scuola; la ridondanza può provocare inconsistenza, in quanto ci potrebbero essere numeri di telefono differenti, in righe diverse, per la stessa scuola, nel caso in cui questi siano stati scritti in modo diverso, oppure l'aggiornamento non sia stato fatto su tutte le righe; se una scuola non ha nessuno studente appartenente all'associazione, oppure gli studenti iscritti di una scuola escono tutti dall'associazione, non potremmo avere alcuna informazione sul telefono della scuola, con una conseguente perdita di informazioni. Risoluzione del problema: La normalizzazione in 3FN si ottiene scomponendo la tabella di partenza in nuove tabelle, nelle quali tutti gli attributi dipendono unicamente e direttamente dalla chiave, togliendo gli attributi non-chiave che dipendono da un altro attributo non-chiave. Es: nel caso precedente otterremo: Studenti Nome Istituti Scuola Scuola Queste due tabelle sono in 3FN TelefonoScuola Formalizzazione del passaggio in 3FN Data la tabella R1 (A1,A2,A3,A4) in cui: A1 A2 e A2 A4 essa non è in 3FN. ma può essere trasformata nelle seguenti tabelle in 3FN: R21(A1,A2,A3) R22(A2,A4) Osservazioni : anche qui la tabella iniziale è stata scomposta in più tabelle che, complessivamente, forniscono le stesse informazioni di partenza e mantengono le dipendenze tra gli attributi, ma in maniera che, in ciascuna di esse, ogni attributo dipenda direttamente dalla chiave. Vengono così evitati problemi di ridondanza e di inconsistenza dei dati. Nella scomposizione non si dovrà però avere perdita di informazioni. I dati possono poi essere ritrovati attraverso operazioni di congiunzione tra le tabelle tramite gli attributi comuni. Forma normale di Boyce-Codd Una tabella è in forma normale di Boyce-Codd (BCNF) quando è in seconda forma normale e in essa, ogni attributo dal quale dipendono altri attributi può svolgere la funzione di chiave. Es1: si prenda in considerazione la gestione degli esami specialistici svolti in una clinica e si supponga che nella clinica più specialisti possano svolgere lo stesso tipo di esame. Gli esami siano identificati attraverso un Codice Esame che è diverso per ogni specialista, in modo da distinguere tra loro i medici specialisti che svolgono lo stesso tipo di esame. Le informazioni essenziali sono rappresentate nella seguente tabella: Esami CodiceEsame Descrizione MedicoSpecialista Osservazioni Codice Esame è un determinante per Descrizione e per MedicoSpecialista; Descrizione è però anche un determinante per MedicoSpecialista, infatti ad una Descrizione possiamo associare il medico che effettua quel tipo di esame, ma non è una chiave candidata. Infatti consideriamo le seguenti tabelle: Esami CodiceEsame Medici Descrizione Descrizione MedicoSpecialista Nella seconda tabella potremmo avere più righe con lo stesso valore per l'attributo Descrizione che non può quindi diventare chiave. Con ciò possiamo concludere dicendo che la tabella di partenza è in terza forma normale, ma non è in forma normale di Boyce-Codd. Esempio di tabella in forma normale di Boyce-Codd: si consideri la tabella che descrive il prezzo degli esami svolti nella clinica: Pagamenti CodiceEsame Descrizione Ticket CodiceEsame è determinante per Descrizione e Ticket; Descrizione è determinante per Ticket. Descrizione inoltre è una chiave candidata: infatti ad una stessa descrizione corrisponde lo stesso ticket. La relazione è in forma normale di Boyce-Codd e si possono ottenere due nuove relazioni: Esami CodiceEsame Descrizione Pagamenti Descrizione Ticket Stavolta nella seconda tabella Descrizione è un campo chiave ed elimina problemi in fase di aggiornamento: quando varia il valore del ticket di un esame basta modificare una sola riga nella tabella Pagamenti, anziché molte righe nella tabelle originaria. L’esempio presentato dimostra che una relazione in forma normale di Boyce-Codd è anche in terza forma normale, ma non è vero il viceversa. L’integrità referenziale Nella definizione dei concetti fondamentali del modello relazionale, oltre alla regola di “integrità sull'entità”, che non consente valori nulli per la chiave, esiste una seconda regola di integrità, detta di “integrità referenziale”. L’integrità referenziale è un insieme di regole del modello relazionale che garantiscono l'integrità dei dati quando si hanno relazioni associate tra loro attraverso la chiave esterna: queste regole servono per rendere valide le associazioni tra le tabelle e per eliminare gli errori di inserimento, cancellazione o modifica di dati collegati tra loro. L’integrità referenziale viene rispettata quando per ogni valore non nullo della chiave esterna, esiste un valore corrispondente della chiave primaria nella tabella associata. Es: si consideri un database relazionale che contiene una tabella dei clienti e una tabella degli ordini, in cui il codice del cliente della tabella Ordini è associato alla chiave della tabella Clienti: Clienti Codice Ordini Nome Indirizzo NumOrdine Data CodCliente Applicare l'integrità referenziale al database significa garantire che un valore presente nella tabella Ordini per la chiave esterna CodCliente abbia un corrispondente valoredi Codice in una delle righe della tabella Clienti. Inoltre non si deve consentire la cancellazione di un cliente dalla tabella Clienti se ci sono righe nella tabella Ordini che siriferiscono ad esso. Formulazione generale del concetto di integrità referenziale In generale data una tabella R1 avente come chiave l'attributo Kl e una tabella R2 avente come chiave esterna KE2 associata a Kl, le regole dell'integrità referenziale impongono che ogni valore di KE2 deve avere un valore uguale di Kl in una delle righe della tabella Rl, oppure il valore di KE2 deve essere nullo. K1 A1 A2 A3 K2 B1 B2 B3 KE2 Quando viene applicata l'integrità referenziale, è necessario osservare le seguenti regole pratiche: non è possibile immettere un valore nella chiave esterna della tabella associata, se tale valore non esiste tra le chiavi della tabella primaria. È possibile, comunque, immettere un valore nullo nella chiave esterna, per rappresentare il fatto che le righe non sono correlate. Per esempio un ordine non può essere assegnato ad un cliente che non esiste nella tabella Clienti. non è possibile eliminare una riga dalla tabella primaria, se esistono righe legate ad essa attraverso la chiave esterna nella tabella correlata. Per esempio non è possibile eliminare un cliente dalla tabella Clienti se ci sono ordini assegnati a quel cliente nella tabella Ordini. inoltre non si può modificare, come è ovvio, il valore alla chiave nella tabella primaria, se ad essa corrispondono righe nella tabella correlata. Per esempio non è possibile modificare il valore alla chiave di un cliente se ci sono ordini per quel cliente già registrati nella tabella Ordini. Osservazioni sul modello relazionale I/II Il modello relazionale risulta essere più intuitivo e più espressivo per la strutturazione dei dati, rispetto ai modelli gerarchico e reticolare. La teoria dei database relazionali è costruita a partire da sicuri fondamenti matematici e utilizza un linguaggio rigoroso: questo consente di sviluppare definizioni, teoremi e dimostrazioni. Dal punto di vista informatico presenta una grande semplicità nell'uso e nell’ implementazione, anche se è relativamente più lento nella ricerca e occupa più spazio su memoria di massa rispetto ai database creati e gestiti da DBMS basati sugli altri modelli. Il trattamento dei dati avviene per gruppi di record, anziché per singoli record, come avviene nelle organizzazioni convenzionali degli archivi. Il ritrovamento delle informazioni viene realizzato operando sulle righe e sulle colonne delle tabelle, con gli operatori di selezione, proiezione e congiunzione. Le operazioni sulle tabelle producono nuove tabelle, alle quali si possono ulteriormente applicare gli operatori. Non è necessario specificare la sequenza del percorso che deve essere seguito per accedere ai dati contenuti nel database, mentre i modelli gerarchico e reticolare sono strettamente condizionati dal tipo di cammino insito nella struttura dei dati. Osservazioni sul modello relazionale II/II L'ordine con il quale le righe compaiono nella tabella è ininfluente. Il modello relazionale ha portato poi benefici nel lavoro di progettazione dei database: il progettista di un database può infatti costruire il modello dei dati considerando con attenzione le entità, le associazioni e le dipendenze tra gli attributi nel modello della realtà. Il passaggio dal modello concettuale al modello logico può essere realizzato con semplici regole. Occorre cercare un livello equilibrato di normalizzazione, per evitare di appesantire la fase di ritrovamento dei dati con un numero eccessivo di operazioni di congiunzione tra le tabelle. La gestione del database I/III Il DBMS (Database Management System) è il software che consente di costruire e gestire una base di dati, a partire da un progetto e da uno schema dei dati definiti a livello concettuale e tradotto poi in un modello logico dei dati. Il DBMS costituisce quindi un'interfaccia tra gli utenti di un database con le loro applicazioni e le risorse costituite dall'hardware e dagli archivi di dati presenti in un sistema di elaborazione.Le sue funzioni principali sono: Implementazione del modello logico sul sistema di elaborazione, cioè: 1: la definizione dei dati e delle strutture dati derivate dallo schema logico (tipicamente le tabelle del modello relazionale). con produzione della documentazione sul modello; 2: definizione dei sottoschemi (viste), cioè visioni del database legate alle particolari applicazioni dei singoli utenti e che consentono agli utenti di accedere ai dati che servono, ottenute attraverso proiezioni o congiunzioni; Le viste sono finestre dinamiche sulle tabelle del database, in quanto ogni modifica ai dati sulla tabella primaria si riflette sulla vista e viceversa; ) 3: organizzazione fisica dei dati sui supporti di memorizzazione, utilizzando le tecniche che ottimizzano l'occupazione della memoria di massa e i tempi di accesso alle registrazioni. La gestione del database II/III Manipolazione e interrogazione sulla base di dati, cioè: 1: inserimento dei dati nel database e trattamento dei dati già registrati con operazioni di modifica o cancellazione; 2: interfaccia tra i programmi degli utenti (scritti con i tradizionali linguaggi di programmazione) e la base di dati, utilizzando le funzionalità del DBMS per migliorare l'organizzazione dei dati e le prestazioni dei programmi nelle operazioni di ritrovamento dei dati; 3: accesso ai dati contenuti nel database per le interrogazioni, attraverso interfacce o comandi semplici che facilitano soprattutto l'utente finale non specialista. Controllo dell'integrità dei dati: 1: integrità sulle entità; 2: integrità referenziale: 3: integrità definite dall'utente. cioè vincoli che sono specifici per un particolare database, come conseguenza di politiche commerciali dell'azienda oppure di norne legislative e fiscali. La gestione del database III/III Sicurezza e protezione: 1: garanzia di sicurezza dei dati contro i danni causati da malfunzionamenti di componenti hardware o software o da interventi dolosi; 2: protezione dei dati da eventuali danneggiamenti per garantire l'integrità dei dati, offrendo anche la possibilità di attivare procedure di recovery in caso di perdita dei dati; 3: autorizzazione degli utenti che accedono alla base di dati e protezione dei dati dagli accessi non autorizzati; 4: controllo degli accessi in modo concorrente al database da parte di più utenti. Inoltre il DBMS si occupa della gestione del dizionario contenente le informazioni su: • nomi delle tabelle e delle colonne. • associazioni • viste. • vincoli di integrità. • utenti e proprietari. • autorizzazioni degli accessi. Il dizionario contiene quindi i metadati, cioè i dati che descrivono i dati organizzati nel database. I linguaggi per database I/III Le funzionalità del DBMS vengono attivate dall'utente usando appositi comandi, che costituiscono a tutti gli effetti un linguaggio attraverso il quale l'utente può comunicare con il sistema di elaborazione che gestisce il database. I comandi che il DBMS mette a disposizione possono essere classificati nelle seguenti categorie di linguaggi: linguaggio per la descrizione dei dati, delle tabelle e delle viste, detto DDL (Data Definition Language). linguaggio detto DMCL (Device Media Control Language), cioè il linguaggio di controllo dei supporti di memorizzazione dei dati. linguaggio per il trattamento (o manipolazione) dei dati contenuti nel database. detto DML (Data Manipulation Language), che consente le usuali operazioni di accesso per inserimenti. modifiche o cancellazioni. linguaggio per fissare i vincoli di integrità, per stabilire le autorizzazioni agli accessi e i tipi di permessi consentiti agli utenti (inserimento di nuovi dati. sola lettura, modifica dei dati). detto DCL (Data Control Language). linguaggio per le interrogazioni alla base di dati, detto Query Language, che consente il ritrovamento dei dati che interessano, sulla base dei criteri di ricerca richiesti dall'utente I linguaggi per database II/III La diffusione del modello relazionale ha poi favorito l'uso prevalente di linguaggi non procedurali: in questo modo l'utente non ha la necessità di conoscere ne le modalità con le quali le informazioni sono state fisicamente registrate, ne i cammini per ritrovare le informazioni contenute nella base di dati. Le informazioni vengono ritrovate effettuando interrogazioni e controllando il valore di verità di determinate condizioni, senza indicare le operazioni necessarie per arrivare alle informazioni richieste. Si parla allora di linguaggio per basi di dati, intendendo un insieme completo di comandi che consente e facilita le operazioni di definizione del database, di manipolazione dei dati, e di interrogazione da parte degli utenti: vengono cioè unificate in un unico linguaggio le funzioni dei linguaggi DDL, DMCL, DML, DCL e Query Language I linguaggi per database relazionali si basano sulla visione tabellare dei dati, che facilita l'utente in quanto non contiene nessuna informazione sul percorso per l'accesso fisico ai dati. I linguaggi per database III/III La formulazione delle richieste di dati viene quindi semplificata, perche l'utente viene liberato dagli aspetti riguardanti la navigazione all'interno della base di dati. I comandi del linguaggio relazionale operano inoltre su gruppi di righe o sull'intera tabella, anziché su una riga per volta: con una sola richiesta possono essere trattati o ritrovati molti record e non solo un record per volta, come avviene con i tradizionali linguaggi di programmazione. Esempi di DBMS : Access, Oracle, DB2, ecc… Gli utenti I/II Un database viene utilizzato da persone diverse, per funzioni e per applicazioni diverse: L'Amministratore della Base di Dati (DBA, Database Administrator), con i seguenti compiti: 1. Implementazione del modello logico del database nel sistema di elaborazione sui supporti fisici delle memorie di massa; 2. Gestione e trattamento dei dati (controllo di inserimenti, modifiche, cancellazioni); 3. Autorizzazione degli accessi; 4. Definizione delle viste per accessi parziali di utenti alla base di dati; 5. Controllo dei programmi applicativi che richiedono l'uso del database; 6. Manutenzione del database nel tempo, in termini di efficienza e di ottimizzazione delle risorse; 7. Controllo sugli interventi di recupero, nel caso di cattivi funzionamenti, e sulle copie di salvataggio periodiche; 8. Controllo della disponibilità degli spazi su memoria di massa. Gli utenti II/II I programmatori, che intendono utilizzare per le loro applicazioni i dati organizzati in un database, utilizzano un linguaggio DML, oppure comandi che sono un'estensione dei tradizionali linguaggi di programmazione, oppure un linguaggio specifico per basi di dati. Gli utenti finali possono accedere alla base di dati attraverso i comandi di un linguaggio di interrogazione (query language), oppure, per utenti finali ancora meno esperti,attraverso interfacce software che presentano sul video un menù o icone. Fine