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

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

R(A,B,C,D,E) where functional dependencies are AB -> C, DE -> C, and B -> D.

Я пытаюсь здесь с разными примерами и сценариями и получил это. Не уверен, что я думаю совершенно неправильно. Но вот я иду.

Employee(employee_id, firstname, lastname, title, department)
AB -> C,   employee_id, firstname -> lastname   (lastname can be determined by employee_id and firstname). lefthand side is a key so no bcnf violation?
DE -> C,   title, department -> lastname   (lastname of specific employee can NOT be determined by title and department. a bcnf violation, because lefthand side contain no key attribute?
B -> D,    firstname -> title   (title of employee can not be determined by only firstname, because it can exist several employees with same firstname? and lefthand side has no key attribute, => bcnf violation?

Теперь мой вопрос: эти FD для вышеуказанного отношения ДОЛЖНЫ быть одинаковыми для каждого примера, который я тестирую? Или это зависит от каждого отношения и от того, какие атрибуты они имеют и в каком порядке?

Если я попробую другой пример с тем же FD и отношением.

Movie(movieName, published, starName, age, address)
movieName, published -> starName    (starnName can be determined from movieName and published. no bcnf violation?
age, address -> starName  (starName cannot be determined from age and address. bcnf violation?
published -> age  (age of the movie can be determined from published. No bcnf violation?

Я был бы очень признателен за некоторые рекомендации.

Спасибо.


person jabbeboy    schedule 07.12.2016    source источник


Ответы (1)


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

Функциональная зависимость — это не «определение» одной вещи от другой в каком-то повседневном смысле.

В заданной таблице FD сохраняется, когда каждое значение подстроки для определяющего набора атрибутов всегда появляется с одним и тем же значением подстроки для определенного набора атрибутов. Таблица находится в НФБК, если каждый детерминант нетривиального FD является суперключом. (Выучите определения этих терминов.)

На практике мы определяем, какие столбцы функционально определяются другими столбцами данной таблицы, затем выполняем расчеты и используем то, что получается. На сложном примере мало чему можно научиться. Каждая таблица-пример, которую вы приводите в своем вопросе, имеет определенное значение и, учитывая возникающие ситуации, она не имеет того набора FD. Используя здравый смысл, в Employee, employee_id определяет все атрибуты, и, вероятно, никакие другие FD не содержат, кроме тех, которые должны храниться, когда эти атрибуты существуют. Используя здравый смысл, в Movie многие фильмы могут иметь одно и то же имя, и единственными FD являются {published} -> {age} и те, которые следуют из него.

Каждый раз, когда вы делаете отношение "R(A,B,C,D,E), где функциональные зависимости AB -> C, DE -> C и B -> D" и те, которые они подразумевают (предположительно, R, A, B, C, D и E являются заполнителями для фактических имен), затем ключи-кандидаты и суперключи, и находится ли он в BCNF и как вы можете разложить его всегда будет то же самое (с точки зрения A, B, C, D & E).

person philipxy    schedule 07.12.2016
comment
Ага окей. Таким образом, это справедливо только для этого отношения с FD, но, скорее всего, оно будет другим, если FD вместо этого будет: AB->C, C->E, DB, например? Да, я, вероятно, потрачу много часов, пытаясь понять эти определения, и все, что смогу. Спасибо - person jabbeboy; 07.12.2016
comment
См. stackoverflow.com/a/27504915/3404097. Также мой расширенный ответ. Нет никакой замены запоминанию определений, теорем/правил и алгоритмов, но примеры и практика очень помогают. - person philipxy; 07.12.2016
comment
Что допустимо только для этого отношения и FD? Что изменилось бы, если бы вместо этого держались FD AB-›C, C-›E, D-›B? Если вы имеете в виду возможные разложения BCNF, то да. Но вам не нужно знать, как возникли ФД, чтобы использовать алгоритм декомпозиции. - person philipxy; 10.12.2016