Вопрос

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

Что (если есть) Правило нормализации Я нарушаю?

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

Переходная зависимость определена с точки зрения функциональной зависимости: переходная зависимость является зависимостью, когда X → Z только потому, что x → y и y → z. x, y и z должны быть в одной таблице, потому что это функциональные зависимости.

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

Многозначная зависимость немного сломлен, но его можно проиллюстрировать на примере: «Всякий раз, когда кортежи (A, B, C) и (A, D, E) существуют в R, кортежи (A, B, E) и (A, D, C) также существуют в R "(где« R »является таблицей). Самое главное по этому вопросу над рукой, многозначная зависимость относится только к одной таблице.

5НФ
Каждое нетривиальное зависимость в присоединении в таблице подразумевается супхизом таблицы.

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

6НФ (C. Дата)
Стол функционирует никаких нетривиальных зависимостей соединения вообще (со ссылкой на обобщенную оператор присоединения).

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

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

Те же рассуждения для 2НФ.

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

Те же рассуждения для 2НФ.

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

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


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

Если это еще не убедит вас, рассмотрите схему км. Комментарий намекает, где t11 представляет историю (или версию) версию T10. Отказ Первичный ключ от т11 состоит из первичных ключевых столбцов, проводимых общей с T10, плюс дополнительный столбец (столбец даты / версии). Что Т.11 Имеет разные ключи от кандидатов в разницу между аномализованно-склонным и аномалийным, нормализованным дизайном.

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top