Связь. Характеристики связей

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

Рис. 4.3 Пример связи в методе Баркера.

На рисунке мы видим пример связи между двумя сущностями, студентом и группой. Рассмотрим характеристики, которыми может обладать связь. В первую очередь, поскольку связь является значимой для предметной области, мы должны пояснить это значение, указав роли участвующих в связи сущностей. В нашем примере роли достаточно тривиальны – группа состоит из студентов, а студент, в свою очередь, входит в группу. Для простых случаев имена ролей можно не указывать, или указывать только одно.

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

Наконец, связи также характеризуются обязательностью участия в них. Эту характеристику называют также «класс принадлежности», который может быть обязательным и необязательным. В нашем примере каждая группа обязательно должна включать студентов, иначе ее существование бессмысленно. Аналогично, каждый студент должен входить в состав какой-либо группы. То есть, класс принадлежности для обеих сущностей – обязательный. Необязательный класс принадлежности показывается при помощи изображения соответствующего конца связи пунктирной линией. В следующем примере мы рассмотрим эту ситуацию.

Рассмотрев характеристики связей, вернемся снова к степени связи. Связи «один к одному» встречаются достаточно редко, и всегда, когда в модели появляется такая связь, нужно рассмотреть ее внимательно. Если класс принадлежности для обеих сущностей обязательный, то возможно, что следует объединить их и сделать из двух сущностей одну. Это позволит упростить модель и повысить производительность базы данных (одна таблица обрабатывается быстрее, чем две). Если же каждая сущность имеет самостоятельное значение и самостоятельно участвует и в других связях, то такое объединение нецелесообразно. Вторая возможная ситуация для связи «один к одному» - ошибка в определении степени связи. При более подробном анализе часто выясняется, что для одной из сущностей степень связи будет не «один», а «много».

Несколько более сложна ситуация со связями «многие ко многим». Как мы помним из описания реляционной модели данных, одним из принципов является атомарность атрибутов. Одновременно мы помним, что связи между таблицами задаются при помощи внешних ключей, то есть значения первичного ключа главной таблицы переносятся в зависимую таблицу. Но как быть, если каждая запись подчиненной таблицы связана с несколькими записями главной (а именно это получается для связи «многие ко многим»)? Очевидно, что в поле внешнего ключа записать несколько значений не удастся – это нарушает принцип атомарности атрибутов. То есть, связь «многие ко многим» напрямую в реляционной СУБД реализовать нельзя. Как быть? Рассмотрим эту ситуацию на примере.

Допустим, что мы выяснили, что студенты могут заниматься не одним видом спорта, а несколькими. Кроме того, для упорядочения учета спортсменов мы решили составить список видов спорта, чтобы избежать возможных разночтений в их наименованиях. То есть, наша модель принимает вид, приведенный на рисунке 4.4.

Рис. 4.4 Связь «многие ко многим».

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

Такой вид модель может иметь на начальных этапах моделирования, пока мы не изучили предметную область достаточно подробно. В дальнейшем мы должны вернуться к связям со степенью «многие ко многим» и преобразовать их. Конечно, можно оставить эту задачу для этапа даталогического проектирования, но метод Баркера все же предполагает работу с ними на этапе анализа предметной области.

В самом простом случае мы должны просто заменить связь «многие ко многим» на так называемую граничную сущность, задача которой состоит только в связывании между собой других сущностей, а ее атрибутами являются первичные ключи связываемых сущностей. После ее добавления, ее можно связать с двумя исходными сущностями при помощи связей «один ко многим». Но если вместо простого механического добавления сущности провести и анализ предметной области, то может оказаться, что у граничной сущности, помимо первичных ключей, есть и другие атрибуты. Вот как это может получиться в нашем случае (Рис. 4.5).

Рис. 4.5 Результат преобразования связи «многие ко многим»

На рисунке мы видим, что у нас в модели появилась новая сущность «Занятие спортом», с которой и связаны студенты и виды спорта. Степени этих связей – «один ко многим», студент может заниматься различными видами спорта, аналогично, одни видом спорта могут заниматься различные студенты. Но кроме самого факта занятия тем или иным видом спорта мы можем хранить и факт наличия спортивного разряда по нему, а также дату его присвоения. Очевидно, что далеко не все студенты, занимающиеся спортом, имеют разряд, так что эти атрибуты сделаны необязательными. Подобным образом должны преобразовываться все связи со степенью «многие ко многим».


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: