A -> B
не может быть выведено, как показывает следующий контрпример:
Предположим, что C - непустой набор атрибутов. И B = C (следовательно, B также является непустым набором атрибутов, и каждый член B также является членом C и наоборот).
По аксиоме рефлексивности очевидно, что C -> C
выполнено. А так как B равно C, также имеет место B -> C
.
Предположим, что A является пустым набором атрибутов. Тогда ясно, что из A. невозможно определить непустой набор атрибутов (невозможно определить адрес клиента из ничего).
CA обозначает объединение C и A. Поскольку A пусто, CA равно C.
Следовательно, CA -> C
- это то же самое, что и C -> C
, что верно по аксиоме рефлексивности. И так как B равно C, также имеет место CA -> B
.
Для тех, кто не считает пустые множества допустимыми, более явный пример:
C = { street, telephone_number }
, B = C
, A = { street }
.
CA по-прежнему равен C, следовательно, CA -> B
сохраняется, так же как B -> C
. Но очевидно, что будет сложно определить номер телефона, если вы знаете только улицу, поэтому A -> B
не имеет места.
Поскольку есть люди, которые убеждены, что номер телефона человека функционально зависит от улицы, на которой он живет (что, если это правда, действительно нарушит мой контрпример), я немного поясню это.
Я живу в деревне, в которой много (то есть больше, чем одна) улиц. На каждой из этих улиц есть здания, которые обозначены номером. В каждом из этих зданий есть одна или несколько квартир (например, на третьем этаже слева), и в каждой из этих квартир проживает 1 или более человек. У всех этих людей есть телефон. Некоторые люди имеют общий телефон, другие нет.
Отношение, которое описывает людей в моей деревне, имеет атрибуты street
, building_number
, apartment_number
, telephone_number
среди прочих (имя человека, дата рождения, ...).
Поскольку во многих случаях одно значение карты улиц для многих людей (случаи, когда существует только одно здание с одной квартирой, где живет только один человек, является редким), это означает, что для каждой улицы имеется длинный список телефонных номеров (где «длинный» означает «более одного»).
Даже если используется полный адрес (улица, номер здания, номер квартиры), все равно можно найти несколько телефонных номеров, поскольку потенциально по этому адресу проживает более одного человека.
И поскольку некоторые люди пользуются телефоном, номер телефона также не является ключом для людей. И поскольку не исключено, что лица, использующие общий телефон, живут по разным адресам, между номером телефона и улицей даже нет функциональной зависимости.
С учетом вышеизложенного не существует функциональной зависимости между { street }
и
{ telephone_number }
, что означает, что между { street }
и { street, telephone_number }
также нет функциональной зависимости.
Следовательно, A -> B
не имеет места.