1NF jest najbardziej podstawową z normalnych form - każda komórka w tabeli musi zawierać tylko jedną informację i nie może być zduplikowanych wierszy.
2NF i 3NF polegają na uzależnieniu od klucza podstawowego. Przypomnij, że klucz podstawowy może składać się z wielu kolumn. Jak powiedział Chris w swojej odpowiedzi:
Dane zależą od klucza [1NF], całego klucza [2NF] i tylko klucza [3NF] (więc pomóżcie mi Coddowi ).
2NF
Załóżmy, że masz tabelę zawierającą kursy z danego semestru i masz następujące dane:
|-----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 |
Nie ma tego w 2NF , ponieważ czwarta kolumna nie opiera się na całym kluczu - tylko na jego części. Nazwa kursu zależy od jego identyfikatora, ale nie ma nic wspólnego z tym, w którym semestrze się odbywa. Zatem, jak widać, mamy zduplikowane informacje - kilka wierszy mówi nam, że IT101 programuje, a IT102 to bazy danych. Naprawiliśmy to, przenosząc nazwę kursu do innej tabeli, gdzie CourseID jest CAŁKIM kluczem.
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
Bez redundancji!
3NF
Okej, powiedzmy więc, że dodajemy również nazwisko nauczyciela kursu i kilka szczegółów na ich temat do 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 |
Mam nadzieję, że teraz powinno być oczywiste, że TeacherName jest zależne od TeacherID - więc nie ma go w 3NF . Aby to naprawić, robimy to samo, co w 2NF - wyjmij pole TeacherName z tej tabeli i umieść je w swoim własnym, które ma TeacherID jako klucz.
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
Bez redundancji !!
Jedną ważną rzeczą do zapamiętania jest to, że jeśli czegoś nie ma w 1NF, to nie ma też w 2NF ani 3NF. Tak więc każda dodatkowa postać normalna wymaga wszystko , że niższe normalne formy miałem, plus kilka dodatkowych warunków, które muszą wszystkie być spełnione.