В реляционной базе данных зависимость возникает, когда информация, хранящаяся в той же таблице базы данных, однозначно определяет другую информацию, хранящуюся в той же таблице. Многозначная зависимость возникает, когда наличие одной или нескольких строк в таблице подразумевает наличие одной или нескольких других строк в этой же таблице. Другими словами, два атрибута (или столбца) в таблице не зависят друг от друга, но оба зависят от третьего атрибута.
Многозначная зависимость препятствует нормализации стандарта четвертой нормальной формы . Реляционные базы данных следуют пяти нормальным формам, которые представляют руководящие принципы для дизайна записей. Они предотвращают аномалии обновления и несоответствия в данных. Четвертая нормальная форма имеет дело с отношениями многие-к-одному в базе данных .
Функциональная зависимость против многозначной зависимости
Чтобы понять многозначную зависимость, полезно вернуться к функциональной зависимости .
Если атрибут X однозначно определяет атрибут Y, то Y функционально зависит от X. Это записывается как X -> Y. Например, в таблице учеников ниже, Student_Name определяет Major:
Имя студента | Основной |
---|---|
Ravi | История искусства |
в промежутке | Химия |
Эта функциональная зависимость может быть записана: Student_Name -> Major . Каждое Student_Name определяет ровно один Major и не более.
Если вы хотите, чтобы база данных также отслеживала виды спорта, которыми занимаются эти студенты, вы можете подумать, что самый простой способ сделать это — просто добавить еще один столбец под названием Спорт:
Имя студента | Основной | спорт |
---|---|---|
Ravi | История искусства | Футбольный |
Ravi | История искусства | Волейбол |
Ravi | История искусства | Теннис |
в промежутке | Химия | Теннис |
в промежутке | Химия | Футбольный |
Проблема в том, что Рави и Бет занимаются несколькими видами спорта. Необходимо добавить новую строку для каждого дополнительного вида спорта.
Эта таблица ввела многозначную зависимость, потому что основной и вид спорта независимы друг от друга, но оба зависят от студента. Это простой пример, который легко идентифицировать, но многозначная зависимость может стать проблемой в большой и сложной базе данных.
Многозначная зависимость записывается X -> -> Y. В этом случае:
Student_Name -> -> Major
Student_Name -> -> Спорт
Это читается как «Student_Name multidetermines определяет Major» и «Student_Name multidetermines определяет Sport».
Многозначная зависимость всегда требует как минимум трех атрибутов, поскольку она состоит как минимум из двух атрибутов, которые зависят от третьего.
Многозначная зависимость и нормализация
Таблица с многозначной зависимостью нарушает стандарт нормализации четвертой нормальной формы, поскольку создает ненужные избыточности и может вносить вклад в противоречивые данные. Чтобы довести это до 4NF, необходимо разбить эту информацию на две таблицы.
Таблица ниже теперь имеет функциональную зависимость Student_Name -> Major и не имеет многозначных зависимостей:
Имя студента | Основной |
---|---|
Ravi | История искусства |
Ravi | История искусства |
Ravi | История искусства |
в промежутке | Химия |
в промежутке | Химия |
Хотя эта таблица также имеет одну функциональную зависимость Student_Name -> Sport:
Имя студента | спорт |
---|---|
Ravi | Футбольный |
Ravi | Волейбол |
Ravi | Теннис |
в промежутке | Теннис |
в промежутке | Футбольный |
Нормализация часто достигается путем упрощения сложных таблиц, чтобы они содержали информацию, относящуюся к одной идее или теме, вместо того, чтобы пытаться заставить одну таблицу содержать слишком много разнородной информации.