Создание отношений
Вы научитесь:
- создавать отношение;
- изменять отношение;
- переименовывать отношение;
- удалять отношение.
Понятие об отношениях
Большинство баз данных предназначены для моделирования некой части реального мира, которую называют пространством состояний (problem space). На логическом уровне объекты в пространстве состояний являются сущностями (entities) и связаны между собой через отношения (relationships). На физическом уровне Microsoft SQL Server представляет сущности в виде таблиц, а отношения – в виде ограничений внешнего ключа, которые определяют внешние ключи.
Реляционная модель
Многие думают, что реляционные базы данных называются "реляционными" ("relational"), поскольку между таблицами устанавливаются отношения (relationships). На самом деле это название произошло от английского термина "relation", означающего "отношение", который был введен доктором Э.Ф.Коддом для описания объекта, который в SQL Server реализован в виде таблицы.
Существует три типа отношений: один-к-одному, при котором каждая строка таблицы связана с нулем или одной строкой другой таблицы; один-ко-многим, при котором каждая строка таблицы связана с нулем, одной или несколькими строками другой таблицы; и много-ко-многим, при котором каждая строка первой таблицы связана с нулем, одной или несколькими строками второй таблицы, а каждая строка второй таблицы может быть связана с нулем, одной или несколькими строками первой таблицы.
Отношения один-к-одному встречаются довольно редко. Как правило, они используются в случае, когда набор атрибутов применяется к небольшому количеству экземпляров сущности. Например, лишь малая часть коллектива сотрудников компании может быть участниками команды по софтболу. Проектировщик базы данных может поместить все атрибуты софтбольной команды в отдельную таблицу, а затем создать отношение один-к-одному между ней и таблицей сотрудников.
С другой стороны, отношения один-ко-многим достаточно широко распространены. В нашем примере базы данных отношение один-ко-многим существует между таблицей PlantParts и таблицей Oils – любая строка в таблице PlantParts может быть связана с нулем, одной или нескольким строками таблицы Oils.
Отношения много-ко-многим также встречаются довольно часто. В нашем примере отношение много-ко-многим существует между таблицей Properties и таблицей Oils – любой вид масла может иметь несколько свойств, а любое свойство может относиться к нескольким видам масла.
SQL Server, подобно другим системам управления реляционными базами данных, оформляет отношения один-к-одному и один-ко-многим напрямую, а для реализации отношений много-ко-многим использует узловую таблицу. Узловая таблица состоит из первичных ключей таблиц с каждой из сторон отношения. Отношение один-ко-многим устанавливается между узловой таблицей и каждой из оригинальных таблиц. Отношения много-ко-многим разрешаются с использованием узловой таблицы.
Возвратные отношения
Большинство отношений в базе данных устанавливают между двумя различными таблицами. Однако бывает, когда таблица связывается сама с собой либо через отношение один-к-одному, либо через отношение один-ко-многим. Подобные отношения называются возвратными отношениями.
Возвратные отношения чаще всего применяются для реализации иерархий. Типичный пример – иерархия сотрудников в организации. Сотрудник может быть подчинен менеджеру, а менеджер, в свою очередь, может как сотрудник иметь вышестоящего менеджера. Это отношение оформляется путем включения первичного ключа таблицы сотрудников в качестве столбца таблицы и установки возвратного отношения один-ко-многим.
На уровне таблицы отношение оформляется путем включения уникального идентификатора, обычно первичного ключа, из таблицы на стороне одного (главную таблицу, или таблицу первичного ключа) в таблицу на стороне многих (зависимую таблицу, или таблицу внешнего ключа). Этот идентификатор называется внешним ключом.
Примечание. Уникальный идентификатор, который используется в качестве внешнего ключа, обычно является первичным ключом главной таблицы, однако он также может быть любым столбцом или группой столбцов, которые были объявлены уникальными.
SQL Server может контролировать отношения, которые вы установили в базе данных, осуществляя обслуживание целостности отношений. По умолчанию SQL Server будет отвергать любые изменения в первичном ключе строки из главной таблицы, которая имеет связанные строки в зависимой таблице.
Новинкой в Microsoft SQL Server 2000 является возможность каскадных изменений в главной таблице. Если вы укажете SQL Server осуществлять каскадные удаления для отношения, удаление строки в главной таблице заставит SQL Server удалить все связанные строки в зависимой таблице. Аналогично, если вы укажете SQL Server каскадировать обновления, изменение первичного ключа главной таблицы будет приводить к обновлению связанных столбцов в зависимой таблице.
Внимание! Некоторые схемы баз данных могут быть достаточно сложными. Использование каскадных удалений и изменений может облегчить сопровождение сложных структур данных, но SQL Server требует, чтобы каскадирование не было круговым. Например, удаление строки в таблице А может привести к удалению строки в таблице В, что, в свою очередь, вызовет удаление строки в таблице С. Однако не допускается устанавливать такой режим каскадирования, при котором удаление строки в таблице С приведет к удалению строки в таблице А.