Как избавиться от ключевой зависимости?
Предположим, у нас есть функциональная зависимость от атрибута вне первичного ключа до атрибута внутри первичного ключа. Как мы можем избавиться от этой зависимости (которую я интуитивно считаю плохой)?
В частности, предположим, что у нас есть следующие функциональные зависимости:
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 вы по существу удаляете все три типа зависимостей (частичные, переходные, в ключ).