1NF - это самая простая из обычных форм - каждая ячейка в таблице должна содержать только одну часть информации, и не может быть повторяющихся строк.
2NF и 3NF зависят от первичного ключа. Напомним, что первичный ключ может состоять из нескольких столбцов. Как сказал Крис в своем ответе:
Данные зависят от ключа [1NF], всего ключа [2NF] и ничего, кроме ключа [3NF] (так что помогите мне Кодд).
2NF
Допустим, у вас есть таблица, содержащая курсы, которые читаются в определенном семестре, и у вас есть следующие данные:
|-----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 |
Никакой избыточности !!
Следует помнить одну важную вещь: если чего-то нет в 1НФ, этого нет и в 2НФ или 3НФ. Таким образом, каждая дополнительная нормальная форма требует всего, что было у низших нормальных форм, плюс некоторые дополнительные условия, которые должны быть выполнены все.
person
Smashery
schedule
07.04.2009