Нормализация - 2NF против 3NF - PullRequest
26 голосов
/ 17 мая 2011

Изо всех сил пытается увидеть различия между ними. Я знаю, что мы говорим, что 2NF - это «весь ключ», а 3NF - «только ключ».

Ссылка на этот великолепный ответ Smashery: Что такое 1NF, 2NF и 3NF в дизайне базы данных?

Пример, используемый для 3NF, точно такой же, как 2NF - это поле, которое зависит только от одного ключевого атрибута. Чем пример для 3NF отличается от примера для 2NF?

Спасибо

Ответы [ 5 ]

12 голосов
/ 17 мая 2011

Предположим, что какое-то отношение удовлетворяет нетривиальной функциональной зависимости вида A-> B, где B является непростым атрибутом.

2NF нарушается, если A не является суперключем, но является надлежащим подмножествомключ-кандидат

3NF нарушается, если A не является суперключем

Вы заметили, что требование 3NF является лишь особым случаем (но не таким уж особенным) требования 2NF.2NF сам по себе не очень важен.Важный вопрос заключается в том, является ли A суперключем, а не является ли A частью какой-либо части ключа-кандидата.

8 голосов
/ 17 мая 2011

Поскольку вы задаете очень конкретный вопрос об ответе на существующий, поэтому вопрос объясняет это (и в основном я скажу то, что дпортас уже сказал в своем ответе, но несколькими словами).

Примеры дизайна, который не в 2NF и не в 3NF, не одинаковы.

Да, зависимость в обоих случаях на одном поле.

Однако,в примере не 2NF:

  • зависимость находится на части первичного ключа

, а в примере не 3NF (который находится в 2NF):

  • зависимость находится в поле, которое не является частью первичного ключа (и также обратите внимание, что в этом примере оно удовлетворяет 2NF; эточтобы показать, что даже если вы проверяете на 2NF, вы должны также проверять на 3NF)

В обоих случаях для нормализации вы создадите дополнительную таблицу, которая не будет отображать аномалии обновления (пример аномалии обновления: в примере 2NF), что произойдет, если вы обновите Coursename для IT101|2009-2,но не для IT101|2009-1?Вы получаете противоречивые = бессмысленные = непригодные данные).

Итак, если вы запомните ключ, весь ключ и ничего, кроме ключа , который охватывает как 2NF, так и 3NF, который должен работать дляВы на практике при нормализации.Различие между 2NF и 3NF может показаться вам неуловимым (вопрос, если в дополнительной зависимости атрибут (ы), от которого зависят данные, являются частью ключа-кандидата или нет) - и, ну, конечно, - так что просто примите это.

7 голосов
/ 06 мая 2015

2NF позволяет функционально зависеть от непростых атрибутов от непростых атрибутов

но

3NF позволяет неосновным атрибутам быть функционально зависимыми только от суперключа

Таким образом, когда таблица в 3NF, она в 2NF, а 3NF более строгая, чем 2NF

Надеюсь, это поможет ...

2 голосов
/ 17 мая 2011

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

Не уверен, что мой профессор сказал бы так, но это то, что есть.

Если вы «в поле».Забудьте об определениях.Ищите «лучшие практики».Один из них СУХОЙ: не повторяйте себя.

Если вы следуете этому принципу, вы уже освоите все, что вам нужно для НФ.

Вот пример.Ваша таблица имеет следующую схему:

PERSONS : id, name, age, car make, car model

Возраст и имя связаны с записью человека (=> id), но модель зависит от автомобиля, а не от человека.

Тогда,Вы бы разбили его на две таблицы:

PERSONS : id, name, age, car_models_id (references CAR_MODELS.id)
CAR_MODELS : id, name, car_makes_id (references CAR_MAKES.id)
CAR_MAKES : id, name

Вы можете иметь репликацию в 2FN, но больше не в 3FN.

Нормализация - это все о не репликации, согласованности и из другой точкипросматривать внешние ключи и соединения.

Чем больше нормализовано, тем лучше для данных, но не для производительности и не понимания, если они действительно слишком сложны.

0 голосов
/ 20 декабря 2017

2NF следует частичной зависимости, тогда как 3NF следует транзитивной функциональной зависимости.Важно знать, что 3NF должен быть в 2NF и поддерживать транзитивную функциональную зависимость.

...