Что является минимальным доказательством того, что отношение к базе данных отсутствует в BCNF?
У меня есть следующие функциональные зависимости (они представляют все функциональные зависимости в моем отношении):
(1) BrokerName -> Office
(2) StockName -> Dividend
(3) InvestorId -> BrokerName
(4) InvestorId, Stockname -> Quantity
(5) InvestorId, Stockname -> Office
Я знаю, используя методы из этого видео на YouTube, что (InvestorId, Stockname)
мой единственный кандидатный ключ.
Согласно решению @nvogel в этой ветке SO:
Отношение R находится в BCNF, если для каждого нетривиального FD (X->A), удовлетворяемого R, выполняется следующее условие:
(а) X является суперключем для R
Поскольку я знаю, что (1), (2) и (3) - все нетривиальные FD, левые части которых не являются суперключами или ключами-кандидатами в этом отношении, это все, что мне нужно сказать, чтобы доказать, что мое отношение не BCNF? Является ли этот процесс правильным методом демонстрации того, что отношение отсутствует в BCNF, или есть лучший способ?
1 ответ
Нам нужно знать все FD (функциональные зависимости), которые используются для определения CK (ключей-кандидатов), а не только те, которые в каком-то списке. Посмотрите (правильное и общее) определение CK или алгоритм поиска CK (в опубликованном учебнике, а не на видео на YouTube). Является ли ваш список соответствующим образом закрытием (все FD, которые содержат) или прикрытием (FD, которые подразумевают FD в замыкании через аксиомы Армстронга), какое бы определение или алгоритм ни использовали? Потому что если нет, то вы не можете сказать, что знаете набор CK. Ваше первоначальное утверждение о том, что "у вас есть следующие функциональные зависимости", недостаточно. Ваше последующее утверждение о том, что "они представляют все [нетривиальные?] Функциональные зависимости" неверно - если они сохраняются, InvestorId, Stockname -> Office также сохраняется. Ваше последующее добавление пункта 5 в список не помогает - есть и другие. Но даже если аксиомы Армстронга не добавят никаких FD в список, так что не будет других, которые удерживают, когда перечисленные держат, почему вы думаете, что данный список является исчерпывающим в вашем дизайне, если вы его не показывали?
Мы можем знать, что некоторые FD держатся, и аксиомы Армстронга дают все FD, которые должны держаться, если они это делают, но чтобы знать, что данные FD образуют покрытие, мы должны также показать, что FD, которые не генерируются аксиомами Армстронга, не держатся. Обратите внимание, что если X функционально не определяет Y, то никакое подмножество X не определяет Y & X не определяет никакого подмножества Y.
Точно так же это определение BCNF говорит о всех нетривиальных FD, которые содержатся, а не только о некоторых или тех, которые находятся в обложке.
С другой стороны, все, что вам нужно, чтобы показать, что это конкретное определение BCNF нарушено, - это то, что некоторый FD, который хранится, не является суперключем. Итак, учитывая, что это единственный CK - да, достаточно одного из 1-3, поскольку ни один из них не является суперключем.
PS Найти и следовать (хорошему) опубликованному учебному пособию по информационному моделированию и проектированию баз данных. Десятки онлайн бесплатно в формате PDF. Посмотрите бесплатный онлайн-курс Стэнфордского университета и его видео на YouTube (и учебник его профессора).