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

Lovely Lady Handsome Man Lovely Lady Handsome Man Lovely Lady Precocious Child
Producer
Money Bags Money Bags Helen Pursestrings Helen Pursestrings Helen Pursestrings Helen Pursestrings
Отношение с многозначной зависимостью

62
Часть первая • Теория
Поскольку неключевых атрибутов в этом отношении нет, оно соответствует BCNF. Тем не менее в отношении возникает ряд аномалий:
¦ Нельзя ввести сведения о звездах, не зная хотя бы одного продюсера.
¦ Нельзя ввести сведения о продюсере кинокартины, не зная хотя бы одну звезду.
¦ При удалении только сведений о продюсере картины теряется информация о ее звездах.
¦ При удалении только сведений о звезде картины теряется информация о продюсерах картины.
¦ Имя каждого продюсера дублируется для каждой звезды кинокартины. Аналогично имя каждой звезды дублируется для каждого продюсера картины. Ненужное дублирование создает основу для аномалии модификации.
В этом отношении присутствуют как минимум две неродственные сущности: одна управляет взаимоотношением между кинокартиной и ее звездами, а другая управляет взаимоотношением между кинокартиной и ее продюсерами. В практическом смысле это и является причиной аномалий (фактически могут присутствовать еще и сущности кинокартин, звезд и продюсеров).
Теоретически же аномалии вызываются тем, что в одном отношении установлена многозначная зависимость, которую для перехода к четвертой нормальной форме необходимо устранить. Правило для четвертой нормальной формы гласит:
Отношение соответствует нормальной форме Бойса-Кодда, и многозначных зависимостей нет.
Многозначные зависимости
Многозначная зависимость существует, если каждому значению атрибута А соответствует конечное множество значений атрибута В, связанных с А, и конечное множество значений атрибута С, также связанных с А. Атрибуты В и С друг °т друга не зависят.
Рассматриваемое отношение является примером именно такой зависимост Названию (title) каждой кинокартины соответствует группа актеров (звезд), кот рые связаны с этим названием. Для каждого названия существует группа продюс ров, связанных с ним. Однако актеры и продюсеры друг от друга не зависят-
I
глава 4 • Нормализация 63
еичас главное — не позволить семантическим тонкостям языка проникнуть в теоретические основы баз данных. Да, это правда, что продюсеры субсидируют картины, в которых снимаются актеры, но с точки зрения взаимоотношений баз данных, прямой связи между первыми и вторыми нет.
Эту многозначную зависимость можно записать следующим образом:
title -» star title -» producer
а прочитать: "название многозначно определяет звезду, и название многозначно определяет продюсера".
$1Ь№МНе! Говоря точнее, функциональная зависимость — это многозначная зависимость особого рода, когда определяется одно значение, а не группа.
Для устранения многозначной зависимости и приведения этого отношения в соответствие с четвертой нормальной формой разделим его, поместив каждую часть зависимости в собственное отношение:
movie stars (title, star)
movie producers (title, producer)
С помощью такой структуры можно вводить и удалять сведения о звездах и продюсерах независимо друг от друга. Имена звезд и продюсеров фигурируют только однажды в каждой картине, в которой участвуют.
Нормализованные отношения
и производительность базы данных
' 1ри нормализации отношений в базе данных сущности выделяются в свои "ственные отношения, что позволяет вводить, модифицировать и удалять данные, оказывая воздействия ни на какие сущности, кроме изменяемой. Однако норма-^ация не лишена и негативных сторон.
' 1ри разбиении отношений так, что они представляются сочетанием первичных и CVi?HHX ключеи> всякий раз, когда в запросе считываются данные нескольких таблиц, приходится выполнять над отношениями операции соответствия. Операция, •Чно применяемая при этом, называется соединением (join).
64
Часть первая • Теория
В теории посредством соединения отыскиваются строки с теми значениями, ко. торые совпадают в двух таблицах, и каждый раз при обнаружении соответствия в результирующей таблице создается новая строка. Однако на практике соединение подразумевает манипуляцию большим объемом данных, чем можно было бы ожидать от простой комбинации двух соединяемых таблиц. Соединения больших таблиц (содержащих несколько сотен строк) могут в значительной степени замедлить функционирование СУБД.
Для понимания этого процесса необходимо в общих чертах представлять себе, каким образом в реляционной алгебре выполняется операция соединения (реляционная алгебра, или алгебра отношений,— это набор операций, используемых для манипулирования данными и для извлечения их из отношений). Как и при выполнении всех других операций реляционной алгебры, результатом соединения является новая таблица.
Эквисоединения
Новые строки образуются с помощью самого простого соединения при соответствии данных в двух исходных таблицах. Поскольку отыскиваются строки с равными значениями, соединение такого рода называется эквисоединением (equi-join) (или натуральным эквисоединением (natural equi-join)). В качестве примера рассмотрим две таблицы, изображенные на рис. 4.6.
Обратите внимание на то, что столбец ID number является первичным ключом таблицы customers и внешним ключом таблицы orders. Таким образом, столбец ID number таблицы orders служит для связи заказов с клиентами, которым те принадлежат.
Предположим, что нужно узнать имена клиентов, разместивших заказы. Для этого необходимо соединить две таблицы, создав комбинированные строки для каждого соответствия идентификационных номеров. В терминах теории баз данных две таблицы соединяются по идентификационному номеру. В результате будет получена таблица, приведена на рис. 4.7.
customers orders
ID first last order ID order order
number name name number number date total
001 Jane Doe 001 002 10/10/99 250.65
002 John Doe 002 002 2/21/00 125.89
003 Jane Smith 003 003 11/15/99 1567.99
004 John Smith 004 004 11/22/99 180.92
005 Jane Jones 005 004 12/15/99 565.00