Правильный способ нормализации базы данных в 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 можно найти в любой хорошей книге по базам данных.