Виды связи в реляционной модели данных

Поведение отношений

Можно настроить поведение отношения 1:N для поддержки бизнес-правил организации. Почему это может потребоваться? Рассмотрим пример.

Допустим, у вас новый продавец и требуется назначить ему несколько существующих возможных сделок, в данное время назначенных другому продавцу. Каждая запись возможной сделки может иметь несколько действий задач, связанных с ней. Можно легко найти активные возможные сделки, которые требуется переназначить, и назначить их новому продавцу. Но что произойдет с действиями задач, связанными с возможными сделками? Хотелось бы вам открывать каждую задачу и указывать, должна ли она также быть назначена новому продавцу? Скорее всего, нет. Вместо этого можно разрешить отношению применить некоторые стандартные правила автоматически. Эти правила применяются только к записям задач, связанным с возможными сделками, которые вы переназначаете. Это отношение сущностей называется Opportunity_Tasks. Можно выполнить следующие действия:

  • Переназначить все активные задачи.

  • Переназначить все задачи. Это поведение принимается по умолчанию.

  • Не переназначать задачи.

  • Переназначить все задачи, которые в данный момент назначены бывшему владельцу возможной сделки.

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

Действие Описание Возможное поведение
Назначение Что должно произойти, когда меняется владелец записи основной сущности? — Каскад для активных- Каскад для всех- Без каскадных- Передавать владельцу
Общий доступ Что должно произойти при совместном использовании записи основной сущности? — Каскад для активных- Каскад для всех- Без каскадных- Передавать владельцу
Отмена общего доступа Что должно произойти при отмене совместного использования записи основной сущности? — Каскад для активных- Каскад для всех- Без каскадных- Передавать владельцу
Переподчинение Что должно произойти, когда меняется значение поля поиска для отношения родительского типа в записи основной сущности? Отношение родительского типа — это отношение, использующее Каскад для всех для всех действий. — Каскад для активных- Каскад для всех- Без каскадных- Передавать владельцу
Удаление Что должно произойти при удалении записи основной сущности? — Каскад для всех- Удалить связь- Ограничить удаление
Слияние Что должно произойти, когда запись основной сущности объединяется с другой записью? — Каскад для всех- Без каскадных

Каждое из этих действий можно настроить для управления тем, как действия будут распространяться на записи, связанные с записью основной сущности отношением сущностей 1:N. Параметры поведения представлены в следующей таблице.

Поведение Описание
Передавать активным Выполнение действия для всех активных записей связанной сущности.
Передавать всем Выполнение действия для всех записей связанной сущности.
Не передавать никому Никакие действия не выполняются.
Удалить ссылку Удаление значения поля поиска для всех записей связанной сущности.
Ограничить удаление Блокировка возможности удаления записи основной сущности, если существуют связанные записи.
Передавать владельцу Выполнение действия для всех записей связанной сущности тем же пользователем, что и пользователь записи основной сущности.

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

Значение поля Описание
Родительский Все действия используют поведение Передавать всем.
Ссылочный Действия Назначить, Предоставить общий доступ, Отменить общий доступ и Переподчинение используют поведение Не передавать никому. Действие Удалить использует поведение Удалить ссылку. Действие Объединить использует поведение Передавать всем.
Ссылочный, ограничить удаление Аналогично значению Ссылочный за исключением того, что действие Удалить использует поведение Ограничить удаление.
Настраиваемое каскадное Отдельное поведение можно назначить для каждого действия. Если выбранные значения соответствуют любым другим категориям Тип поведения, значение изменится на значение Тип поведения.

Добавление необходимых таблиц к представлению источника данныхAdding Required Tables to the Data Source View

Откройте конструктор представлений источника данных для представления источников данных Adventure Works DW 2012 .Open Data Source View Designer for the Adventure Works DW 2012 data source view.

Щелкните правой кнопкой мыши панель Организатор диаграмм , выберите команду Создать диаграммуи укажите Причина заказа через Интернет в качестве имени созданной диаграммы.Right-click anywhere in the Diagram Organizer pane, click New Diagram, and specify Internet Sales Order Reasons as the name for this new diagram.

Перетащите таблицу InternetSales с панели Таблицы на панель Диаграмма .Drag the InternetSales table to the Diagram pane from the Tables pane.

Щелкните правой кнопкой мыши панель Диаграмма и выберите команду Добавить или удалить таблицы.Right-click anywhere in the Diagram pane, and then click Add/Remove Tables.

