Che cosa di database forme normali e si può dare esempi? [chiuso]
-
05-09-2019 - |
Domanda
Nella progettazione di database relazionali, c'è un concetto di normalizzazione dei database o semplicemente la normalizzazione, che è un processo di organizzazione colonne (attributi) e tabelle (relazioni) per ridurre la ridondanza dei dati e migliorare l'integrità dei dati. (Come scritto sulla Wikipedia ).
Come la maggior parte articoli sono un po 'tecnico e quindi più difficile da capire, sto chiedendo a qualcuno di scrivere un più facile da capire spiegazione sulla base di esempi su ciò che 1NF, 2NF, 3NF, anche 3.5NF (Boyce-Codd) significa.
Soluzione
1NF è il più fondamentale di forme normali -. Ogni cella di una tabella deve contenere solo un pezzo di informazioni, e non ci può essere nessun righe duplicate
2NF e 3NF sono tutti di essere dipendente dalla chiave primaria. Ricordiamo che una chiave primaria può essere costituito da più colonne. Come ha detto Chris nella sua risposta:
I dati dipende dal tasto [1NF], tutto il tasto [2NF] e nient'altro che il tasto [3NF] (così mi Codd ).
2NF
Diciamo che avere una tabella che contiene i corsi che vengono prese in un determinato semestre, e si ha i seguenti dati:
|-----Primary Key----| uh oh |
V
CourseID | SemesterID | #Places | Course Name |
------------------------------------------------|
IT101 | 2009-1 | 100 | Programming |
IT101 | 2009-2 | 100 | Programming |
IT102 | 2009-1 | 200 | Databases |
IT102 | 2010-1 | 150 | Databases |
IT103 | 2009-2 | 120 | Web Design |
Questa è non in 2NF , in quanto la quarta colonna non si basa sulla intero chiave - ma solo una parte di esso. Il nome del corso dipende l'ID del corso, ma non ha nulla a che fare con le quali semestre è preso in questo modo, come potete vedere, abbiamo le informazioni duplicate -. Più righe che ci dice che IT101 è la programmazione, e IT102 è Database. Quindi si fissa che spostando il nome del corso in un'altra tabella, dove CourseID è la chiave INTERO.
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
No ridondanza!
3NF
Ok, diciamo che anche aggiungere il nome del docente del corso, e alcuni dettagli su di loro, nel RDBMS:
|-----Primary Key----| uh oh |
V
Course | Semester | #Places | TeacherID | TeacherName |
---------------------------------------------------------------|
IT101 | 2009-1 | 100 | 332 | Mr Jones |
IT101 | 2009-2 | 100 | 332 | Mr Jones |
IT102 | 2009-1 | 200 | 495 | Mr Bentley |
IT102 | 2010-1 | 150 | 332 | Mr Jones |
IT103 | 2009-2 | 120 | 242 | Mrs Smith |
Ora si spera che dovrebbe essere ovvio che TeacherName dipende TeacherID - quindi questo è non in 3NF . Per risolvere questo problema, noi facciamo più o meno lo stesso che abbiamo fatto nel 2NF -. Scendere in campo TeacherName fuori da questo tavolo, e metterlo nel proprio ordine, che ha TeacherID come la chiave
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
Non ridondanza !!
Una cosa importante da ricordare è che se qualcosa non è in 1NF, non è in 2NF o 3NF sia. Così ogni ulteriore forma normale richiede tutto che le forme normali inferiori avevano, più alcune condizioni supplementari, che deve tutti essere soddisfatte.
Altri suggerimenti
Non ho mai avuto una buona memoria per la formulazione esatta, ma nella mia classe di database Credo che il professore ha sempre detto qualcosa come:
I dati dipende dal tasto [1NF], tutto il tasto [2NF] e nient'altro che il tasto [3NF].
Ecco un rapido, certamente macellati di risposta, ma in una frase:
1NF:. La tabella è organizzata come un non ordinata set di dati, e non ci sono le colonne che si ripetono
2NF: Non ripetere i dati in una colonna della tabella a causa di un'altra colonna.
3NF: Ogni colonna della tabella si riferiscono soltanto al vostro tavolo del tasto - non avrebbe una colonna in una tabella che descrive un'altra colonna della tabella, che non è la chiave.
Per ulteriori dettagli, vedere wikipedia ...
1NF: un solo valore per colonna
2NF:. Tutte le colonne chiave non primarie nella tabella devono dipendere l'intera chiave primaria
3NF:. Tutte le colonne chiave non primarie nella tabella devono dipendono direttamente l'intera chiave primaria
ho scritto un articolo più in dettaglio nel corso qui