1NF является самой простой из нормальных форм - каждая ячейка в таблице должна содержать только один фрагмент информации, и не может быть повторяющихся строк.
2NF и 3NF - все зависит от первичного ключа. Напомним, что первичный ключ может состоять из нескольких столбцов. Как сказал Крис в своем ответе:
Данные зависят от ключа [1NF], всего ключа [2NF] и только от ключа [3NF] (так что помогите мне, Кодд ).
2НФ
Допустим, у вас есть таблица, содержащая курсы, которые проводятся в определенный семестр, и у вас есть следующие данные:
|-----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 |
Это не в 2NF , потому что четвертый столбец полагается не на весь ключ, а только на его часть. Название курса зависит от идентификатора курса, но не имеет никакого отношения к тому, в каком семестре оно прошло. Таким образом, как вы видите, у нас есть дублирующаяся информация - несколько строк сообщают нам, что IT101 программирует, а IT102 - базы данных. Поэтому мы исправляем это, перемещая название курса в другую таблицу, где CourseID - это ВЕСЬ ключ.
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
Нет избыточности!
3NF
Итак, допустим, мы также добавили имя учителя курса и некоторые подробности о них в СУРБД:
|-----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 |
Теперь, надеюсь, должно быть очевидно, что TeacherName зависит от TeacherID - так что это не в 3NF . Чтобы исправить это, мы делаем то же самое, что и в 2NF - вынимаем поле TeacherName из этой таблицы и помещаем его в свое собственное, в котором ключ TeacherID является ключевым.
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
Нет избыточности!
Следует помнить одну важную вещь: если что-то не в 1NF, то оно не в 2NF или 3NF. Таким образом , каждая дополнительная нормальная форма требует все , что низшие нормальные формы имели, плюс некоторые дополнительные условия, которые должны все быть выполнены.
У меня никогда не было хорошей памяти для точной формулировки, но в моем классе базы данных, я думаю, профессор всегда говорил что-то вроде:
источник
The data depends on the key [1NF], nothing but the key [3NF]
? Пожалуйста, не путайте нас, так как ответ в 1 предложении не разъясняет ответ, но сбивает с толку посетителей!Вот быстрый, по общему признанию зарезанный ответ, но в предложении:
1NF: Ваша таблица организована как неупорядоченный набор данных, и в ней нет повторяющихся столбцов.
2NF: вы не повторяете данные в одном столбце таблицы из-за другого столбца.
3NF: каждый столбец в вашей таблице относится только к ключу вашей таблицы - у вас не будет столбца в таблице, который описывает другой столбец в вашей таблице, который не является ключом.
Для более подробной информации, смотрите Википедию ...
источник
1NF: только одно значение на столбец
2NF: все столбцы не первичного ключа в таблице должны зависеть от всего первичного ключа.
3NF: все столбцы не первичного ключа в таблице должны НЕПОСРЕДСТВЕННО зависеть от всего первичного ключа.
Я написал статью более подробно здесь
источник