Многозначная зависимость в базах данных

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

Многозначная зависимость препятствует нормализации стандарта четвертой нормальной формы. Реляционные базы данных следуют пяти нормальным формам, которые представляют руководящие принципы для дизайна записей. Они предотвращают аномалии обновления и несоответствия в данных. Четвертая нормальная форма имеет дело с отношениями многие-к-одному в базе данных.

Функциональная зависимость против многозначной зависимости

Чтобы понять многозначную зависимость, полезно вернуться к функциональной зависимости.

Если атрибут X однозначно определяет атрибут Y, то Y функционально зависит от X. Это записывается как X -> Y. Например, в таблице учеников ниже, Student_Name определяет Major:

Имя ученика
Главный
Ravi
История искусства
в промежуткеХимия

Ученики

Эта функциональная зависимость может быть записана: Student_Name -> Major. Каждое Student_Name определяет ровно один Major и не более.

Если вы хотите, чтобы база данных также отслеживала виды спорта, которыми занимаются эти студенты, вы можете подумать, что самый простой способ сделать это — просто добавить еще одну колонку под названием Спорт:

Имя ученика
Главный
спорт
RaviИстория искусстваФутбольный
RaviИстория искусстваВолейбол
RaviИстория искусстваТеннис
в промежуткеХимияТеннис
в промежуткеХимияФутбольный

Ученики

Проблема здесь в том, что Рави и Бет занимаются несколькими видами спорта. Необходимо добавить новую строку для каждого дополнительного вида спорта. 

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

Многозначная зависимость записывается X -> -> Y. В этом случае:

Имя ученика  -> -> Главный
Имя ученика -> -> спорт

Это читается как «Student_Name multidetermines определяет Major» и «Student_Name multidetermines определяет Sport».

Многозначная зависимость всегда требует как минимум трех атрибутов, потому что она состоит как минимум из двух атрибутов, которые зависят от третьего.

Многозначная зависимость и нормализация

Таблица с многозначной зависимостью нарушает стандарт нормализации четвертой нормальной формы, потому что она создает ненужные избыточности и может вносить вклад в противоречивые данные. Чтобы довести это до 4NF, необходимо разбить эту информацию на две таблицы.

Таблица ниже теперь имеет функциональную зависимость Student_Name -> Major и не содержит многозначных зависимостей:

Имя ученика
Главный
RaviИстория искусства
RaviИстория искусства
RaviИстория искусства
в промежуткеХимия
в промежуткеХимия

Ученики Majors

Хотя эта таблица также имеет одну функциональную зависимость Student_Name -> Sport:

Имя ученика
спорт
RaviФутбольный
RaviВолейбол
RaviТеннис
в промежуткеТеннис
в промежуткеФутбольный

Ученики Виды спорта

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

Ссылка на основную публикацию