Как избавиться от ключевой зависимости?

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

В частности, предположим, что у нас есть следующие функциональные зависимости:

CS -> T
T  -> C

где CS является первичным ключом. В моем примере, к счастью, TS также может быть изначально первичным ключом, поэтому ситуация преобразуется в:

TS -> C
T  -> C

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

| T | C |

а также

| T | S |

но что, если TS не был также первичным ключом? Как мы можем избавиться от начального в ключевой зависимости / аномалии?

2 ответа

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

Во-вторых, в вашем примере вы спрашиваете:

Как мы можем избавиться от этой зависимости (которую я интуитивно считаю плохой)?

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

Фактически вы можете преобразовать схему в BCNF, используя следующие разложенные схемы:

R1 <(CT), {T → C}>

R2 <(ST), {}>

но, как вы можете видеть, зависимость CS → T больше не сохраняется, так как ни одна подсхема не содержит все три атрибута. И это хуже, чем избыточность, потому что вы можете внести несоответствия в вашу базу данных, то есть случаи, когда эта зависимость нарушается.

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

Таким образом, этот вид аномалии является общепринятым, и отношение не разлагается.

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

BCNF гарантирует, что все зависимости "от полного ключа".

Посмотрите здесь, как разложить в форму BCNF.

редактировать

  • От полного ключа: от полного первичного ключа до внешнего ключа.
  • В зависимости от ключа: извне ключ в ключ.

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

Другие вопросы по тегам