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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top