В диалоговом окне Добавление или удаление таблиц добавьте в список Включенные объекты таблицы DimSalesReason и FactInternetSalesReason , а затем нажмите кнопку ОК.In the Add/Remove Tables dialog box, add the DimSalesReason table and the FactInternetSalesReason table to the Included objects list, and then click OK.
Обратите внимание, что связи «первичный-внешний ключ» между задействованными таблицами устанавливаются автоматически, поскольку эти связи определяются в базовой реляционной базе данных.Notice that the primary key-foreign key relationships between the tables that are involved are established automatically because those relationships are defined in the underlying relational database. Если эти связи не определены в базовой реляционной базе данных, их следует определить в представлении источника данных.If these relationships were not defined in the underlying relational database, you would have to define them in the data source view.

В меню Формат выберите команду Автоматический макети щелкните значок Диаграмма.On the Format menu, point to Auto Layout, and then click Diagram.

В окне свойств измените свойство FriendlyName таблицы DimSalesReason на SalesReason, затем измените свойство FriendlyName таблицы FactInternetSalesReason на InternetSalesReason.In the Properties window, change the FriendlyName property of the DimSalesReason table to SalesReason, and then change the FriendlyName property of the FactInternetSalesReason table to InternetSalesReason.

На панели Таблицы разверните узел InternetSalesReason (dbo.FactInternetSalesReason), щелкните столбец SalesOrderNumberи просмотрите в окне свойств свойство DataType для этого столбца данных.In the Tables pane, expand InternetSalesReason (dbo.FactInternetSalesReason), click SalesOrderNumber, and then review the DataType property for this data column in the Properties window.
Обратите внимание, что в качестве типа данных для столбца SalesOrderNumber указан тип данных string.Notice that the data type for the SalesOrderNumber column is a string data type.

Просмотрите типы данных для других столбцов таблицы FactInternetSalesReason .Review the data types for the other columns in the InternetSalesReason table.
Обратите внимание, что для остальных двух столбцов этой таблицы указаны числовые типы данных.Notice that the data types for the other two columns in this table are numeric data types.

На панели Таблицы щелкните правой кнопкой мыши таблицу InternetSalesReason (dbo.FactInternetSalesReason) и выберите пункт Просмотр данных.In the Tables pane, right-click InternetSalesReason (dbo.FactInternetSalesReason), and then click Explore Data.
Обратите внимание, что для каждого номера строки каждого заказа значение ключа указывает причину покупки данной позиции линии, как показано на следующем рисунке.Notice that, for each line number within each order, a key value identifies the sales reason for the purchase of that line item, as shown in the following image.

Много – многозначные связи (M:N)

Много – многозначные связи (M:N) – это когда, каждому экземпляру одного объекта (А) могут соответствовать несколько экземпляров второго объекта (В) и наоборот, каждому экземпляру второго объекта (В) может соответствовать тоже несколько экземпляров первого объекта (А).

Рис.3 Преобразование связи типа M:N через объект – связку

Объект – связка должен иметь идентификатор, образованный из идентификаторов исходных объектов Ка и Кб. Примером много – многозначных связей является связь поставщики – товары, если один поставщик поставляет разные наименования товаров, а товар одного наименования поставляется несколькими поставщиками.

Определение связей между информационными объектами

Рассмотрим определение связей между информационными объектами и тип отношений, которыми они характеризуются, для предметной области Учебный процесс.

Связи между объектами ГРУППА — СТУДЕНТ характеризуются одно – многозначными отношениями (1:М), поскольку одна группа включает много студентов, а один студент входит только в одну группу. Связь между ними осуществляется по номеру группы, который является уникальным идентификатором главного объекта ГРУППА входит в составной идентификатор объекта СТУДЕНТ (см.табл.1)

Аналогично устанавливается связь между объектами КАФЕДРА ПРЕПОДАВАТЕЛЬ, которые также находятся в одно – многозначных отношениях. Связь между ними осуществляются по уникальному ключу главного объекта КАФЕДРА – коду кафедры, который в подчиненном объекте ПРЕПОДАВАТЕЛЬ является описательным.

Таблица 1. Объекты справочной информации о студентах, группах и предметах

