Подтвердить что ты не робот

Нормализация - 2NF против 3NF

Борясь, чтобы увидеть различия между ними. Я знаю, что мы говорим, что 2NF - это "весь ключ" и 3NF "ничего, кроме ключа".

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

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

Спасибо

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

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

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

Ответ 3

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

но

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

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

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

Ответ 4

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

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

Если вы "в поле". Забудьте об определениях. Ищите "лучшие практики". Один из них сухим: не повторяйте себя.

Если вы следуете этому принципу, вы уже освоили все, что вам нужно для 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.

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

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

Ответ 5

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