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.
Nigdy nie miałem dobrej pamięci na dokładne sformułowanie, ale myślę, że w mojej klasie baz danych profesor zawsze mówił coś takiego:
źródło
The data depends on the key [1NF], nothing but the key [3NF]
? Proszę nie mylić, ponieważ 1 sentymentalna odpowiedź nie wyjaśnia odpowiedzi, ale myli odwiedzających!Oto szybka, wprawdzie zdyszana odpowiedź, ale w jednym zdaniu:
1NF: Twoja tabela jest zorganizowana jako nieuporządkowany zestaw danych i nie ma powtarzających się kolumn.
2NF: Nie powtarzasz danych w jednej kolumnie tabeli z powodu innej kolumny.
3NF: Każda kolumna w tabeli odnosi się tylko do klucza do tabeli - w tabeli nie ma kolumny opisującej inną kolumnę w tabeli, która nie jest kluczem.
Aby uzyskać więcej informacji, zobacz wikipedia ...
źródło
1NF: Tylko jedna wartość na kolumnę
2NF: Wszystkie kolumny klucza innego niż podstawowy w tabeli powinny zależeć od całego klucza podstawowego.
3NF: Wszystkie kolumny klucza innego niż podstawowy w tabeli powinny BEZPOŚREDNIO zależeć od całego klucza podstawowego.
Tutaj napisałem artykuł bardziej szczegółowo
źródło