Теперь пришло время поговорить о кратностях связей. Так, частное определение связи, которое мы только что рассмотрели, относится лишь к связям с кратностью «один-ко-многим». Существуют, однако, и другие виды кратностей.
Пусть имеется связь между сущностями А и Б.
О связи говорят, что она имеет кратность «один-ко-многим», если каждый элемент сущности А может ссылаться только на один элемент сущности Б. При этом на каждый элемент сущности Б могут одновременно ссылаться более одного элемента из сущности А. | ||
Так, каждая книга издаётся только одним издательством. При этом каждое издательство может издавать одновременно несколько книг.
Если сущности соответствует имя существительное во множественном числе, то связи соответствует глагол. Начинать строить предложение можно с любой из двух сущностей (в зависимости от того, с классификатора или с классифицируемой сущности мы начинаем строить предложение, меняются падежи и залог глагола). Например:
Очень важно проработать эти предложения с заказчиком. Покажите ему черновик диаграммы и убедитесь, что предложения составлены правильно.
| ||
Как правило, очевидно, какой глагол характеризует связь. Однако в некоторых случаях на диаграмме их можно подписывать.
Говоря о связи, недостаточно указать, между какими сущностями она установлена. Связь кратности «один-ко-многим» – это всегда связь между первичным ключом классификатора (сторона «один») и неключевым полем классифицируемой сущности (сторона «многие»). При этом атрибут-внешний ключ должен быть назван тем же существительным, что и классификатор, но в единственном числе.
Обратите внимание, что внешний ключ классифицируемой сущности всегда должен иметь тот же тип данных, что и первичный ключ классификатора. В случае Битрикса это всегда целое число (N-Signed Integer).
В нотации IDEF1x связь обозначается штриховой линией. Со стороны «многие» рисуется чёрный кружок.
Раньше вместо кружка использовалась развилка, которая более наглядно показывала «многие» (см. линию на рисунке внизу). Однако проектировщики, видимо, ленились аккуратно отрисовывать развилку, и она превращалась в кляксу. Так и появилась вместо развилки жирная точка.
Теперь вы никогда не забудете, с какой стороны ставить точку. | ||
Для создания связи в Visio необходимо перетащить на рабочее поле фигуру Relationship и подтащить её концы по очереди к соответствующим сущностям (у них должна появляться красная рамка). После этого надо кликнуть на связь, перейти на вкладку Definition, выделить ключевое поле у классификатора (Parent) и поле внешнего ключа у классифицируемой сущности (Child), нажать кнопку Associate. После этого на форме появится линия связи, а напротив внешнего ключа в классифицируемой сущности появляется маркер (FK) (Foreign key).
Вы, наверное, обратили внимание, что до нажатия кнопки Associate классифицируемая сущность имеет закруглённые уголки. В стандарте IDEF1x прямоугольниками с закруглёнными уголками обозначаются зависимые сущности. В контексте Битрикс-проектирования мы будем их использовать только при дискриминации и развязках (о них чуть позже). | ||
Внимание! Вопреки расхожему мнению, концы линии связи на диаграмме не указывают на связываемые атрибуты. Понять, какие поля связываются, просто: со стороны «один» это всегда первичный ключ, а со стороны «многие» – это атрибут, названный тем же существительным, что и классификатор, но в единственном числе. | ||
Если внешний ключ связи является опциональным (необязательным) атрибутом, то такая связь также называется необязательной связью. | ||
Необязательные связи в IDEF1x помечаются ромбиком со стороны классифицируемой сущности. Visio делает это автоматически.
Например, в системе ведётся база данных покупателей. Юридические лица могут выбрать из списка банк, в котором у них открыт расчётный счёт, тогда как физические лица практически никогда этого не делают.
В данном примере предложение «Покупатели обслуживаются в Банках» заменяется на «Покупатели могут обслуживаться в Банках».