Правильный способ нормализации базы данных в 3NF

У меня есть эта база данных:

R(A, B, C, D, E)
Keys: A
F = {A -> B, D -> E, C -> D}

Я нормализую его в 3NF следующим образом:

R(A, B, C, D, E)
Keys: AD
F = {AD -> B, AD -> E, C -> D}

Когда я проверяю D -> E, D не является суперключем, а E не является ключевым атрибутом, поэтому я рассматриваю D и A как суперключ {AD}. Когда я проверяю C -> D, C не является ключом, но D является ключевым атрибутом, так что все в порядке.

Правильна ли моя нормализация?

1 ответ

Решение

В ваших входных данных есть проблема. Если отношение R имеет зависимости F = {A -> B, D -> E, C -> D}, затем A не может быть ключом. Фактически ключ - это набор атрибутов, закрытие которых определяет все атрибуты отношения, что здесь не так, поскольку:

A+ = AB

От F(единственный) возможный ключ AC, по факту

AC+ = ABCD

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

В вашем решении вы не декомпозируете отношение, а только изменяете набор зависимостей с другими зависимостями, не подразумеваемыми первым набором.

Правильное разложение будет следующим:

R1 < (A B) ,
{ A → B } >

R2 < (C D) ,
{ C → D } >

R3 < (D E) ,
{ D → E } >

R4 < (A C) ,
{ } >

Алгоритм разложения отношений на 3NF можно найти в любой хорошей книге по базам данных.

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