Информационный объект Название реквизитов Обозначение реквизита Признак ключа
ГРУППА Номер группы Количество студентов Средний балл в группе НГ КОЛ ПБАЛ Уникальный простой
СТУДЕНТ Номер группы Номер студентов Фамилия И.О. Год рождения Адрес Балл при поступлении НГНС ФИО ГОДР АДРЕС ПБАЛЛ Уникальный составной
ПРЕДМЕТ Код предмета Название предмета Всего часов Часов лекций Часов практики Число семестров Программа курса (большой текст) КП НП ЧАСЫ ЛЕК ПР ЧС ПРОГ Уникальный простой

Таблица 2. Группировка реквизитов по информационным объектам документа Список преподавателей кафедры

Реквизиты объекта Признак ключа Имя информационного объекта Семантика объекта
ТАБН ККАФ ФИО СТ ЗВ П,У ПРЕПОДАВАТЕЛЬ Сведения о преподавателях кафедр
ККАФ НКАФ ТЕЛ ЗАВ П,У КАФЕДРА Сведения о кафедрах

В таблице приняты обозначения для ключа: П – простой, У – уникальный.

В каждой группе в течение семестра проводятся занятия по разным предметам (объект ИЗУЧЕНИЕ). С другой стороны, каждое занятие определенно для каждой группы. Поэтому имеет место связь типа один – ко – многим между объектами ПРЕДМЕТ — ИЗУЧЕНИЕ.

По каждому предмету проводится множество занятий в различных группах разными преподавателями. С другой стороны, каждое занятие проводится по конкретному предмету, что определяет отношения типа один – ко – многим между объектами ПРЕДМЕТ — ИЗУЧЕНИЕ. Аналогично определяются отношения типа один – ко – многим между объектами ПРЕПОДАВАТЕЛЬ – ИЗУЧЕНИЕ. Объект ИЗУЧЕНИЕ фактически играет роль объекта связки в много – многозначных отношениях объектов.

Рис.4 Много – многозначные связи информационных объектов

Рис.5 Информационно – логическая модель предметной области Учебный процесс

Объект УСПЕВАЕМОСТЬ содержит данные об успеваемости (оценку ) конкретного студента по конкретному занятию. Поэтому он является связанным с объектом СТУДЕНТ и объектом ИЗУЧЕНИЕ. Один студент имеет оценки по нескольким занятиям, но каждая оценка всегда относится к одному конкретному студенту. Это означает, объект УСПЕВАЕМОСТЬ является подчиненным и находится в одно – многозначных отношениях с объектом СТУДНТ. Объект УСПЕВАЕМОСТЬ, а также является подчиненным и находится в одно – многозначных отношениях с объектом ИЗУЧЕНИЕ. Объект УСПЕВАЕМОСТЬ выполняет роль объект – связки много – многозначных отношениях объектов СТУДЕНТ и ИЗУЧЕНИЕ. Много – многозначные отношения между этими объектами определяются тем, что одному студенту соответствует много занятий, отображаемых объектом ИЗУЧЕНИЕ, а одно занятие проводится со многими студентами.

В табл.3 перечислены все одно – многозначные связи между объектами, указаны ключи, по которым должны устанавливаться связи, и определены главные и подчиненные информационные объекты в этих связях.

Таблица 3 Связи информационных объектов

Главный объект Подчиненный объект Тип связи Ключ связи
ГРУППА КАФЕДРА ГРУППА ПРЕДМЕТ ПРЕПОДАВАТЕЛЬ СТУДЕНТ ИЗУЧЕНИЕ СТУДЕНТ ПРЕПОДАВАТЕЛЬ ИЗУЧЕНИЕ ИЗУЧЕНИЕ ИЗУЧЕНИЕ УСПЕВАЕМОСТЬ УСПЕВАЕМОСТЬ 1:М 1:М 1:М 1:М 1:М 1:М 1:М НГ К КАФ НГ КП ТАБН НГ+НС НГ+КП+ТАБН+ВИДЗ

Отношение «один-к-одному»

Отношение или связь «один-к-одному» связывает одну запись таблицы с одной или не связывает ни с одной записью другой таблицы. Иногда этот тип отношения применяется для разбиения таблицы с большим количеством полей на две или несколько меньших таблиц.

Таблица Products (изделия) может содержать подробную информацию, описывающую изделие и его цену, и дополнительные сведения об особенностях его производства.

