Программирование в Microsoft SQL Server 2000

Создание отношений

Разбить на страницы
Показывать лекцию целиком

Вы научитесь:

  • создавать отношение;
  • изменять отношение;
  • переименовывать отношение;
  • удалять отношение.
  • Понятие об отношениях

    Большинство баз данных предназначены для моделирования некой части реального мира, которую называют пространством состояний (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 требует, чтобы каскадирование не было круговым. Например, удаление строки в таблице А может привести к удалению строки в таблице В, что, в свою очередь, вызовет удаление строки в таблице С. Однако не допускается устанавливать такой режим каскадирования, при котором удаление строки в таблице С приведет к удалению строки в таблице А.

    Создание отношений

    В SQL Server отношения создаются с помощью вкладки Relationships (Отношения) диалогового окна Properties (Свойства) конструктора таблиц Table Designer. Отношения один-к-одному и один-ко-многим создаются аналогичным образом. SQL Server определяет тип отношения на основе столбцов, содержащихся в зависимой таблице; если для столбцов внешнего ключа имеется уникальный индекс, отношение будет иметь тип один-к-одному; в противном случае оно будет иметь тип один-ко-многим.

    Создайте отношение

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
  • Щелкните на кнопке Relationships (Отношения)в панели инструментов Table Designer. SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
  • Нажмите New (Создать). SQL Server предложит первую таблицу в списке таблиц для установления нового отношения.
  • Выберите PlantTypes в качестве главной таблицы. SQL Server предложит FK_Oils_PlantTypes в качестве имени для отношения.
  • Выберите PlantTypeID в качестве поля первичного ключа.
  • Выберите PlantTypeID в качестве поля внешнего ключа.
  • Совет. Если вы хотите использовать для отношения каскадные изменения или удаления, установите соответствующие флажки на странице свойств.

  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Щелкните на кнопке Save (Сохранить)в панели инструментов конструктора таблиц. SQL Server отобразит диалоговое окно, предлагающее подтвердить, что изменения, внесенные вами в две таблицы, следует сохранить в вашей базе данных.
  • Нажмите Yes (Да). SQL Server создаст отношение.
  • Закройте окно конструктора таблиц Table Designer.
  • Управление отношениями

    Отношения между таблицами, как правило, являются достаточно устойчивыми, однако, как и другие составляющие схемы базы данных, они могут время от времени подвергаться изменениям. Такие изменения легко осуществимы через Enterprise Manager.

    Изменение отношений

    Необходимость в изменении отношения возникает чрезвычайно редко, но иногда при изменении структуры одной из базовых таблиц приходится изменять и отношение. Вы можете изменить столбцы, участвующие в отношении, просто изменив спецификацию на странице Relationships (Отношения) диалогового окна Properties (Свойства) таблицы.

    Измените отношение

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
  • Щелкните на кнопке Relationships (Отношения)в панели инструментов конструктора таблиц. SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
  • Проверьте, что в поле списка Selected Relationship (Выбор отношения) выбрано FK_Oils_PlantTypes. SQL Server отобразит свойства отношения.
  • Выберите PlantPartID в качестве поля внешнего ключа.
  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Щелкните на кнопке Save (Сохранить) в панели инструментов конструктора таблиц. SQL Server отобразит диалоговое окно, предлагающее подтвердить, что внесенные вами в две таблицы изменения следует сохранить в вашей базе данных.
  • Нажмите Yes (Да). SQL Server изменит отношение.
  • Закройте окно конструктора таблиц Table Designer.
  • Обслуживание отношений

    Как вы можете предположить, отношения обслуживаются с использованием того же диалогового окна Properties (Свойства), с помощью которого они были созданы.

    Переименуйте отношение

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
  • Щелкните на кнопке Relationships (Отношения).SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
  • Выберите FK_Oils_PlantTypes в списке Selected Relationship (Выбор отношения). SQL Server отобразит свойства отношения.
  • Выделите текст в поле Relationship Name (Имя отношения) и введите
  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства)
  • Нажмите кнопку Save (Сохранить). SQL Server отобразит диалоговое окно, предлагающее подтвердить, что внесенные вами в две таблицы изменения следует сохранить в вашей базе данных.
  • Нажмите Yes (Да). SQL Server изменит имя отношения.
  • Закройте окно конструктора таблиц Table Designer.
  • Удалите отношение

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
  • Щелкните на кнопке Relationships (Отношения).SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
  • Выберите DeleteMe в списке Selected Relationship (Выбор отношения). SQL Server отобразит свойства отношения.
  • Нажмите Delete (Удалить). SQL Server отобразит сообщение, предлагающее вам подтвердить удаление.
  • Нажмите Yes (Да).
  • Нажмите кнопку Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Нажмите кнопку Save (Сохранить). SQL Server отобразит диалоговое окно, предлагающее подтвердить, что внесенные вами в две таблицы изменения следует сохранить в вашей базе данных.
  • Нажмите Yes (Да). SQL Server удалит отношение.
  • Закройте окно конструктора таблиц Table Designer.
  • Краткое содержание

    Чтобы ...Сделайте следующее
    Создать отношение Откройте конструктор таблиц Table Designer для таблицы, щелкните на кнопке Relationships (Отношения), чтобы открыть диалоговое окно Properties (Свойства) конструктора таблиц, щелкните на New (Создать) и установите свойства отношения.
    Изменить отношение Откройте конструктор таблиц Table Designer для таблицы, щелкните на кнопке Relationships (Отношения), чтобы открыть диалоговое окно Properties (Свойства) конструктора таблиц, выберите отношение в списке Selected Relationship (Выбор отношения), а затем выберите другой столбец таблицы в качестве поля внешнего ключа.
    Переименовать отношение Откройте конструктор таблиц Table Designer для таблицы, щелкните на кнопке Relationships (Отношения), чтобы открыть диалоговое окно Properties (Свойства) конструктора таблиц, выберите отношение в списке Selected Relationship (Выбор отношения) и измените свойство Relationship Name (Имя отношения).
    Удалить отношение Откройте конструктор таблиц Table Designer для таблицы, щелкните на кнопке Relationships (Отношения), чтобы открыть диалоговое окно Properties (Свойства) конструктора таблиц, выберите отношение в списке Selected Relationship (Выбор отношения), а затем нажмите Delete (Удалить).
    Страницы:

    Вы научитесь:

  • создавать отношение;
  • изменять отношение;
  • переименовывать отношение;
  • удалять отношение.
  • Понятие об отношениях

    Большинство баз данных предназначены для моделирования некой части реального мира, которую называют пространством состояний (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 требует, чтобы каскадирование не было круговым. Например, удаление строки в таблице А может привести к удалению строки в таблице В, что, в свою очередь, вызовет удаление строки в таблице С. Однако не допускается устанавливать такой режим каскадирования, при котором удаление строки в таблице С приведет к удалению строки в таблице А.

    Создание отношений

    В SQL Server отношения создаются с помощью вкладки Relationships (Отношения) диалогового окна Properties (Свойства) конструктора таблиц Table Designer. Отношения один-к-одному и один-ко-многим создаются аналогичным образом. SQL Server определяет тип отношения на основе столбцов, содержащихся в зависимой таблице; если для столбцов внешнего ключа имеется уникальный индекс, отношение будет иметь тип один-к-одному; в противном случае оно будет иметь тип один-ко-многим.

    Создайте отношение

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
  • Щелкните на кнопке Relationships (Отношения)в панели инструментов Table Designer. SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
  • Нажмите New (Создать). SQL Server предложит первую таблицу в списке таблиц для установления нового отношения.
  • Выберите PlantTypes в качестве главной таблицы. SQL Server предложит FK_Oils_PlantTypes в качестве имени для отношения.
  • Выберите PlantTypeID в качестве поля первичного ключа.
  • Выберите PlantTypeID в качестве поля внешнего ключа.
  • Совет. Если вы хотите использовать для отношения каскадные изменения или удаления, установите соответствующие флажки на странице свойств.

  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Щелкните на кнопке Save (Сохранить)в панели инструментов конструктора таблиц. SQL Server отобразит диалоговое окно, предлагающее подтвердить, что изменения, внесенные вами в две таблицы, следует сохранить в вашей базе данных.
  • Нажмите Yes (Да). SQL Server создаст отношение.
  • Закройте окно конструктора таблиц Table Designer.
  • Управление отношениями

    Отношения между таблицами, как правило, являются достаточно устойчивыми, однако, как и другие составляющие схемы базы данных, они могут время от времени подвергаться изменениям. Такие изменения легко осуществимы через Enterprise Manager.

    Изменение отношений

    Необходимость в изменении отношения возникает чрезвычайно редко, но иногда при изменении структуры одной из базовых таблиц приходится изменять и отношение. Вы можете изменить столбцы, участвующие в отношении, просто изменив спецификацию на странице Relationships (Отношения) диалогового окна Properties (Свойства) таблицы.

    Измените отношение

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
  • Щелкните на кнопке Relationships (Отношения)в панели инструментов конструктора таблиц. SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
  • Проверьте, что в поле списка Selected Relationship (Выбор отношения) выбрано FK_Oils_PlantTypes. SQL Server отобразит свойства отношения.
  • Выберите PlantPartID в качестве поля внешнего ключа.
  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Щелкните на кнопке Save (Сохранить) в панели инструментов конструктора таблиц. SQL Server отобразит диалоговое окно, предлагающее подтвердить, что внесенные вами в две таблицы изменения следует сохранить в вашей базе данных.
  • Нажмите Yes (Да). SQL Server изменит отношение.
  • Закройте окно конструктора таблиц Table Designer.
  • Обслуживание отношений

    Как вы можете предположить, отношения обслуживаются с использованием того же диалогового окна Properties (Свойства), с помощью которого они были созданы.

    Переименуйте отношение

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
  • Щелкните на кнопке Relationships (Отношения).SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
  • Выберите FK_Oils_PlantTypes в списке Selected Relationship (Выбор отношения). SQL Server отобразит свойства отношения.
  • Выделите текст в поле Relationship Name (Имя отношения) и введите
  • Нажмите Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства)
  • Нажмите кнопку Save (Сохранить). SQL Server отобразит диалоговое окно, предлагающее подтвердить, что внесенные вами в две таблицы изменения следует сохранить в вашей базе данных.
  • Нажмите Yes (Да). SQL Server изменит имя отношения.
  • Закройте окно конструктора таблиц Table Designer.
  • Удалите отношение

  • Откройте конструктор таблиц Table Designer для таблицы Oils, щелкнув правой кнопкой на имени таблицы в рабочей панели Details Pane и выбрав Design Table (Конструирование таблицы). SQL Server откроет конструктор таблиц Table Designer.
  • Щелкните на кнопке Relationships (Отношения).SQL Server откроет диалоговое окно Properties (Свойства) конструктора таблиц с отображением страницы свойств Relationships (Отношения).
  • Выберите DeleteMe в списке Selected Relationship (Выбор отношения). SQL Server отобразит свойства отношения.
  • Нажмите Delete (Удалить). SQL Server отобразит сообщение, предлагающее вам подтвердить удаление.
  • Нажмите Yes (Да).
  • Нажмите кнопку Close (Закрыть). SQL Server закроет диалоговое окно Properties (Свойства).
  • Нажмите кнопку Save (Сохранить). SQL Server отобразит диалоговое окно, предлагающее подтвердить, что внесенные вами в две таблицы изменения следует сохранить в вашей базе данных.
  • Нажмите Yes (Да). SQL Server удалит отношение.
  • Закройте окно конструктора таблиц Table Designer.
  • Краткое содержание

    Чтобы ...Сделайте следующее
    Создать отношение Откройте конструктор таблиц Table Designer для таблицы, щелкните на кнопке Relationships (Отношения), чтобы открыть диалоговое окно Properties (Свойства) конструктора таблиц, щелкните на New (Создать) и установите свойства отношения.
    Изменить отношение Откройте конструктор таблиц Table Designer для таблицы, щелкните на кнопке Relationships (Отношения), чтобы открыть диалоговое окно Properties (Свойства) конструктора таблиц, выберите отношение в списке Selected Relationship (Выбор отношения), а затем выберите другой столбец таблицы в качестве поля внешнего ключа.
    Переименовать отношение Откройте конструктор таблиц Table Designer для таблицы, щелкните на кнопке Relationships (Отношения), чтобы открыть диалоговое окно Properties (Свойства) конструктора таблиц, выберите отношение в списке Selected Relationship (Выбор отношения) и измените свойство Relationship Name (Имя отношения).
    Удалить отношение Откройте конструктор таблиц Table Designer для таблицы, щелкните на кнопке Relationships (Отношения), чтобы открыть диалоговое окно Properties (Свойства) конструктора таблиц, выберите отношение в списке Selected Relationship (Выбор отношения), а затем нажмите Delete (Удалить).
    Вернуться к учебному плану