2.5.1. Типы связей между таблицами
1. Связь типа «один-ко-многим»
Описанная выше связь между таблицами Студенты и Сессия — пример связи типа «один-ко-многим». Это наиболее распространенный тип связи. При таком типе связи каждой записи в главной таблице могут соответствовать одна, несколько или ни одной записи в подчиненной таблице, а каждая запись в подчиненной таблице не может иметь более одной соответствующей ей записи в главной таблице. Если запись в подчиненной таблице не имеет соответствующей ей записи в главной таблице, то значение поля связи в такой записи должно быть пусто.
2. Связь типа «один-к-одному»
При связи типа «один-к-одному» каждой записи в главной таблице может соответствовать не более одной записи в подчиненной таблице, и наоборот, каждая запись в подчиненной таблице не может иметь более одной соответствующей ей записи в главной таблице. Как и в предыдущем случае, если запись в подчиненной таблице не имеет соответствующей ей записи в главной таблице, то значение поля связи в такой записи должно быть пусто.
Этот тип связи применяется реже, так как такие данные могут быть помещены в одну таблицу. Связь типа «один-к-одному» обычно используют для разделения таблиц, имеющих много полей, а также для сохранения сведений, относящихся к подмножеству записей в главной таблице.
Например, такой тип связи использован при установлении связей между таблицами Студенты и Общежитие.
3. Связь типа «многие-ко-многим»
При установлении связи между таблицами возможна ситуация, когда между ними нельзя установить отношение «главная-подчиненная» из-за того, что любой записи в одной таблице может соответствовать несколько записей из другой таблицы. Примером могут служить таблицы Студенты и Преподаватели, так как каждый студент сдавал экзамены нескольким преподавателям, а каждый преподаватель принимал экзамен у нескольких студентов. Поэтому между этими таблицами нельзя установить ни одну из описанных выше связей.
Это пример связи типа «многие-ко-многим». Access непосредственно не поддерживает такой тип связи. Но ее можно реализовать в виде двух связей типа «один-ко-многим» с помощью третьей (связующей) таблицы. В качестве такой связующей таблицы в БД Деканат используется таблица Сессия (рис. 2.8). Она связана как с таблицей Студенты по полю Код студента, так и с таблицей Преподаватели по полю Код преподавателя. После того как эти связи установлены, можно легко определить с помощью соответствующих запросов, у каких студентов принимал экзамены данный преподаватель или кому сдавал экзамены данный студент.
Рис. 2.8. Связи между таблицами в БД Деканат
2.5.2. Создание связей
Для создания связей между таблицами нужно вернуться в окно БД, закрыть все открытые таблицы и активировать кнопку
Для добавления таблиц следует вызвать щелчком правой кнопки мыши контекстное меню окна Схема данных и выбрать в нем пункт Добавить таблицу. Откроется диалоговое окно Добавление таблицы, содержащее список таблиц БД (рис. 2.9). Для добавления таблицы нужно щелкнуть по ее имени, а затем — по кнопке Добавить. После того как все таблицы отобраны, нужно закрыть это окно и вернуться в окно Схема данных.
Диалоговое окно Добавление таблицы дает возможность добавить как таблицы, так и запросы. Иногда нужно определить связи между таблицами и запросами или только между запросами, чтобы Access знал, как правильно объединять эти объекты.
Чтобы определить связь между таблицами, находящимися в окне Схема данных, следует перенести с помощью мыши поле связи главной
Рис. 2.9. Окно Добавление таблицы
таблицы и поместить его на поле связи подчиненной таблицы. Откроется диалоговое окно Связи (рис. 2.10). В левом столбце выводятся имена главной таблицы и ключа, используемого для связи, а в правом столбце — имена подчиненной таблицы и внешнего ключа. Для изменения поля следует открыть список полей справа от его имени. Если связь производится по нескольким полям, то их имена можно добавить, используя пустые строки.
Обычно Access сам определяет тип создаваемой связи, проводя анализ полей, для которых определяется связь. Если только одно из полей является ключевым или имеет уникальный индекс, создается связь «один-ко-многим». Связь «один-к-одному» создается в том случае, когда оба связываемых поля являются ключевыми или имеют уникальные индексы.
Создавая связь, нужно настроить режим обеспечения целостности данных. Обеспечение целостности позволяет избежать ситуации, когда в подчиненной таблице имеются записи, не связанные с записями главной таблицы. Если этот режим включен, то Access не разрешит добавить в подчиненную таблицу запись, для которой не найдется связанной с ней записи из главной таблицы. Нельзя будет также удалить из главной таблицы запись, имеющую связанные с ней записи в подчиненной таблице. Например, нельзя будет добавить в таблицу Сессия запись с кодом студента, отсутствующим в таблице Студенты. Соответственно, из таблицы Студенты нельзя удалить запись о студенте, пока в таблице Сессия содержатся сведения о его оценках.
Рис. 2.10. Окно Связи
Режим обеспечения целостности данных этой связи можно включить, если выполнены следующие условия:
уникальный индекс;
Если для связи включен этот режим, то можно дополнительно указать, следует ли автоматически выполнять для связанных записей операции каскадного обновления и каскадного удаления. Если включить режим Каскадное обновление связанных полей, то при изменении значения ключа в главной таблице будут автоматически обновлены соответствующие значения в связанных записях подчиненной таблицы.
В том случае, когда эти режимы не включены, а режим обеспечения целостности данных включен, Access не позволит изменить значение в ключевом поле главной таблицы, а также удалить запись в главной таблице, если в подчиненной таблице имеются данные, связанные с этой записью. После завершения операции создания связи нужно нажать кнопку ОК. Связь отображается в виде линии, соединяющей две таблицы. Если включен режим обеспечения целостности данных, то Access изобразит на конце линии, соответствующей главной таблице, цифру 1. На другом конце линии, соответствующем подчиненной таблице, будет изображен символ бесконечности , для связи типа «один-ко-многим» и цифра 1 для связи типа «один-к-одному».
Если перенести с помощью мыши поле, не являющееся ключевым или не имеющее уникального индекса, на другое поле, которое также не является ключевым или не имеет уникального индекса, будет создана связь неопределенного типа. Режим обеспечения целостности данных в этом случае включить нельзя.
Любую связь можно изменить или удалить. Для изменения связи нужно сделать двойной щелчок по линии связи, и отредактировать ее в открывшемся окне Связи. Чтобы удалить связь, следует щелкнуть по ней и нажать клавишу Delete.
Типы связей в реляционных базах данных
Практически всегда БД не ограничивается одной таблицей. Сложно представить себе какой-либо бизнес-процесс на предприятии, который мог бы сконцентрироваться только на одном предмете в плане информации.
Рассмотрим пример учебной базы данных. Имеется отдел, который занимается обработкой звонков, поступающих на различные линии. Линии обслуживаются конкретными операторами. Операторы состоят в разных группах под присмотром супервайзеров.
Только из данного краткого описания можно выделить несколько самостоятельных объектов:
- Телефонные линии обслуживания;
- Сотрудники отдела;
- Должности сотрудников;
- Группы, по которым распределены сотрудники;
- Звонки.
Ознакомившись с диаграммой базы данных, можно обратить внимание на то, что некоторая информация из одних таблиц присутствует в других, т.е. между ними имеются связи.
В нашем конкретном случае, все таблицы можно соединить между собой. Чтобы понять, как это правильно сделать, необходимо рассмотреть типы связей.
Логику соединения таблиц в БД важно понять с самого начала изучения SQL, так как наверняка Вы не будете писать запросы только к одной таблице.
Всего существует 3 типа связей:
- Один к одному;
- Один ко многим;
- Многие ко многим.
Примечание:
В данном материале обозначения связей приводятся на примере MS SQL Server. В иных СУБД они могут обозначаться по-разному, но у Вас не должно возникнуть проблем с определением их типа, т.к. они либо очень похожи, либо интуитивно понятны.
Связь «Один к одному»
Связь один к одному образуется, когда ключевой столбец (идентификатор) присутствует в другой таблице, в которой тоже является ключом либо свойствами столбца задана его уникальность (одно и тоже значение не может повторяться в разных строках).
На практике связь «один к одному» наблюдается не часто. Например, она может возникнуть, когда требуется разделить данных одной таблицы на несколько отдельных таблиц с целью безопасности.
В учебной безе данных нет подходящего примера, но гипотетически могла бы существовать необходимость разделения таблицы сотрудников.
Пример:
Представьте, что базой данных пользуются несколько менеджеров и аналитиков, а таблица «Сотрудники» содержит те же столбцы, что и учебная база. Следовательно, доступ к персональным данным может получить любой из упомянутых работников.
Чтобы устранить возможность утечки конфиденциальной информации, принимается решение о переносе информации паспортных данных в отдельную таблицу, доступ к которой предоставляется ограниченному кругу лиц.
Связь «Один ко многим»
В типе связей один ко многим одной записи первой таблицы соответствует несколько записей в другой таблице.
Рассмотрим связь учебной базы данных между должностями и сотрудниками, которая относится к рассматриваемому типу.
Записи должностей в таблице «Должность» уникальны, так как нет смысла повторно создавать имеющуюся запись. Записи в таблице «Сотрудники» также уникальны, но несколько различных сотрудников могут находиться на одинаковой должностной позиции.
Символ ключа на конце связи указывает, что таблица, к которой этой конец прилегает, находится на стороне «один» (связанный столбец является первичным ключом), а символ бесконечности находится на стороне «многие» (такой столбец является внешним ключом).
Связь «Многие ко многим»
Если нескольким записям из одной таблицы соответствует несколько записей из другой таблицы, то такая связь называется «многие ко многим» и организовывается посредством связывающей таблицы.
В нашей базе подобное наблюдается только между таблицами с сотрудниками и линиями.
Из диаграммы видно, что имеются две связи «один ко многим» (один сотрудник может обрабатывать несколько телефонных линий, и одну линию могут обрабатывать несколько сотрудников), но в совокупности они образуют связь «многие ко многим».
Для чего все это нужно?
Связи выполняют более важную роль, чем просто информация размещения данных по таблицам. Прежде всего они требуются разработчикам для поддержания целостности баз данных.
Правильно настроив связи, можно быть уверенным, что ничего не потеряется.
Представьте, что Вы решили удалить одну из групп в таблице учебной базы данных. Если бы связи не было, то для тех сотрудников, которые к ней были определены, остался идентификатор несуществующей группы. Связь не позволит удалить группу, пока она имеется во внешних ключах других таблиц. Для начала следовало определить сотрудников в другие имеющиеся или новые группы, а только затем удалить ненужную запись. Поэтому связи называют еще ограничениями.
- < Назад
- Вперёд >
Новые статьи:
- Объединение таблиц – UNION
- Соединение таблиц – операция JOIN и ее виды
- Тест на знание основ SQL
Если материалы office-menu. ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.
Добавить комментарий
Связь «один ко многим»
В этом посте мы рассмотрим отношение «один ко многим» в Access 2007. Мы рассмотрим процесс настройки отношения «один ко многим», но сначала давайте рассмотрим, зачем они нужны.
Возможно, вы уже знакомы с термином «реляционная база данных», но, возможно, не понимаете, что он означает. Если это так, то, надеюсь, это направит вас на правильный путь к пониманию значения термина. Дизайн реляционной базы данных — это то, как таблицы базы данных связаны друг с другом. В то время как начинающий разработчик базы данных создаст одну единственную таблицу с большим количеством полей, разработчик реляционной базы данных рассмотрит данные, которые необходимо сохранить, и объединит их в несколько групп. Затем каждая группа оформляется в отдельную таблицу. А потому, что субъекты данных, хранящиеся в отдельных таблицах, связаны в реальном мире — например клиентов и заказов — нам нужно создать связь между таблицами внутри самой базы данных.
Давайте посмотрим, как это делается на практике. Мы будем использовать упрощенный пример базы данных клиентов/заказов.
Представьте, что у нас есть несколько клиентов, которые заказывают электронные товары по электронной почте, и мы хотим создать базу данных для записи сведений о клиентах и их заказах. Как мы упоминали в приведенном выше примере, мы бы сделали это, разделив информацию о клиенте и заказах на две отдельные группы, которые затем превратим в таблицы. Мы делаем это по той простой причине, что если данный клиент делает более одного заказа, нам нужно ввести данные клиента только один раз в таблицу клиентов. Поскольку мы собираемся создать связь между таблицей клиентов и таблицей заказов, все заказы для отдельных клиентов будут связаны с правильными данными о клиентах. Это стало возможным благодаря подключению поле первичного ключа таблицы клиентов с соответствующим полем внешнего ключа в таблице заказов. Если вы помните, первичный и внешний ключи были рассмотрены в моем последнем посте в блоге.
- Первым шагом является создание новой базы данных Access. Назовем это заказами клиентов.
- Затем создайте новую таблицу с именем tblCustomers со следующими полями: ID (автономный номер, основное поле), FIRSTNAME (текст), SURNAME (текст), ADDRESS1 (текст), CITY (текст) и POSTCODE (текст).
- Создайте новую таблицу с именем tblOrders со следующими полями: ORDERID (автономный номер, основное поле), ITEMORDERED (текст), DATE (дата), PRICE (число, установите свойство формата в валюту), CUSTOMERID (число). CustomerId будет внешним полем, когда мы создадим отношение.
- Чтобы создать отношение, выберите ЛЕНТУ ИНСТРУМЕНТОВ БАЗЫ ДАННЫХ и щелкните значок ОТНОШЕНИЯ (из группы ПОКАЗАТЬ/СКРЫТЬ).
- Откроется окно ОТНОШЕНИЯ. Вы также увидите всплывающую форму SHOW TABLE при первом открытии окна. Теперь мы собираемся выбрать, какие таблицы будут использоваться в отношениях.
- В нашем примере базы данных всего две таблицы. Щелкните tblCustomer , чтобы выделить его синим цветом, если он еще не выделен. Затем нажмите добавить. Сделайте то же самое для tblOrder , затем закройте всплывающую форму SHOW TABLE. Теперь вы должны увидеть две таблицы, представленные в виде отдельных полей в окне RELATIONSHIPS. Вы заметите на диаграмме ниже, что в каждом поле перечислены его поля и указаны первичные ключи.
- Теперь мы щелкнем поле ID в tblCustomer и перетащите его в поле CUSTOMERID в tblOrder . Обратите внимание, что изображение указателя мыши меняется с круга с перечеркнутой линией на знак «плюс», когда он наводится на поля в tblOrder. Когда вы отпустите кнопку мыши в конце операции щелчка и перетаскивания, откроется новая всплывающая форма ИЗМЕНИТЬ ОТНОШЕНИЯ.
- Отметьте три флажка: ПРИНУДИТЬ РЕФЕРЕНЦИАЛЬНУЮ ЦЕЛОСТНОСТЬ, КАСКАДНОЕ ОБНОВЛЕНИЕ СВЯЗАННЫХ ПОЛЕЙ и КАСКАДНОЕ УДАЛЕНИЕ СВЯЗАННЫХ ЗАПИСЕЙ. Мы не будем вдаваться в то, что они делают в этом сообщении в блоге.
- Нажмите КНОПКУ СОЗДАТЬ. Наши табличные отношения теперь на месте. Вот как теперь выглядит окно базы данных. Обратите внимание на линию, проведенную Access между полем ID tblCustomer и полем CUSTOMERID tblOrder .
Все, что нам нужно сделать сейчас, это ввести некоторые данные и проверить взаимосвязь. Попробуйте ввести эти данные с картинки ниже в tblCustomer :
Затем введите эти данные с картинки ниже в tblOrder :
Обратите внимание, что каждый заказ в tblOrder имеет CustomerId, соответствующий одному из идентификаторов клиента в tblCustomer . Так мы связываем каждый заказ с конкретным клиентом. Чтобы убедиться, что это работает, откройте таблицу tblCustomer и щелкните знак + (слева от таблицы) в каждой строке клиентов. Это показывает, что Access автоматически связал каждый заказ из tblOrder с соответствующим клиентом в tblCustomer 9.0006 .
Все это дает нам общее представление о том, что представляют собой отношения между таблицами. Однако есть гораздо больше, чем это. Например, после того, как мы установили такие отношения, мы можем создавать формы, запросы и отчеты, которые отражают эти отношения, и использовать преимущества, которые это имеет по сравнению с однотабличными приложениями базы данных «плоский файл». В следующем сообщении блога я надеюсь написать о создании единой формы доступа, которая позволит нам вводить данные одновременно в таблицы Customer и Orders.
Создание отношений «многие ко многим» (Access DB)
Создание отношений «многие ко многим» (Access DB)RelationalDBDesign
- Карта сайта
- Функции доступа
- Определить связи с базой данных
- Различные типы отношений доступа
- Один к одному Один ко многим
- Связь «многие ко многим»
- Доступ к ссылочной целостности
- Каскадное обновление Удалить
- Работа с Интернетом
- Использование гиперссылок Формы
- Страницы доступа к данным
- Типы доступа к данным
- Создать страницу стиля группировки
- Работа с веб-заключением
- Средства доступа
- Безопасность доступа Microsoft
- Работа с диалоговым окном запуска
- Шифрование базы данных расшифровки
- Общие сведения о репликации доступа
- Репликация баз данных Access
- Использование макросов доступа
- Доступ к макросам
- Создать макрос доступа
- Назначить макрос
- Запуск макросов запросов
Вербунг
Вербунг
Вербунг
- SQLConfiguration
- Функции доступа
- Отношения с базой данных
- Работа с Интернетом
- Средства доступа
- Доступ к макросам
Урок 4 | Создание связей «многие ко многим» |
Цель | Создание связи «многие ко многим». |
Создание отношений «многие ко многим» отличается от двух других типов отношений только тем, что отношения «многие ко многим» требуют вдвое больше шагов, чем два других. Отношения «многие ко многим» на самом деле являются двумя отношениями «один ко многим». Вы можете видеть это здесь, на этом рисунке:
Отношения «многие ко многим» на самом деле являются двумя отношениями «один ко многим».
Обратите внимание, что в этом случае таблица «Проекты» называется таблицей «Связь», поскольку она создает связь между таблицами «Клиенты» и «Консультанты».
Некоторые из ваших отношений «многие ко многим» просто разовьются из того, что вы устанавливаете отношения «один ко многим». Но бывают случаи, когда вы намеренно создаете отношения «многие ко многим», поэтому вот общие шаги:
- Создайте таблицы, необходимые для ваших данных. Помните, что поскольку Access представляет отношения «многие ко многим» с помощью двух отношений «один ко многим», вы будете использовать три таблицы. Снова взгляните на рисунок выше, чтобы увидеть, как связаны эти три таблицы.
- Откройте окно «Макет отношений», выбрав «Отношения» в меню «Инструменты».
- Очистите окно «Макет отношений», нажав кнопку «Очистить макет» на панели инструментов.
- Используйте диалоговое окно «Добавить таблицу», чтобы добавить нужные таблицы. В данном случае это Клиенты, Проекты и Консультанты.
- Создайте новые отношения, используя перетаскивание необходимых полей, как описано в предыдущем уроке.
Просто чтобы донести это до вас, я хотел бы, чтобы вы прошли через следующее слайд-шоу.
Создание отношений «многие ко многим»
На следующем уроке вы узнаете, как использовать отношения для управления ссылочной целостностью.
Взаимоотношения с базой данных — Викторина
Щелкните ссылку Тест ниже, чтобы ответить на несколько вопросов о работе с различными типами отношений.