Каковы нормальные формы базы данных, как вы можете легко их применять и можете ли вы привести примеры?

В структуре реляционной базы данных существует концепция нормализации базы данных или просто нормализации, которая представляет собой процесс организации столбцов (атрибутов) и таблиц (отношений) для уменьшения избыточности данных и улучшения целостности данных. (как написано на Wikipedia).

Поскольку большинство статей несколько техничны и, следовательно, труднее понять, я прошу кого-то написать более легкое для понимания объяснение, основанное на примерах того, что означает 1NF, 2NF, 3NF, даже 3.5NF (Boyce-Codd) и как кто-то может подумать, чтобы применять эти основные правила во все времена, поскольку они, по-видимому, являются самыми важными вещами, которые следует иметь в виду при разработке реляционной базы данных.

Ответ 1

1NF - самая простая из нормальных форм - каждая ячейка в таблице должна содержать только одну часть информации, и не может быть повторяющихся строк.

2NF и 3NF - все зависит от того, зависит ли от первичного ключа. Напомним, что первичный ключ может состоять из нескольких столбцов. Как сказал Крис в своем ответе:

Данные зависят от ключа [1NF], всего ключа [2NF] и ничего, кроме ключа [3NF] (так что помогите мне Codd).

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 является ключом ENTIRE.

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. Поэтому каждая дополнительная нормальная форма требует всего, что имели более низкие нормальные формы, плюс дополнительные условия, которые должны выполняться.

Ответ 2

У меня никогда не было хорошей памяти для точной формулировки, но в моем классе базы данных я думаю, что профессор всегда говорил что-то вроде:

Данные зависят от ключа [1NF], всего ключа [2NF] и ничего, кроме клавиши [3NF].

Ответ 3

Здесь быстрый, по общему признанию, отбитый ответ, но в предложении:

1NF: Ваша таблица организована как неупорядоченный набор данных, и нет повторяющихся столбцов.

2NF: вы не повторяете данные в одном столбце таблицы из-за другого столбца.

3NF: каждый столбец в вашей таблице относится только к вашему ключу таблицы - у вас не будет столбец в таблице, который описывает другой столбец в вашей таблице, который не является ключом.

Подробнее см. в википедии...

Ответ 4

1NF: только одно значение для столбца

2NF: все столбцы не первичного ключа в таблице должны зависеть от всего первичного ключа.

3NF: все столбцы не первичного ключа в таблице должны зависеть ПРЯМОГО от всего первичного ключа.

Я написал статью более подробно здесь