Что такое транзитивная зависимость в базе данных

Избегайте переходных зависимостей, чтобы помочь обеспечить нормализацию

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

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

Пример транзитивной зависимости

АВТОРЫ

AUTHOR_ID
Автор
Книга
Author_Nationality




Auth_001 Орсон Скотт Кард Игра Эндера Соединенные Штаты
Auth_001 Орсон Скотт Кард Игра Эндера Соединенные Штаты
Auth_002 Маргарет Этвуд История о горничной Канада

В примере АВТОРЫ выше:

  • Книга Автор : . Здесь атрибут Книга определяет атрибут Автор . Если вы знаете название книги, вы можете узнать имя автора. Однако Автор не определяет Книгу , поскольку автор может написать несколько книг. Например, только потому, что мы знаем имя автора Орсон Скотт Кард, мы до сих пор не знаем название книги.
  • Автор Author_Nationality : Аналогично, атрибут Author определяет Author_Nationality , но не наоборот; только то, что мы знаем национальность, не означает, что мы можем определить автора.

Но эта таблица вводит транзитивную зависимость:

  • Книга Author_Nationality: Если мы знаем название книги, мы можем определить национальность через столбец Автор.

Избежание переходных зависимостей

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

Мы можем начать с удаления столбца Book из таблицы Authors и создания отдельной таблицы Books:

Книги

Book_ID
Книга
aUTHOR_ID




Book_001 Игра Эндера Auth_001
Book_001 Дети разума Auth_001
Book_002 История о горничной Auth_002

АВТОРЫ

AUTHOR_ID
Автор
Author_Nationality



Auth_001 Орсон Скотт Кард Соединенные Штаты
Auth_002 Маргарет Этвуд Канада

Это исправило это? Давайте рассмотрим наши зависимости сейчас:

Стол BOOKS .

  • Book_ID Книга: Книга зависит от Book_ID .
  • Других зависимостей в этой таблице не существует, поэтому мы в порядке. Обратите внимание, что внешний ключ Author_ID связывает эту таблицу с таблицей AUTHORS через ее первичный ключ Author_ID . Мы создали отношения, чтобы избежать транзитивной зависимости, ключевого дизайна реляционных баз данных.

Таблица АВТОРОВ .

  • Author_ID Автор: Автор зависит от Author_ID .
  • Автор Author_Nationality: Национальность может быть определена автором.
  • Author_ID Author_Nationality: Национальность можно определить по Author_ID через Author приписывать. У нас все еще есть транзитивная зависимость.

Нам нужно добавить третью таблицу для нормализации этих данных:

Страны

COUNTRY_ID
Страна



Coun_001 Соединенные Штаты
Coun_002 Канада

АВТОРЫ

AUTHOR_ID
Автор
COUNTRY_ID



Auth_001 Орсон Скотт Кард Coun_001
Auth_002 Маргарет Этвуд Coun_002

Теперь у нас есть три таблицы, использующие внешние ключи для связи между таблицами:

  • Внешний ключ таблицы BOOK Author_ID связывает книгу с автором в таблице AUTHORS.
  • Внешний ключ таблицы AUTHORS Country_ID связывает автора со страной в таблице COUNTRIES.
  • Таблица COUNTRIES не имеет внешнего ключа, поскольку в этом дизайне нет необходимости ссылаться на другую таблицу.

Почему транзитивные зависимости плохой дизайн базы данных

Какова ценность избегания транзитивных зависимостей, чтобы помочь обеспечить 3NF? Давайте снова рассмотрим нашу первую таблицу и посмотрим на проблемы, которые она создает:

АВТОРЫ

AUTHOR_ID
Автор
Книга
Author_Nationality




Auth_001 Орсон Скотт Кард Игра Эндера Соединенные Штаты
Auth_001 Орсон Скотт Кард Дети разума Соединенные Штаты
Auth_002 Маргарет Этвуд История о горничной Канада

Такая конструкция может способствовать аномалиям и несоответствиям данных, например:

  • Если вы удалили две книги «Дети разума» и «Игра Эндера», вы полностью удалили из базы данных автора «Карту Орсона Скотта» и его гражданство.
  • Вы не можете добавить нового автора в базу данных, если вы также не добавите книгу; Что делать, если автор еще не опубликован или вы не знаете название книги, которую она написала?
  • Если «Орсон Скотт Кард» изменил свое гражданство, вам придется изменить его во всех записях, в которых он появляется. Наличие нескольких записей с одним и тем же автором может привести к получению неточных данных: что, если лицо, занимающееся вводом данных, не понимает, что для него существует несколько записей, и изменяет данные только в одной записи?
  • Вы не можете удалить такую ​​книгу, как «Сказка о служанке», не удалив также полностью автора.

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

Оцените статью
Solutics.ru
Добавить комментарий