Какое правило нормализации это нарушает? - PullRequest
10 голосов
/ 04 марта 2010

Предположим, у меня есть две таблицы в базе данных, T 10 и T 11 , имеющие 10 и 11 столбцов соответственно, где 10 столбцов абсолютно одинаковы для обеих.

Какое (если таковое имеется) правило нормализации я нарушаю?

Ответы [ 8 ]

8 голосов
/ 04 марта 2010

Редактировать: мне сообщили, что здесь не нарушаются нормальные формы. Так как это был принятый ответ, я оставляю его здесь для справки, и потому что размышления о 3NF могут на практике помочь избежать подобных ситуаций в вопросе.

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

6 голосов
/ 25 января 2012

Верьте или нет, дублирование столбцов в таблицах само по себе не нарушает теоретически нормальную форму. За исключением нормальной формы домена / ключа (DKNF), нормальные формы определяются в виде отдельных, а не множественных таблиц. DKNF определяется в терминах ограничений, которых в общем случае нет. Таким образом, если есть нарушение нормальной формы:

  • оно должно быть определенным для одной из таблиц и существует независимо от наличия обеих таблиц (то есть таблица будет по-прежнему нарушать нормальную форму, даже если вы удалили другую таблицу), или
  • отношение имеет ограничение, которое нарушает DKNF, что означает, что это не пример общего случая, изложенного в вопросе, а более конкретный случай. Нарушение создает не повторяющиеся столбцы, а дополнительное ограничение на дополнительный столбец.

Рассмотрим нормальные формы , используя краткие определения из статьи в Википедии:

1NF
Таблица достоверно представляет отношение и не имеет повторяющихся групп.

Это довольно прямо. Термин «повторяющиеся группы» имеет несколько значений в теории, но ни одно из них не имеет ничего общего с дублирующимися столбцами или данными.

2НФ
Никакой непростой атрибут в таблице функционально не зависит от правильного подмножества любого ключа-кандидата.

Здесь важным термином для изучения является «функциональная зависимость». По сути, функциональная зависимость - это то, где вы проецируете отношение к двум столбцам, X и Y, и получаете функцию X & rarr; Y. У вас не может быть функциональной зависимости между двумя (или более) таблицами *. Кроме того, ключи-кандидаты не могут занимать несколько таблиц.

3NF
Каждый непростой атрибут не транзитивно зависит от каждого ключа-кандидата в таблице.

Транзитивная зависимость определяется в терминах функциональной зависимости: транзитивная зависимость - это зависимость, где X & rarr; Z только потому, что X & rarr; Y и Y & rarr; Z. X, Y и Z должны быть в одной таблице, потому что это функциональные зависимости.

4НФ
Каждая нетривиальная многозначная зависимость в таблице является зависимостью от суперключа.

Многозначная зависимость немного сложнее, но ее можно проиллюстрировать на примере: «всякий раз, когда кортежи (a, b, c) и (a, d, e) существуют в r, кортежи (a, b, e) и (a, d, c) также должны существовать в r "(где" r "- таблица). Что наиболее важно для рассматриваемого вопроса, многозначная зависимость применяется только к одной таблице.

5NF
Каждая нетривиальная зависимость соединения в таблице подразумевается суперключами таблицы.

Таблица имеет зависимость соединения , если она может быть выражена как естественное соединение других таблиц. Эти другие таблицы, однако, не должны существовать в базе данных. Если таблица T 11 в этом примере имеет зависимость соединения, она все равно будет иметь ее, даже если вы удалили таблицу T 10

6NF (C. Дата)
В таблице вообще нет нетривиальных зависимостей соединения (со ссылкой на оператор обобщенного соединения).

Те же рассуждения для 5NF.

Элементарный ключ Нормальная форма (EKNF)
Каждая нетривиальная функциональная зависимость в таблице является либо зависимостью атрибута элементарного ключа, либо зависимостью от суперключа.

То же самое для 2NF.

Нормальная форма Бойса-Кодда (BCNF)
Каждая нетривиальная функциональная зависимость в таблице - это зависимость от суперключа.

То же самое для 2NF.

Нормальная форма домена / ключа (DKNF)
Каждое ограничение таблицы является логическим следствием ограничений таблицы и ключей таблицы.

Если T 11 имеет ограничение, которое зависит от T 10 , то это либо ключевое ограничение, либо более сложное ограничение, которое все еще ссылается на T 10, Последний случай не является общим случаем, упомянутым в вопросе. Другими словами, хотя могут быть определенные схемы с дублирующимися столбцами, которые нарушают DKNF, в целом это не так. Кроме того, именно ограничение (не нормальная форма) определяется в терминах нескольких таблиц, а ограничение (не дублирование столбца) вызывает нарушение DKNF.

<Ч />

Цель нормализации включает предотвращение аномалий. Однако нормализация не завершена, поскольку она не гарантирует, что реляционная база данных будет полностью свободна от аномалий. Это один случай, когда практика расходится с теорией.

Если это по-прежнему вас не убеждает, рассмотрите подсказку к комментарию схемы KM., Где T 11 представляет историческую (или версионную) версию T 10 . Первичный ключ T 11 состоит из столбцов первичного ключа, которые хранятся вместе с T 10 , плюс дополнительный столбец (столбец даты / версии). То, что T 11 имеет разные ключи-кандидаты, делает различие между склонной к аномалиям и свободной от аномалий нормализованной конструкцией.

* Кто-то может подумать, что вы можете использовать объединения для создания зависимости между двумя таблицами. В то время как объединение может создать таблицу с зависимостью, зависимость существует для этой таблицы, а не между компонентами объединения. В данном случае это снова означает, что одна из таблиц будет объединенной таблицей и будет зависеть от самой зависимости независимо от другой таблицы в базе данных.

4 голосов
/ 04 марта 2010

Зависит от того, что в таблицах.

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

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

4 голосов
/ 04 марта 2010

если 10 из 11 столбцов одинаковы, почему это не может быть просто одна таблица, где 11-й столбец оставлен пустым (вместе с возможным 12-м столбцом для обозначения, какой это тип данных, то есть какой таблицы был бы в оригинале)?

4 голосов
/ 04 марта 2010

Возможно, правило избегать избыточных данных? (то есть одинаковые данные в двух таблицах)

3 голосов
/ 25 января 2012

Наличие двух идентичных или почти идентичных отношений само по себе не является нарушением любой из обычных нормальных форм. Outis очень подробно объяснил почему. Впрочем, это может быть нарушением принципа ортогонального проектирования , что является еще одним аспектом теории проектирования реляционных баз данных.

0 голосов
/ 04 марта 2010

Только первичные ключи могут быть избыточными между таблицами. Наличие любого количества столбцов не первичного ключа в нескольких таблицах нарушает третью нормальную форму.

0 голосов
/ 04 марта 2010

Если все 10 столбцов являются частью вашего ключа, тогда Вторая нормальная форма: устранение избыточных данных. В частности, это подпадает под дилемму «Несуррогатные и суррогатные первичные ключи» - честно говоря, я не помню ни одного из этих двух вариантов «нарушения» 2NF, но суррогатный ключ определенно ближе к духу 2NF

...