Skip to main content

Руководство по пониманию зависимостей баз данных

Базы данных. Нормализация в базах данных: избыточность транзитивная и функциональная зависимость. (Май 2025)

Базы данных. Нормализация в базах данных: избыточность транзитивная и функциональная зависимость. (Май 2025)
Anonim

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

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

Зависимости базы данных и функциональные зависимости

Утверждение, что зависимость между атрибутами в таблице является такой же, как и утверждение, что между этими атрибутами существует функциональная зависимость. Если в базе данных есть зависимость, так что атрибут B зависит от атрибута A, вы должны записать это как:

A -> B

Например, в таблице, в которой перечислены характеристики сотрудников, в том числе номер социального страхования (SSN) и имя, можно сказать, что имя зависит от SSN (или SSN -> name), поскольку имя сотрудника может быть однозначно определено из SSN. Однако обратный оператор (name -> SSN) неверен, поскольку более одного сотрудника может иметь одно и то же имя, но всегда иметь разные SSN.

Тривиальные функциональные зависимости

Тривиальная функциональная зависимость возникает, когда вы описываете функциональную зависимость атрибута в коллекции атрибутов, которая включает исходный атрибут. Например, {A, B} -> B - тривиальная функциональная зависимость, как {name, SSN} -> SSN. Этот тип функциональной зависимости называется тривиальным, поскольку он может быть получен из здравого смысла. Очевидно, что если вы уже знаете значение B, то значение B может быть однозначно определено этим знанием.

Полные функциональные зависимости

Полная функциональная зависимость возникает, когда вы уже отвечаете требованиям для функциональной зависимости, а набор атрибутов в левой части оператора функциональной зависимости больше не может быть уменьшен. Например, {SSN, age} -> name является функциональной зависимостью, но это не полная функциональная зависимость, потому что вы можете удалить возраст из левой части инструкции, не влияя на зависимость.

Транзитивные зависимости

Транзитивные зависимости возникают, когда есть косвенная связь, которая вызывает функциональную зависимость. Например, A -> C - транзитивная зависимость, когда она истинна только потому, что оба A -> B и B -> C верны.

Многозначные зависимости

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

Важность зависимостей

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

  • Для того, чтобы таблица находилась во второй нормальной форме (2NF), в таблице не должно быть случая атрибута nonprime, который функционально зависит от подмножества ключа-кандидата.
  • Для того чтобы таблица была в третьей нормальной форме (3NF), каждый атрибут nonprime должен иметь нетранзитивную функциональную зависимость от каждого ключа кандидата.
  • Для того, чтобы таблица находилась в нормальной форме Boyce-Codd (BCNF), каждая функциональная зависимость (отличная от тривиальных зависимостей) должна быть в суперключе.
  • Для того чтобы таблица была в четвертой нормальной форме (4NF), она не должна иметь многозначных зависимостей.