"Проектирование реляционных баз данных." - читать интересную книгу автора (Джен Л. Харрингтон)

distributors (distributor, warehouse phone number)
Теоретическое определение третьей нормальной формы:
Отношение соответствует второй нормальной форме, и транзитивных зависимостей не существует.
Функциональные зависимости, присутствующие в исходном отношении, являют примером транзитивной зависимости.

ia 4 • Нормализация 59
Транзитивные зависимости
Транзитивная зависимость (transitive dependency) существует тогда, когда функциональные зависимости носят следующий характер:
д -> В и В -> С, поэтому А -> С
Именно это и происходит в отношении items. Единственной причиной того, что телефонный номер склада функционально зависит от номера товара, является функциональная зависимость поставщика от номера товара, а телефонного номера — от поставщика:
item number -> distributor distributor -> warehouse phone number
итивные зависимости берут свое название из математики, от свойства транзитивности, согласно которому: если а > Ь, а Ь > с, то а > с.
В исходном отношении items существуют два определителя, каждый из которых должен быть первичным ключом собственного отношения. Однако это не просто появление второго определителя, создающего транзитивную зависимость. Действительно имеет значение тот факт, что второй определитель не является кандидатом на ключ отношения. Рассмотрим, например, отношение
items (item number, UPC code, distributor, price)
Номер товара — это произвольное значение, которое Lasers Only присваивает Каждому товару. Код UPC -— это промышленный код, также уникальный для каждого товара. Функциональные зависимости этого отношения таковы:
Item number -> UPC code, distributor, price UPC code -> item number, distributor, price
Имеется ли здесь транзитивная зависимость? Нет, потому что второй определись подходит на роль ключа отношения (в Lasers Only можно было бы точно так же использовать в качестве первичного ключа код UPC). В этом отношении нет анома-•*Ии ввода, удаления или модификации; оно описывает только одну сущность — сущность товаров.
Следовательно, транзитивная зависимость присутствует только тогда, когда опреснитель, не являющийся первичным ключом, не подходит на роль ключа отношения.
Ьсли в отношении 2NF существует транзитивная зависимость, следует разбить
0 на два более мелких, в каждом из которых в качестве первичного ключа будет
Ступать один из определителей транзитивной зависимости. Определяемые ими
', рибуты становятся неключевыми атрибутами каждого из отношений. При этом
60
Часть первая • Теория
транзитивная зависимость и связанные с ней аномалии устраняются, а отношения становятся отношениями третьей нормальной формы.
Естественно, отношения второй нормальной формы без транзитивных зависимостей автоматически переводятся в разряд отношений третьей нормальной формы.
Нормальная форма Бойса-Кодда
Для большинства отношений вполне достаточно третьей нормальной формы. Однако могут встречаться отношения с особыми характеристиками, где возникают различные аномалии даже при соответствии отношения 3NF. Для работы в таких ситуациях были созданы нормальная форма Бойса-Кодда (BCNF, Boyce-Codd normal form) и четвертая нормальная форма (4NF).
если отношения соответствуют третьей нормальной форме и не обладают особыми характеристиками, для работы с которыми созданы BCNF и 4NF, эти отношения автоматически переходят в разряд отношений 4NF.
Самый простой способ понять смысл BCNF — начать с примера. Предположим, что в Lasers Only решено добавить в базу данных отношение для контроля за рабочим графиком служащих. Каждый служащий отрабатывает в магазине одну или две 4-часовые смены в день. На каждую смену (shift) служащему назначается одно определенное место (station) (например, конторский столик у входа в магазин или складское помещение). В течение смены на этом месте работает только один служащий.
Отношение для графика (schedule) может выглядеть следующим образом:
schedule (employee ID, date, shift, station, worked shift?)
При соблюдении правил этого графика (один человек на место в смену) существуют два варианта первичного ключа данного отношения: employee ID (идентификатор служащего) + date (дата) + shift и date + shift + station. Функциональные зависимости этого отношения таковы:
employee ID + date + shift -> station, worked shift? date + shift + station -> employee ID, worked shift?
He забывайте, что это справедливо только потому, что в течение каждой смень на каждом месте работает только один человек.
глава 4 • Нормализация
61
*к^ЦфИА'М>Ф{ При выборе первичного ключа разница между двумя кандидатами невелика. В подобных случаях можно выбрать любой из них.
В отношении schedule составные кандидаты на ключ перекрываются (в обоих ¦уиочах присутствуют сведения о дате и о смене). Нормальная форма Бойса-Кодда была создан3 для работы с отношениями, обладающими именно такой характеристикой.
Отношение соответствует нормальной форме Бойса-Кодда, если оно отвечает следующему правилу:
Отношение соответствует третьей нормальной форме, и все определители являются кандидатами на использование в качестве ключа.
BCNF считается более общим вариантом 3NF, поскольку при этом рассматриваются отношения с перекрывающимися кандидатами на ключ. В приведенном примере отношение schedule отвечает критериям BCNF, потому что два определителя действительно подходят на роль ключа.
Четвертая нормальная форма
Подобно BCNF, четвертая нормальная форма создана для работы с отношениями, имеющими особое свойство, которое проявляется не слишком часто. В данном случае речь идет о многозначной зависимости (multivalued dependency).
В качестве примера рассмотрим следующее отношение:
movie info (title, star, producer)
В кинокартине (movie) может играть более одной звезды (star); кроме того, У картины может быть более одного продюсера (producer). Одна и та же звезда может сниматься в нескольких кинокартинах; и продюсер может работать над несколькими Картинами (см. рис. 4.5). Таким образом, в состав ключа отношения должны входить 8се столбцы.
Title
Great Film Great Film Great Film Great Film Boring Movie JtorirtgMovie *HC 4.5.
Star