Чаще всего БД содержит больше одной таблицы.
Рассмотрим пример.
Существует отдел, занимающийся обработкой звонков, которые поступают на разные линии. Линии обслуживают конкретные операторы, состоящие в различных группах, которые контролируют супервайзеры.
Таким образом, уже можно назвать некоторые самостоятельные объекты (рисунок 1):
- Сотрудники;
- Группы;
- Должности;
- Линии;
- Звонки.
В такой базе данных некоторая информация одних таблиц располагается в других, т.е. они связаны между собой.
В рассматриваемом примере между собой можно связать все таблицы. Для правильного связывания рассмотрим типы связей.
Существует три вида связей:
- связь «Один-к-одному»
- связь «Один-ко-многим»
- связь «многие-ко-многим»
Связь «Один-к-одному»
Связь один-к-одному создается в случае, если ключевой столбец (идентификатор) принадлежит другой таблице, для которой также является ключевым или его уникальность задается свойствами столбца (значения в разных строках не могут повторяться).
На практике такая связь используется редко. Например, связь «один-к-одному» может использоваться, если нужно выполнить разделение данных одной таблицы на некоторое число отдельных таблиц для обеспечения безопасности.
Например, пусть базу данных используют несколько аналитиков и менеджеров. Значит, любой из них может получить доступ к персональным данным, например, таблицы «Сотрудники» (рисунок 2).
Для предотвращения утечки конфиденциальной информации можно в отдельную таблицу перенести информацию о паспортных данных, а доступ к такой таблице предоставить определенному кругу сотрудников (рисунок 3).
Связь «Один-ко-многим»
При связи «один-ко-многим» одна запись одной таблицы связана с несколькими записями другой таблицы.
Например, связь между должностями и сотрудниками является связью «один-ко-многим» (рисунок 4).
В таблице Должность записи должностей являются уникальными, т.к. не имеет смысла повторное создание имеющейся записи. В таблице Сотрудники записи также уникальные, но некоторые сотрудники могут занимать одинаковую должность.
Значок ключа на конце связи показывает, что таблица, к которой он прилегает, находится на стороне «один» (первичным ключом является связанный столбец), а знак бесконечности находится на стороне «многие» (этот столбец – внешний ключ).
Связь «многие-ко-многим»
Когда несколько записей одной таблицы соответствуют нескольким записям другой таблицы, такую связь называют «многие-ко-многим» и организовывают с помощью связывающей таблицы.
Связь «многие-ко-многим» существует между таблицами Сотрудники и Линии (рисунок 5).
На рисунке 5 видно, что существует 2 связи «один-ко-многим» (одним сотрудником может обрабатываться несколько телефонных линий и одна линия может обрабатываться несколькими сотрудниками), а в совокупности получается связь «многие-ко-многим».
Назначение связей
Связи играют роль важнее информации размещения данных в таблицах. Разработчикам они необходимы для того, чтобы поддерживать целостность баз данных.
Если связи настроены правильно, можно с уверенностью сказать, что никакая информация не потеряется.
Например, нужно удалить одну группу из таблицы Группы (рисунок 1). Если бы связь не существовала, то для сотрудников, принадлежащих к этой группе, остался бы идентификатор группы, которая не существует. Наличие связи предотвратит выполнить удаление группы, если она присутствует во внешних ключах других таблиц. В таком случае необходимо сотрудников перенести в другие группы, а потом выполнить удаление ненужной записи. Вследствие этого связи еще называют ограничениями.