Basi di Dati Progettazione e
Forme Normaliversione 2.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
Basi di Dati Progettazione e
Forme Normali
versione 2.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
Sommario
Progettazione e Forme Normali >> Sommario Introduzione
Una Tabella non in Forma Normale
Forma Normale di Boyce-Codd
Dipendenza Funzionale
Definizione Formale
Tecniche per la Verifica di Qualità
Introduzione
Progettazione e Forme Normali >> Introduzione Idealmente
se lo schema concettuale è di qualità (corretto, completo e non ridondante)
se la progettazione logica è condotta applicando correttamente l’algoritmo
la base di dati risultante dovrebbe essere di qualità
in particolare: dovrebbe essere in forma “normale”
Introduzione
Progettazione e Forme Normali >> Introduzione In realtà
è possibile commettere errori nella fase di analisi e in quella di progettazione logica
è necessario effettuare verifiche di qualità continue, per accertarsi che il risultato sia corretto
E’ necessario quindi
approfondire il concetto di forma normale
Introduzione
Progettazione e Forme Normali >> Introduzione Intuitivamente
una base di dati è in forma normale se i concetti sono opportunamente rappresentati nelle tabelle
non ci sono ridondanze
non si producono anomalie di aggiornamento, di inserimento e di cancellazione
Una Tabella Non in Forma Normale
Progettazione e Forme Normali >> Introduzione F. Totti 21 Programmazione 1 Bruno Pasquale A. Del Piero 27 Tecnologie Web 1 Pinco Palla 25 30 24 27 voto Basi di Dati Basi di Dati Programmazione Programmazione corso C. Vieri 2 Rossi Paolo C. Vieri 1 Bruno Pasquale F. Totti 2 Pinco Pietro F. Totti 1 Pinco Palla docente annoCorso studente PK corso CHAR(20) docente VARCHAR(20) voto INTEGER annoCorso INTEGER studente CHAR(20) StudentiCorsiEsami PK T
Una Tabella Non in Forma Normale
Progettazione e Forme Normali >> Introduzione <> corso <> studente docente voto annoCorso StudentiCorsiEsami Ogni studente è identificato dal suo nome
ed è iscritto ad un anno di corso.
Ogni corso è identificato dal suo nome
ed ha un docente.
Gli studenti sostengono esami per i corsi,
riportando voti tra 18 e 30. Ogni studente
deve sostenere più esami. La specifica Lo Schema
Concettuale Da dove nascono i problemi
errori in fase di modello concettuale
Una Tabella Non in Forma Normale
Progettazione e Forme Normali >> Intoduzione annoCorso <> nome Studente <> nome docente Corso sostiene esame di > 0..* 0..* voto Uno schema più corretto
Una Tabella Non in Forma Normale
Progettazione e Forme Normali >> Introduzione 2 Rossi Paolo 1 Bruno Pasquale 2 Pinco Pietro 1 Pinco Palla annoCorso nome A. Del Piero Tecnologie Web C. Vieri Basi di Dati F. Totti Programmazione docente nome 21 Programmazione Bruno Pasquale 27 Tecnologie Web Pinco Palla 25 30 24 27 voto Basi di Dati Basi di Dati Programmazione Programmazione esame Rossi Paolo Bruno Pasquale Pinco Pietro Pinco Palla studente PK, FK corso CHAR(20) voto INTEGER studente CHAR(20) Esami PK, FK T PK nome CHAR(20) docente VARCHAR(20) Corso T annoCorso INTEGER nome CHAR(20) Studente PK T La base di dati risultante
Una Tabella Non in Forma Normale
Progettazione e Forme Normali >> Introduzione Intuitivamente
l’errore nasce dalla scelta del modello concettuale
una classe che descrive più di un concetto
in generale, invece, ogni classe dovrebbe descrivere un unico concetto
Attenzione
l’errore potrebbe non essere percepibile guardando il modello concettuale
Una Tabella Non in Forma Normale
Progettazione e Forme Normali >> Introduzione Per evitare questi problemi
è necessario effettuare verifiche ripetute sui risultati della progettazione logica
ed, in caso di errori, correggere lo schema concettuale
Oggetto delle verifiche
che le tabelle prodotte rispettino una “forma normale”
Forma Normale
Progettazione e Forme Normali >> Forma Normale Vincolo sulla struttura di una base di dati
garantisce che non si generano anomalie
Discuteremo la F. N. di Boyce-Codd
è quella più forte
normalmente ottenibile (tranne casi strani)
Terza Forma Normale
è più debole di quella di Boyce-Codd
è sempre ottenibile (ma non ne parleremo)
Forma Normale
Progettazione e Forme Normali >> Forma Normale Forma Normale di Boyce-Codd (FNBC)
vincolo sull’organizzazione delle tabelle della base di dati
una tabella che rispetta il vincolo si dice “normalizzata”
altrimenti si dice “non normalizzata”
Approccio
daremo prima l’intuizione, poi la formalizzazione
Forma Normale
Progettazione e Forme Normali >> Forma Normale Intuizione
R si dice in FNBC se non esiste nessuna “sottotabella” con una “chiave propria”
Sottotabella
qualsiasi proiezione di R
Sottotabella con chiave propria
proiezione per cui è possibile trovare una chiave primaria non banale che non è chiave per R
Forma Normale
Progettazione e Forme Normali >> Forma Normale Studenti =
p studente, annoCorso (StudentiCorsiEsami) annoCorso INTEGER studente CHAR(20) Studenti T la specifica mi dice che “studente”
è una chiave per la tabella PK corso CHAR(20) docente VARCHAR(20) voto INTEGER annoCorso INTEGER studente CHAR(20) StudentiCorsiEsami PK T Nel nostro esempio:
esistono varie sottotabelle con chiavi proprie
Forma Normale
Progettazione e Forme Normali >> Forma Normale Corsi =
p corso, docente (StudentiEsamiCorsi) docente VARCHAR(20) corso CHAR(20) Corsi T la specifica mi dice che “corso”
è una chiave per la tabella PK corso CHAR(20) docente VARCHAR(20) voto INTEGER annoCorso INTEGER studente CHAR(20) StudentiCorsiEsami PK T In modo simile:
Forma Normale
Progettazione e Forme Normali >> Forma Normale PK corso CHAR(20) voto INTEGER studente CHAR(20) Esami PK T Esempio =
p studente, voto (Esami) voto INTEGER studente CHAR(20) Esempio T NON ci sono
chiavi proprie Viceversa, in questa tabella
non esistono sottotabelle con chiavi proprie
Forma Normale
Progettazione e Forme Normali >> Forma Normale voto INTEGER studente CHAR(20) Esempio T lo stesso discorso vale per tutte
le altre possibili proiezioni 21 Bruno Pasquale 27 Pinco Palla 25 30 24 27 voto Rossi Paolo Bruno Pasquale Pinco Pietro Pinco Palla studente Infatti, guardando l’istanza
non esiste nessuna chiave (vedi specifica)
Forma Normale
Progettazione e Forme Normali >> Forma Normale tipo CHAR(10) qualifica CHAR(15) facolta CHAR(10) nome CHAR(20) cognome CHAR(20) codice CHAR(4) Docente PK T PK numero CHAR(15) tipo CHAR(10) qualifica CHAR(15) facolta CHAR(10) nome CHAR(20) cognome CHAR(20) codice CHAR(4) DocenteNumero T Es = p codice, cognome (DocenteNumero) questa tabella è normalizzata questa tabella non è normalizzata “codice” è una chiave propria Un altro esempio
Forma Normale
Progettazione e Forme Normali >> Forma Normale Per formalizzare
abbiamo bisogno di una nozione ulteriore
Concetto di Dipendenza Funzionale
vincolo di integrità aggiuntivo sulle tabelle
è una generalizzazione del vincolo di chiave
In sostanza
serve a dire che valori uguali di un attributo in una tabella implicano valori uguali di altri attributi
Comments