Обсуждение:Нормальная форма Бойса — Кодда

Последнее сообщение: 8 лет назад от Евгений Мирошниченко в теме «Пример с теннисным кортом.»

Пример с теннисным кортом.

править

Мне кажется, пример с бронированием теннисных кортов неудачный.

Выделяют возможные первичные ключи {Тариф, ВремяНачала} и {Тариф, ВремяОкончания}. Разве эти атрибуты могут однозначно определить кортеж? Если каждый тариф уникален, тогда конечно, гарантировано не возникнет дубликатов в течение дня. Но если тарифы могут использоваться для разных кортов, то один и тот же тариф вполне может быть задействован в одно и то же время, так что такие первичные ключи не получатся. С другой стороны, если тарифы для каждого корта уникальны, то налицо функциональная зависимость тарифа от номера корта, то есть, зависимость атрибута от части первичного ключа. В этом случае отношение не находится даже в 2НФ. Прав ли я? Возможно, следует несколько уточнить описание процедуры бронирования, или выбрать другой пример? 77.72.142.2 14:38, 23 октября 2012 (UTC) MMKОтветить

Вы правы. Пример неудачный. Его неправильно адаптировали из статьи в англовики en:Boyce–Codd normal form, не дали всех пояснений и ограничений ◦ Евгений Мирошниченко ◦ 01:40, 24 октября 2012 (UTC)Ответить

Дополнительно хотелось бы получить уточнение (без ссылки на некорректность примера): какова логическая необходимость атрибута "Член клуба" в таблице {Номер корта, Время начала, Время окончания, Член клуба}? Членство в клубе предполагает игру только на каком-то конкретном (или нескольких) кортах? Или же члены клуба имеют возможность "захватить" чужое зарезервированное (зарезервированное раньше по времени имеется ввиду) время игры на каком-то корте? Мне показалось, что таблицы {Номер корта, Время начала, Время окончания, Член клуба} и {Тариф, Номер корта, Член клуба} логически описывают следующее: первая таблица - территориально-временное деление кортов, т.е. на каких кортах идет игра/какие пустые/и т.п., а вторая таблица - систему взимания платежей с пользователей кортами (т.е. скидки членам клуба, наценки за такой-то корт и т.п.). И кроме того, в двух таблицах, если между ними предполагается связь, по какому ключу эта связь пойдет? По атрибуту "Номер корта"? или по атрибуту "Член клуба"? Вроде бы может идти по любому из них, если таблицы сейчас записаны правильно. 79.111.20.217 20:22, 12 февраля 2013 (UTC)Ответить

Очевидно же, что членство в клубе влияет на тариф.213.247.143.81 06:24, 25 сентября 2014 (UTC)Ответить

Пример неверен. В статье упомянуты ключи отношения: {Номер корта, Время начала}, {Номер корта, Время окончания}, {Тариф, Время начала}, {Тариф, Время окончания}. В действительности достаточно посмотреть на таблицу, чтобы понять, что значения атрибутов "Время начала" и "Время окончания" уникальны, и, следовательно, эти ключи приводимы, т.е. не являются ключами. На самом деле потенциальных ключа здесь 2: {Время начала} и {Время окончания}. Также определение "переменная отношения находится в нормальной форме Бойса-Кодда тогда и только тогда, когда детерминанты всех ее функциональных зависимостей являются потенциальными ключами" является неверным, поскольку детерминантом ФЗ может быть любое надмножество ключей, а не только сами ключи.213.247.143.81 06:34, 25 сентября 2014 (UTC)Ответить

Ошибка по обоим пунктам. Во-первых, значения атрибутов "Время начала" и "Время окончания" уникальны для данного значения отношения, но не для переменной отношения. В общем случае они могут повторятся для разных кортов. Напомню, что правила нормальных форм действуют не для конкретных значений отношений, а для всех допустимых значений переменной отношения. Во-вторых, хотя в общем случае детерминантом ФЗ может быть любое надмножество ключей, но в определении BCNF специально оговорено, что ФЗ должна быть нетривиальная и неприводимая слева, то есть, иными словами, слева должен быть потенциальный ключ. Евгений Мирошниченко 06:53, 25 сентября 2014 (UTC)Ответить

Скажите, пожалуйста, если в начальное отношение добавить уникальный атрибут "ID", то перестанет выполняться требование 3-ей НФ (так как появится транзитивная (через тариф) зависимость: ID -> Номер корта) и отношение будет находиться во 2-ой НФ, я правильно понял? 46.53.203.146 11:49, 25 сентября 2016 (UTC)Ответить

Не думаю. По определению 3НФ ни один неключевой атрибут не находится в транзитивной функциональной зависимости от потенциального ключа. То есть речь про неключевые атрибуты. А в данном примере в исходном отношении вообще нет неключевых атрибутов, то есть все атрибуты входят в состав потенциальных ключей. И добавление ещё одного ПтК ID ничего в этом не меняет. Евгений Мирошниченко 13:12, 25 сентября 2016 (UTC)Ответить