Связь многие — ко — многим (Н:М)

Следующим типом связи является связь многие — ко — многим (ЛГ:М), которая отражает многозначную зависимость объектов друг от друга. Такую связь достаточно сложно обрабатывать, поскольку возникает множество аномалий обработки. Например, при удалении одного экземпляра любого из двух объектов, участвующих в установлении связи, возможно каскадное удаление всех связанных объектов другого объекта. Но наличие такового же правила в обратную сторону приведет к циклическому удалению данных, что может привести к их потере. Именно поэтому в базах данных реализуются защитные механизмы ограничения ссылочной целостности, но также на уровне реализации связей между объектами ограничивается возможность применения связи многие — ко — многим.

Соответственно, с учетом этих особенностей ее использования, данный тип связи реализуется только на уровне концептуального и логического моделирования базы данных. Это позволяет разработчику описывать информационную структуру предметной области, не загромождая ее вспомогательными элементами, которые появятся в результате нормализации логической модели базы данных. В результате, на уровне физического представления базы данных и ее модели связь многие — ко — многим реализована не будет и се представление будет отражено множественной связью между атрибутами структурных элементов (сущностей) или, что чаще встречается, специальным структурным элементом — сущностью-связкой.

К связи многие — ко — многим (Л^:М) относят такое взаимодействие структурных элементов, где один экземпляр одного из элементов может быть связан со множеством экземпляров другого элемента и то же определяется в обратном направлении.

Примером такой связи в рассматриваемой предметной области может быть взаимодействие информационных объектов "Клиент" и "Адрес доставки" (рис. 2.40).

Рис. 2 АО. Пример схематичного представления связи №М


Установление такой связи вполне обосновано. Указывая адреса доставки, клиент может указать много разных адресов, на которые необходимо доставить соответствующие заказы. Конечно, когда речь идет о доставке какого-то конкретного заказа, то указываться будет один адрес, но тогда будет рассматриваться связь между объектами "Заказ" и "Адрес- доставки", представляя связь "Доставка заказа", а не "Клиентские адреса доставки". Соответственно, в направлении от клиента к адресу доставки будет указываться стрелка с двумя концевыми элементами, отражая множественность связи в этом направлении.

В другом направлении, от адреса доставки к клиенту, связь тоже будет множественной, поскольку на один и тот же адрес доставки могут быть доставлены заказы разных клиентов. Например, если клиентами являются родственники, проживающие по одному адресу, или, когда рассматривается самовывоз заказа клиентом из фиксированного пункта выдачи, обладающего конкретным адресом[1].

Так же, как и для других типов связи, подтверждением правильности и обоснованием принятого решения является пример табличного представления связи между объектами через указание конкретных экземпляров данных (табл. 2.13).

Таблица 2.13

Пример данных, но клиентским адресам доставки

№ п/п

Клиент

Адрес доставки

1

Иванов И. П.

127083. г. Москва, ул. Верхняя Масловка, д. 21

2

Скворыга А. И.

127083, г. Москва, ул. Верхняя Масловка, д. 21

3

Самойлова П. А.

109542, г. Москва, Рязанский пр-т, д. 97. кв. 115

4

Самойлов Р. Д.

109542, г. Москва, Рязанский пр-т, д. 97, кв. 115

5

Иванов И. П.

109542, г. Москва, Рязанский пр-т, д. 99

...



Как несложно заметить, в примере возможных данных первые два клиента (Иванов И. П. и Скворыга А. И.) планируют получать заказы в одном и том же пункте выдачи, а два других клиента (Самойлова П. А. и Самойлов Р. Д.), являясь родственниками, указали доставку товара по одинаковому адресу, где они проживают. При этом, клиент Иванов И. П. указал также еще один адрес доставки одного из своих заказов, что привело к возникновению ситуации, когда один клиент может получить заказ по разным адресам, один из которых должен быть указан в заказе, что, естественно, реализуется отдельной связью между объектами "Адрес доставки" и "Заказ".