Определение связей между сущностями предметной области.
То число сущностей, которое может быть ассоциировано через набор связей с другой сущностью, называют степенью связи. Рассмотрение степеней особенно полезно для бинарных связей. Могут существовать следующие степени бинарных связей:
- Один к одному (обозначается 1 : 1 ). Это означает, что в такой связи сущности с одной ролью всегда соответствует не более одной сущности с другой ролью. Таковой является, например, связь "руководит" между субъектами Сотрудник и Отдел, поскольку в каждом отделе может быть только один начальник, а сотрудник может руководить только в одном отделе.
- Один ко многим ( 1 : n ). В данном случае сущности с одной ролью может соответствовать любое число сущностей с другой ролью. Такова связь ОТДЕЛ-СОТРУДНИК. В каждом отделе может работать произвольное число сотрудников, но сотрудник может работать только в одном отделе.
- Много к одному (n : 1 ). Эта связь аналогична отображению 1 : n. Предположим, что какое-либо предприятие строит свою деятельность на основании контрактов, заключаемых с заказчиками. Этот факт отображается в модели "сущность-связь" с помощью связи КОНТРАКТ-ЗАКАЗЧИК, объединяющей сущности КОНТРАКТ(НОМЕР, СРОК_ИСПОЛНЕНИЯ, СУММА) и ЗАКАЗЧИК(НАИМЕНОВАНИЕ, АДРЕС). Так как с одним заказчиком может быть заключено более одного контракта, то связь КОНТРАКТ-ЗАКАЗЧИК между этими сущностями будет иметь степень n : 1.
- Многие ко многим ( n : n ). В этом случае каждая из ассоциированных сущностей может быть представлена любым количеством экземпляров. Пусть на предприятии для выполнения каждого контракта создается рабочая группа, в которую входят сотрудники разных отделов. Поскольку каждый сотрудник может входить в несколько (в том числе и ни в одну) рабочих групп, а каждая группа должна включать не менее одного сотрудника, то связь между сущностями СОТРУДНИК и РАБОЧАЯ_ГРУППА имеет степень n : n.
Другой важной характеристикой связи помимо ее степени является класс принадлежности входящих в нее сущностей или кардинальность связи. Так как в каждом отделе обязательно должен быть руководитель, то каждой сущности "ОТДЕЛ" непременно должна соответствовать сущность "СОТРУДНИК". Однако, не каждый сотрудник является руководителем отдела, следовательно в данной связи не каждая сущность "СОТРУДНИК" имеет ассоциированную с ней сущность "ОТДЕЛ". Таким образом, говорят, что сущность "СОТРУДНИК" имеет обязательный класс принадлежности (этот факт обозначается также указанием интервала числа возможных вхождений сущности в связь, в данном случае это 1,1), а сущность "ОТДЕЛ" имеет необязательный класс принадлежности (0,1).
Если существование сущности x зависит от существования сущности y, то x называется зависимой сущностью (иногда сущность x называют "слабой", а "сущность" y - сильной). В качестве примера рассмотрим связь между сущностями РАБОЧАЯ_ГРУППА и КОНТРАКТ. Рабочая группа создается только после того, как будет подписан контракт с заказчиком, и прекращает свое существование по выполнению контракта. Таким образом, сущность РАБОЧАЯ_ГРУППА является зависимой от сущности КОНТРАКТ.
При установлении связей между сущностями, в одной из них определяется дополнительный атрибут - внешний ключ:
- если сущность С связывает сущности А и В, то она должна включать внешние ключи, соответствующие первичным ключам сущностей А и В;
- если сущность В обозначает сущность А, то она должна включать внешний ключ, соответствующий первичному ключу сущности А.
Процесс определения связей целесообразно начинать с выделения связей для стержневых (или основных) сущностей предметной области. В нашем случае к стержневым можно отнести сущности Читатель и Книга.
1. Связи сущности Книга:
- "Выпущена" с сущностью Издательство. Каждый конкретный экземпляр книги может быть выпущен одним Издательством, и в то же время, каждым издательством может быть выпущено множество книг, хранящихся в данной библиотеке. Исходя из этого, определяем связь как многие к одному. Каждая книга обязательно выпущена каким-либо издательством, но могут существовать издательства, книги которых не хранятся в данной библиотеке. Поэтому сущность Издательство имеет обязательный, а сущность Книга необязательный классы принадлежности. Обе эти сущности являются независимыми, поскольку уничтожение книги не приведет к закрытию издательства, а при закрытии издательства, ранее выпущенные книги продолжают жить своей жизнью. Для установления данной связи в набор атрибутов сущности Книга необходимо добавить атрибут, значениями которого будут первичные ключи связанных экземпляров сущности Издательство.
- "Написана" с сущностью Автор. Аналогична ранее рассмотренной связи. Тип связи - многие к одному; сущность Автор имеет обязательный, а сущность Книга необязательный классы принадлежности; обе эти сущности являются независимыми. Для установления данной связи в набор атрибутов сущности Книга необходимо добавить атрибут, значениями которого будут первичные ключи связанных экземпляров сущности Автор.
- "Хранится" с сущностью Место хранения. Каждая книга в определенный момент времени может храниться только на одной полке, а на каждой полке может стоять несколько книг. Здесь связь - многие к одному. За книгой обязательно должна быть закреплена определенная полка, но к некоторым полкам может быть не приписано ни одной книги. Поэтому сущность Место хранения имеет обязательный, а сущность Книга необязательный классы принадлежности. Перестановка книги на другую полку не ведет к уничтожению данной, а при порче полки книги с нее переносятся на другие полки: обе сущности являются независимыми. Для установления данной связи в набор атрибутов сущности Книга необходимо добавить атрибут, значениями которого будут первичные ключи связанных экземпляров сущности Место хранения.
- "Выдана" с сущностью Выдача книг. Каждая книга может быть выдана неоднократно, и в каждой операции выдачи может участвовать только одна книга. Исходя из этого, определяем связь как один ко многим. В каждой операции по выдаче книг обязательно участвует какая-либо книга, и в то же время могут спокойно существовать книги, которые ни разу не выбирались читателями библиотеки. Поэтому сущность Выдача книг имеет обязательный, а сущность Книга необязательный классы принадлежности. Аннулирование записи о выдаче книги не означает ее исчезновения из библиотеки, а при уничтожении книги теряют актуальность все записи о выдаче данной книги. Вследствие этого, сущность Книга является независимой, а сущность Выдача книг зависимой. Для установления данной связи в набор атрибутов сущности Выдача книг необходимо добавить атрибут, значениями которого будут первичные ключи связанных экземпляров сущности Книга.
2. Связи сущности Читатель:
- «Пользуется книгой» с сущностью Выдача книг. Каждый читатель может взять книги в библиотеке многократно, но каждый раз книга выдается только в одни руки. Поэтому связь - один ко многим. Книга может быть выдана только конкретному читателю, при этом могут существовать читатели ни разу не бравшие книг. Поэтому сущность Выдача книг имеет обязательный, а сущность Читатель необязательный классы принадлежности. Как и в случае связи сущности Книга с сущностью Выдача книг, аннулирование записи о выдаче книги не означает ее исчезновения из библиотеки. При уходе же читателя из библиотеки не имеет смысла хранить сведения об истории выданных ему ранее и сданных им книг. Вследствие этого, сущность Читатель является независимой, а сущность Выдача книг зависимой. Для установления данной связи в набор атрибутов сущности Выдача книг необходимо добавить атрибут, значениями которого будут первичные ключи связанных экземпляров сущности Читатель.
Больше связей между сущностями рассматриваемой нами предметной области не существует.