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

release-date
genre
5Ю—'
flctor *actor_numb actor_name
TZ
Producer
*producer_name s tud i о
РИС. 2.9. Основные сущности и их взаимоотношения в базе данных Lasers Only
Работа со взаимоотношениями "многие-ко-многим"
Как было отмечено выше, при использовании взаимоотношений типа многие-ко-многим" возникает ряд проблем. Первая вполне очевидна: в реляционной модели данных нельзя использовать непосредственно взаимоотношения "многие-ко-многим , поскольку она ограничена взаимоотношениями "один-к-одному" и "один-ко-многим". Это значит, что при применении реляционной СУБД взаимоотношения многие-ко-многим , идентифицированные в среде базы данных, нужно заменить совокупностью взаимоотношений "один-ко-многим".
Уловить наличие второй проблемы несколько сложнее. Чтобы понять, о чем идет речь, рассмотрим взаимоотношение между заказом, который Lasers Only делает оптовому поставщику, и товарными пунктами этого заказа. Между заказом и товаром Устанавливается взаимоотношение типа "многие-ко-многим", так как в каждом заказе мо*кет указываться несколько товаров, а с течением времени каждый товар, вполне возможно, будет фигурировать во многих заказах. Всякий раз, когда Lasers Only зака-Ывает некоторый товар, число копий этого товара различно и зависит от предполагаемой потребности в нем на момент выдачи заказа.
Возникает вопрос: где следует хранить сведения о количестве заказываемых варов.'' ото значение не может быть частью сущности заказов, поскольку зависит от вара, о котором идет речь. Но оно не может быть и элементом сущности товаров ^Пунктов), так как зависит от конкретного заказа.
2 Зак. 523
ш
24
Часть первая • Теория
Продемонстрированное выше называется данными взаимоотношения (relationship data) — данными, относящимися ко взаимоотношению между двумя сущностями, а не к самим сущностям. Однако у взаимоотношений не может быть атрибутов. Поэтому необходимо иметь специальную сущность, которая представляла бы взаимоотношение, установленное между двумя другими сущностями, т. е. сущность, которой могли бы принадлежать данные взаимоотношения.
Составные сущности
Сущности, предназначенные для представления взаимоотношений между двумя другими сущностями, называются составными (composite). В качестве примера действия составных сущностей рассмотрим взаимоотношение между заказом, выдаваемым клиентом Lasers Only, и пунктами данного заказа. Это взаимоотношение типа "многие-ко-многим": в заказе может содержаться несколько пунктов, а с течением времени один и тот же пункт может быть включен в несколько заказов.
Теперь возникает необходимость в сущности, сообщающей о том, что конкретное наименование фигурирует в конкретном заказе. На рис. 2.10 показаны три экземпляра заказов и три экземпляра товарных пунктов. В первом заказе клиента 0985 содержится только один пункт (пункт 0244). Во втором заказе клиента 0985 содержится вторая копия пункта 0244, а также пункт 10101. В третьем заказе, который относится к клиенту 1212, тоже два пункта (10101 и 00250).

Customer #0985
Item #0244
Customer #09085 Item #10101 '
Customer #1212 Item #00250
Customer #0985;% , ,„ Item #09244
¦ '¦¦¦.¦:; ...v-.
Customer #1212 J ¦v Hem #10101 -
Item #09244 Die Hard . $29.95
Item #10101 Gone With the Wind S89.99 i
Item #00250 .-Flowers for Algernon ¦ S29.95 < """
РИС. 2.10. Использование экземпляра составных сущностей
для изменения взаимоотношений "многие-ко-многим" на взаимоотношения "один-ко-многим"
Глава 1 • Сущности и взаимоотношения данных 25
Таким образом, в трех заказах запрошены пять товарных пунктов. Поэтому в сере-яяне диаграммы находятся пять экземпляров составной сущности, которую будем называть сущностью пунктов ассортимента (line item) (рассматривая ее в качестве пункта ассортимента в упаковочном листе). Сущность пунктов ассортимента создана исключительно для представления взаимоотношения между заказом и товарным пунктом.
Каждый заказ связан с одним экземпляром пунктов ассортимента для каждого пункта заказа. В свою очередь, каждый пункт (товар) связан с одним экземпляром пунктов ассортимента для каждого заказа, в котором фигурирует этот пункт. Каждый экземпляр пунктов ассортимента связан с одним и только одним заказом; кроме того, он связан с одним и только одним товарным пунктом. Таким образом, взаимоотношение между заказом и его пунктами ассортимента является взаимоотношением "один-ко-многим" (в одном заказе много пунктов ассортимента), как и взаимоотношение между пунктом и заказами, в которых тот фигурирует (один товарный пункт присутствует во многих пунктах ассортимента). Появление составной сущности устранило взаимоотношение "многие-ко-многим", превратив его в два взаимоотношения "один-ко-многим".
При необходимости составную сущность можно применять для хранения данных взаимоотношения. В приведенном примере можно было предусмотреть атрибут количества заказанных товаров, флаг для указания отправки товара и дату отправки.
Документирование составных сущностей
В некоторых вариантах метода Чена символом составной сущности на диаграммах является комбинация прямоугольника, используемого для сущности, и ромба — для взаимоотношения (см. рис. справа).
В методе информационного проектирования специального символа составной сущности нет.
Устранение взаимоотношений "многие-ко-многим" в Lasers Only
Для устранения взаимоотношений типа "многие-ко-многим" в Lasers Only разработчик базы данных должен заменить каждое взаимоотношение "многие-ко-многим" вставной сущностью и двумя взаимоотношениями типа "один-ко-многим". Как мож-видеть на рис. 2.11, появляются три новые сущности:
¦ Order_lines (партии заказов). Сущностью партий заказов представляется один пункт, фигурирующий в одном заказе. У каждого заказа может быть много партий, но конкретная партия заказа указывается в одном и только одном заказе. Аналогично, в партии заказов содержится один и только один пункт, но тот же самый пункт может фигурировать во многих партиях заказов, каждая из которых соответствует собственному заказу.

26
Часть первая • Теория
¦ Performance (исполнение). Сущностью исполнений представляется один актер, играющий в одном фильме. Каждое исполнение относится
к одному и только одному фильму, хотя в фильме может быть много исполнений (по одному для каждого актера, играющего в фильме). И наоборот, актер связан с одним исполнением в каждом фильме, в котором он играет, хотя каждое исполнение относится к одному и только одному фильму.
¦ Production (произведение). Сущностью произведений представляется один продюсер, работающий над одним фильмом. Продюсер может принимать участие в создании многих произведений, в то время как каждое произведение связано с одним и только одним продюсером. Взаимоотношение с пунктами указывает на то, что каждый фильм может быть создан многими продюсерами, но каждое произведение связано только с одним товарным пунктом.
Customer