Предположим, что у меня есть две таблицы в базе данных, T 10 и T 11, имеющие 10 и 11 столбцов соответственно, где 10 столбцов точно одинаковы на и другие.
Что (если есть) правило нормировки я нарушаю?
Предположим, что у меня есть две таблицы в базе данных, T 10 и T 11, имеющие 10 и 11 столбцов соответственно, где 10 столбцов точно одинаковы на и другие.
Что (если есть) правило нормировки я нарушаю?
Изменить: мне сообщили, что здесь нет теоретических норм. Поскольку это был принятый ответ, я оставляю его здесь для справки, и, поскольку размышление о 3NF может на практике помочь избежать ситуаций, подобных этому в вопросе.
Вы нарушаете Третью нормальную форму (3NF), потому что, если в обеих таблицах содержатся одни и те же данные, то каждый атрибут каждая таблица напрямую не зависит от ключа соответствующей таблицы.
Верьте или нет, дублирование столбцов по таблицам само по себе не нарушает теоретической нормальной формы. За исключением нормальной формы домена/ключа (DKNF), нормальные формы определяются в терминах отдельных, а не нескольких таблиц. DKNF определяется в терминах ограничений, которых нет в общем случае. Таким образом, если существует нарушение нормальной формы:
Рассмотрим нормальные формы, используя краткие определения из статьи в Википедии:
<Дл > <Дт > 1NFдт > <Дд >Таблица достоверно представляет отношение и не имеет повторяющихся групп.
Это довольно прямолинейно. Термин "повторяющиеся группы" имеет несколько значений в теории, но ни один из них не имеет ничего общего с дублирующимися столбцами или данными.
Дд > <Дт > 2NFдт > <Дд >Нет атрибута non-prime в таблице функционально зависит от правильного подмножества любого ключа-кандидата.
Здесь важным термином для изучения является "функциональная зависимость". По сути, функциональная зависимость - это то, где вы проецируете отношение к двум столбцам X и Y и завершаете функцией X → Y. Вы не можете иметь функциональную зависимость между двумя (или более) таблицами *. Кроме того, ключи-кандидаты не могут охватывать несколько таблиц.
Дд > <Дт > 3NFдт > <Дд >Каждый атрибут non-prime не зависит от каждого ключа кандидата в таблице.
Транзитивная зависимость определяется с точки зрения функциональной зависимости: транзитивная зависимость - это зависимость, где X Z только потому, что X Y & Y Z. X, Y и Z должны быть в одной таблице, потому что это функциональные зависимости.
Дд > <Дт > 4НФдт > <Дд >Каждая нетривиальная многозначная зависимость в таблице зависит от суперкласса.
Многозначная зависимость немного сложнее, но ее можно проиллюстрировать на примере: "всякий раз, когда кортежи (a, b, c) и (a, d, e) существуют в r, кортежи (a, b, e) и (a, d, c) также должны существовать в rn (где" r" - таблица). Что наиболее важно для рассматриваемого вопроса, многозначная зависимость применяется только к одной таблице.
Дд > <Дт > 5NFдт > <Дд >Каждая нетривиальная зависимость соединения в таблице подразумевается супер-ключами таблицы.
Таблица имеет зависимость соединения, если она может быть выражена как естественное объединение других таблиц. Однако эти другие таблицы не должны существовать в базе данных. Если таблица T 11 в примере имела зависимость соединения, она все равно была бы такой, даже если бы вы удалили таблицу T 10
Дд > 6NF (C. Дата) <Дд >В таблице нет никаких нетривиальных зависимостей соединения вообще (применительно к обобщенному оператору объединения).
То же рассуждение для 5NF.
Дд > Нормальная форма элементарного ключа (EKNF) <Дд >Каждая нетривиальная функциональная зависимость в таблице - это либо зависимость элементарного ключевого атрибута, либо зависимость от суперкласса.
То же рассуждение для 2NF.
Дд > Нормальная форма Boyce-Codd (BCNF) <Дд >Каждая нетривиальная функциональная зависимость в таблице зависит от суперкластера.
То же рассуждение для 2NF.
Дд > Доменная/ключевая нормальная форма (DKNF) <Дд >Каждое ограничение в таблице является логическим следствием ограничений табличной области и ограничений ключа.
Если T 11 имеет ограничение, которое зависит от T 10, то это либо ограничение ключа, либо более сложное ограничение, которое все еще относится к T 10суб > , Последний случай не является общим случаем, упомянутым в вопросе. Другими словами, хотя могут существовать конкретные схемы с дублирующимися столбцами, которые нарушают DKNF, в целом это не так. Кроме того, это ограничение (а не нормальная форма), которое определяется в терминах нескольких таблиц и ограничение (а не дублирование столбца), которое вызывает нарушение DKNF.
Дд > Дл >Цель нормализации включает предотвращение аномалий. Однако нормализация не завершена тем, что она не гарантирует, что реляционная база данных будет полностью свободна от аномалий. Это один из примеров, когда практика расходится с теорией.
Если это вас еще не убеждает, рассмотрите схему KM. комментарии, где T 11 представляет версию (или версию) T 10. Первичный ключ T 11 состоит из столбцов первичного ключа, совместно используемых с T 10, плюс дополнительный столбец (столбец даты/версии). То, что T 11 имеет разные ключи-кандидаты, делает разницу между аномальным и аномальным свободным нормализованным дизайном.
* Кто-то может подумать, что вы можете использовать объединения для создания зависимости между двумя таблицами. Хотя соединение может создать таблицу, имеющую зависимость, зависимость существует в этой таблице, а не между составляющими соединения. В данном случае это снова означает, что одна из таблиц будет объединенной таблицей и будет страдать от самой зависимости, независимо от другой таблицы в базе данных.
Возможно, правило избежания избыточных данных? (т.е. те же данные в двух таблицах)
если 10 из 11 столбцов одинаковы, почему это не может быть только одной таблицей, где 11-й столбец остается пустым (вместе с возможным 12-м столбцом для обозначения того, какой тип данных он есть, т.е. какая таблица было бы первоначально)?
Это зависит от того, что в таблицах.
Если никакие записи не связаны друг с другом (например, если одна таблица является просто архивированной записью, происходящей из, но удаленной из первой таблицы), вы не нарушаете никаких правил.
Но если это те же записи в каждой таблице, у вас есть проблема зависимости - одиннадцатый столбец зависит только от значения ключа из записи, а не от дополнительных столбцов. Предполагая, что все десять столбцов не участвуют в первичном ключе, вы нарушили третий NF.
Наличие двух одинаковых или почти идентичных отношений само по себе не является нарушением каких-либо обычных нормальных форм. Outis очень всесторонне объяснил, почему. Возможно, это будет нарушение принципа принципа ортогонального дизайна, что является еще одним аспектом теории дизайна реляционных баз данных.
Если все 10 столбцов являются частью вашего ключа, тогда вторая нормальная форма: исключение избыточных данных. В частности, это подпадает под дилемму "Несерьезность против суррогатных первичных ключей" - честно говоря, я не помню, чтобы один из этих двух вариантов был "нарушен" 2NF, но суррогатный ключ определенно ближе к духу 2NF
Только первичные ключи могут быть избыточными между таблицами. Наличие любого количества столбцов не первичного ключа в нескольких таблицах нарушает третью нормальную форму.