Эти сведения интересны только сотрудникам инженерно-технических подразделений, поэтому их можно перенести в отдельную таблицу (названную, например, ProductsEngineering (технические характеристики изделия). Это та информация, которая не должна интересовать продавцов при оформлении заказов.

В другой ситуации можно разбить таблицу на две, просто потому что она слишком велика. (Программа Access не разрешает таблице иметь более 255 полей.)

Рис. 5.15. Когда связываются два поля, в которых не допускаются дублирующиеся данные (и флажок Обеспечение целостности данных установлен), Access считает, что создается связь «один-к-одному».

Программа помещает цифру 1 на концах линии связи для того, чтобы отличать ее от других типов связей.

В этом примере столбец ID в таблице Products и столбец ID в таблице ProductsEngineering — первичные ключи соответствующих таблиц, поэтому невозможно связать несколько записей таблицы ProductsEngineering с одной и той же записью таблицы Products

создается так же, как отношение «один-ко-многим» — перетаскиванием с помощью мыши полей на вкладке Схема данных (рис. 5.15). Единственная

разница состоит в том, что всвязанных полях обеих таблиц нужно задать запрет совпадений. В этом случае запись одной таблицы может (как максимум) быть связана с единственной записью в другой таблице.

Примечание

В поле запрещены совпадения, если оно является первичным ключом таблицы (см. разд. «Первичный ключ» главы 2) или если у поля есть индекс, препятствующий появлению дублирующейся информации (см. разд. «Предотвращение дублирования значений с помощью индексов» главы 4).

Применяйте связи «один-к-одному» с осторожностью

Отношения «один-к-одному» крайне редко применяются в программе Access. Обычно гораздо удобнее использовать скрытие столбцов (см. разд. «Скрытие столбцов» главы 3) и запросы (см. главу 6), если вы хотите видеть только отдельные поля таблицы.

•    Две части таблицы необходимо поместить в отдельные БД (см. разд. «Что такое разделенная БД» главы 18) для того, чтобы разные люди могли копировать их на разные компьютеры и редактировать независимо.

•    Вы хотите защитить от любопытных глаз уязвимые данные. Один из возможных способов — поместить информацию, которую нужно защитить, в отдельную таблицу и сохранить эту таблицу в другой, более защищенный файл БД.

•    У вас есть таблица с огромным объемом данных, таких как поля типа Вложение (см. разд. «Вложение» главы 2) с большими документами. В этом случае можно повысить производительность, если разделить таблицу. Вы даже можете решить, что лучше поместить половину таблицы в отдельную БД (см, разд. «Что такое разделенная БД» главы 18).

•    Некоторые данные вашей таблицы необязательны. Вместо того чтобы включать большое количество незаполненных полей, можно выделить их в отдельную таблицу. Когда не нужно включать эту информацию, вам не придется добавлять запись в связанную таблицу.

Если у вас нет таких ситуаций, вы больше выиграете от создания одной большой таблицы.

Отношение «многие-ко-многим»

Отношение или связь «многие-ко-многим»связывает одну или несколько записей одной таблицы с одной или несколькими записями в другой таблице. Рассмотрим БД, в которой в отдельных таблицах хранятся данные об авторах и книгах.

Авторы бестселлеров не останавливаются на одной книге (поэтому вы должны иметь возможность связать одного автора с несколькими книгами).

Однако иногда авторы объединяются в команду под одним заглавием (поэтому вы должны иметь возможность связать одну книгу с несколькими авторами).

Аналогичная ситуация возникает, если нужно распределить студентов по курсам, сотрудников по комитетам или ингредиенты по рецептам. Можно даже представить подобную ситуацию и в случае БД с куклами-болванчиками, если несколько изготовителей решат объединиться для изготовления одной куклы-болванчика.

Связи «многие-ко-многим» довольно распространены, и программа Access предоставляет два способа их обработки.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Запросы к отношениям

Поскольку все типы отношений Модели могут быть вызваны через функции, то Вы можете вызывать эти функции для получения экземпляра отношения без фактического выполнения запросов. Кроме того, все типы отношений также используют конструктор запросов, позволяя Вам накладывать ограничения, фильтровать и сортировать отношения прежде чем выполнить SQL запрос.

Например, у нас есть блог, в котором модель связана с моделью :

Вы можете получить все опубликованные записи пользователя следующим образом:

Методы отношений и Динамические свойства

Если Вам не нужны дополнительные ограничения на запрос, то лучше всего использовать динамические свойства. Например, продолжая рассматривать модели и , Вы можете получить доступ ко всем сообщениям пользователя следующим образом:

Динамические свойства являются «lazy loading«, то есть они будут загружать данные только тогда, когда Вы хотите их получить. Также разработчики часто используют , для получения предварительно загруженных отношений, которые, как они знают, будут доступны после загрузки модели.

Запрос на существование отношений

Вы можете ограничить свои результаты при доступе к записям модели. Например, представьте, что Вы хотите получить все сообщения в блоге, содержащие хотя бы один комментарий. Для этого вы можете передать имя отношения методу :

Вы также можете использовать операторы сравнения:

Вы также можете использовать точечную нотацию. Например, чтобы получить все записи, у которой есть хотя бы один оцененный комментарий:

Вы также можете использовать методы и :

Жадная загрузка (eager loading)

Данные об отношениях подгружаются только в момент обращения к динамическому свойству. Жадная загрузка (eager loading) призвана устранить проблему N+1. Например, представьте, что у нас есть модель , которая связана с моделью . Отношение определено как:

Теперь загрузим все книги и их авторов:

Цикл выполнит один запрос для получения всех книг в таблице, а затем будет выполнять по одному запросу на каждую книгу для получения автора. Таким образом, если у нас 25 книг, то потребуется 26 запросов.

Теперь давайте заранее получим всех авторов при помощи методов :

Тогда будут выполнены всего два запроса:

Жадная загрузка нескольких отношений

Иногда Вам может потребоваться жадная загрузка нескольких разных отношений за одну операцию. Для этого просто передайте дополнительные аргументы методу :

Вложенная жадная загрузка

Используйте точечную нотацию, чтобы получить вложенные отношения. Например, давайте получим всех авторов и их контакты:

Ограничения жадной загрузки

Иногда вам может быть нужно не только загрузить отношение, но также указать условие для его загрузки:

В этом примере мы загружаем сообщения пользователя, но только те, заголовок которых содержит подстроку .

Ленивая жадная загрузка

Можно подгрузить отношения динамически, т.е. после того как вы получили коллекцию основных объектов. Это может быть полезно тогда, когда Вам неизвестно, понадобятся ли они в дальнейшем:

Вы также можете дополнить запрос при помощи функции-замыкания:

1.2.1 Связь типа «один-к-одному» (1:1)

При
этом типе связи каждой записи в одной
таблице соответствует не более одной
записи в связанной таблице. Этот вид
связи встречается довольно редко. В
основном в тех случаях, когда часть
информации об объекте либо редко
используется, либо является конфиденциальной
(такая информация хранится в отдельной
таблице, которая защищена от
несанкционированого доступа).

Например, анкетные
данные студента (ФИО, факультет, курс,
группа, дата рождения и т.п.) могут
храниться в одной таблице БД, а сведения
о родителях этого студента – в другой,
т.к. эта информация используется
достаточно редко и может быть отделена
от основной.

Создание и изменение отношений 1:N между сущностями

Откройте обозреватель решений.

В разделе Компоненты раскройте узел Сущности, затем раскройте сущность, с которой требуется работать.

Выберите Отношения 1:N.

Чтобы изменить отношение или просмотреть сведения для отношения, выберите отношение и нажмите на панели инструментов «Действия» кнопку Другие действия, затем выберите Изменить.
— ИЛИ —
Чтобы добавить новое отношение, выберите Создать отношение «один ко многим».

Важно!
Если кнопка Создать отношение «один ко многим» не отображается на панели инструментов «Действия», то создать отношение 1:N для этой сущности невозможно.

Для нового отношения в разделе Определение отношения выберите в списке Связанная сущность сущность для связывания.

Примечание
При указании связанной сущности задается значение по умолчанию в поле Имя. Если изменить связанную сущность перед ее сохранением, соответственно изменится и значение поля Имя.

Выберите, будет ли это поле доступно для поиска или нет.

В разделе Поле поиска укажите значение для поля в поле Отображаемое имя.

Важно!
При указании значения Отображаемое имя задается значение по умолчанию в поле Имя

Если изменить Отображаемое имя поля поиска перед сохранением данных, значение в поле Имя не изменится. Поэтому необходимо ввести в поле Имя информативное значение перед сохранением данных.

В списке Требование поля выберите вариант, чтобы указать требования к данным для поля перед сохранением записи.

В разделе Элемент области переходов для основной сущности в списке Параметры отображения выберите вариант отображения связанных представлений для пользовательской метки.

В разделе Поведение отношений выберите в списке Тип отношений один из следующих вариантов.

Родительское. В родительском отношении между двумя сущностями любое действие, выполняемое над записью основной (родительской) сущности, также выполняется над всеми связанными с ней записями дочерних сущностей.

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

Ссылочное с ограниченным удалением. В ссылоном отношении с ограничением удаления можно переходить к любым связанным записям. Действия, выполняемые над родительской записью, не будут выполняться над дочерней, но пока она существует, удалить родительскую запись будет невозможно. Учтите, что запись нельзя удалить, если имеются связанные с ней записи.

Настраиваемое каскадное. В настраиваемом каскадном отношении между двумя сущностями выбирается поведение, связанное с каждым из наборов возможных действий.

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

Дополнительные сведения:

  1. Выберите Сохранить и закрыть, чтобы закрыть форму Отношение.

  2. Выполнив настройки, опубликуйте их:

    • Чтобы опубликовать настройки только для компонента, изменяемого в данный момент, на панели инструментов «Действия» выберите Опубликовать.

    • Чтобы опубликовать настройки для всех неопубликованных компонентов одновременно, на панели навигации или в области переходов выберите Сущности, затем на панели инструментов «Действия» выберите Опубликовать все настройки.

Примечание

  • Настраиваемая сущность не может быть основной в каскадном отношении со связанной системной сущностью. Это означает, что между основной настраиваемой сущностью и связанной системной сущностью не может быть отношений с каким-либо из действий, установленным в «Передавать всем», «Передавать активным» или «Передавать владельцу».
  • У новых отношений действие не может иметь значение Передавать всем, Передавать активным или Передавать владельцу, если связанная сущность в этом отношении уже является связанной сущностью в любом другом отношении, действие которого имеет значение Передавать всем, Передавать активным или Передавать владельцу. Это позволяет избежать создания отношений с несколькими родительскими сущностями.
  • После каждого изменения элементов пользовательского интерфейса или внедрения скриптов формы для сущности необходима публикация изменений. Все изменения в схеме данных приложения, таких как настраиваемые сущности, связи или поля, применяются сразу.
  • Если отношение является частью управляемого решения, разработчик решения может ограничить настройку отношения пользователями.
  • Установка решения или публикация настроек может помешать нормальной работе системы. Рекомендуется запланировать импорт решения в оптимальный для пользователей период.

Связь вида 1:1

Определение 2

Связь 1:1 создается, если все поля связи основной и дополнительной таблиц – ключевые.

Т.к. значения ключевых полей обеих таблиц не могут повторяться, записи из этих таблиц взаимно-однозначно соотносятся.

Пример 1

Пусть существует основная О и дополнительная Д таблицы. Символом «$*$» обозначим ключевые поля, символом «$+$» обозначим поля, которые используются для связи.

В таблицах совпадают значения в полях связи, поэтому будут связаны запись (а, 10) таблицы О и запись (а, стол) таблицы Д, а также запись (в, 3) и (в, книга).

На практике связь 1:1 используется довольно редко, т.к. информацию, которая хранится в двух таблицах, можно объединить в одну таблицу, которая будет занимать намного меньше места в памяти компьютера.

Пример 2

Например, если объединить запись (а, 10) таблицы О и запись (а, стол) таблицы Д, то получим запись (а, 10, стол) новой псевдотаблицы.

Иногда удобно иметь больше одной таблицы. Например, при необходимости ускорения обработки, повышения удобства работы с общей информацией нескольких пользователей, обеспечения большей степени защиты информации и т.д.

Мощность связи

Мощность
связи (Cardinality)
служит для
обозначения отношения числа экземпляров
родительской сущности к числу экземпляров
дочерней.

Различают 4 типа мощности, показанные
на рис П5:

  • общий
    случай, когда одному экземпляру
    родительской сущности соответствуют
    0, 1 или много экземпляров дочерней
    сущности не помечается каким-либо
    символом;

  • символом
    Р помечается случай, когда одному
    экземпляру родительской сущности
    соответствуют 1 или много экземпляров
    дочерней сущности (исключено нулевое
    значение);

  • символом
    Zпомечается случай, когда
    одному экземпляру родительской сущности
    соответствуют 0 или 1 экземпляр дочерней
    сущности (исключены множественные
    значения);

  • цифрой
    помечается случай точного соответствия,
    когда одному экземпляру родительской
    сущности соответствует заранее заданное
    число экземпляров дочерней сущности.

Рис. П5. Типы мощности

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

Если отношение не добавлено при добавлении столбца в объект, это делается непосредственно в макете схемы данных в Access. Как создать новую связь, покажем на примере. Нажмите кнопку «Изменить связи». В редактировании отношений для создания новой связи нажмите «Новое». В форме «Создание» выбираем таблицы для связи и поля, которые будут соответствовать друг другу.

Для уже созданной связи есть возможность изменять параметры объединения записей в запросах. Для этого вызываем диалоговое окно схемы данных MS Access «Изменение связей» и нажимаем кнопку «Объединение». В форме редактирования параметров предложены варианты объединений:

  • В первом случае в результатах запроса отображаются только те строки, в которых поля таблиц «Отели» и «Регионы» совпадают.
  • Во втором случае объединяются все строки «Регионов» и только совпадающие «Отелей».
  • В третьем ситуация обратна второму – все строки «Отелей» объединяются с совпадающими «Регионов».

Мы оставляем автоматический выбор системы – первый вариант.

Виды связей между таблицами

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

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

Связи «один ко многим»

Связь «один ко многим» являются наиболее распространенным типом связи. В такого рода связях строка в таблице А может иметь много строк в таблице B. Но строка в таблице B может иметь только одну строку в таблице А. Например, таблицы «Издатели» и «Названия» имеют связь «один ко многим». То есть, каждый издатель выпускает много названий. Но каждое название принадлежит только одному издателю.

Связь «один ко многим» создается, если только один из связанных столбцов является основным ключом или имеет уникальное ограничение.

В окне связей в Access, сторона первичного ключа связи «один ко многим» обозначается номером 1. Сторона внешнего ключа связи обозначается символом бесконечности.

Связи «многие ко многим»

В связи «многие ко многим» строка в таблице А может иметь много совпадающих строк в таблице B, и наоборот. Вы создаете такую связь, определяя третью таблицу, которая называется промежуточной таблицей. Первичный ключ промежуточной таблицы состоит из внешних ключей как таблицы А, так и таблицы B. Например, таблица «Авторы» и таблица «Названия» имеют связь «многие ко многим», которая определяется связью «один ко многим» из каждой из этих таблиц к таблице «TitleAuthors». Первичным ключом таблицы «TitleAuthors» является комбинация столбца au_ID (первичный ключ таблицы «Авторы») и столбца title_ID (первичный ключ таблицы «Названия»).

Связи «один к одному»

В связи «один к одному» строка в таблице А может иметь не более одной совпадающей строки в таблице B, и наоборот. Связь «один к одному» создается, если оба связанных столбца являются первичными ключами или имеют уникальные ограничения.

Этот тип отношений не распространен, потому что большая часть информации, которая связана таким образом, будет в одной таблице. Вы можете использовать связь «один к одному», чтобы предпринять следующие действия:

  • Разделите таблицу на множество столбцов.
  • Из соображений безопасности изолируйте часть таблицы.
  • Храните данные, которые недолговечны и могут быть легко удалены при удалении таблицы.
  • Храните информацию, которая относится только к подмножеству основной таблицы.

В Access сторона первичного ключа связи «один к одному» обозначается символом ключа. Сторона внешнего ключа также обозначается символом ключа.

Для чего все это нужно?

Связи выполняют более важную роль, чем просто информация размещения данных по таблицам. Прежде всего они требуются разработчикам для поддержания целостности баз данных.

Правильно настроив связи, можно быть уверенным, что ничего не потеряется.

Представьте, что Вы решили удалить одну из групп в таблице учебной базы данных. Если бы связи не было, то для тех сотрудников, которые к ней были определены, остался идентификатор несуществующей группы. Связь не позволит удалить группу, пока она имеется во внешних ключах других таблиц. Для начала следовало определить сотрудников в другие имеющиеся или новые группы, а только затем удалить ненужную запись. Поэтому связи называют еще ограничениями.

  • < Назад
  • Вперёд >

Новые статьи:

  • Объединение таблиц – UNION

  • Соединение таблиц – операция JOIN и ее виды

  • Тест на знание основ SQL

Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector