Перейти к содержимому

Как сделать многие ко многим access

  • автор:

Как определить связи между таблицами в базе данных Access

Внимание! Материал, изложенный в этой статье, требует знания пользовательского интерфейса на компьютерах с одним пользователем. Эта статья относится только к базе данных Microsoft Access (.mdb или .accdb).

Аннотация

В этой статье описывается, как определить отношения в базе данных Microsoft Access. Статья включает в себя следующие темы:

  • Что такое связи между таблицами?
  • Виды связей между таблицами
    • Связи «один ко многим»
    • Связи «многие ко многим»
    • Связи «один к одному»
    • Как определить связи «один ко многим» или «один к одному»
    • Как определить связь «многие ко многим»

    Что такое связи между таблицами?

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

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

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

    Логические связи в базе данных позволяют эффективно запрашивать данные и создавать отчеты.

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

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

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

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

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

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

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

    Снимок экрана с примером отношений «один ко многим» в окне отношений в Access.

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

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

    Снимок экрана с примером отношений «многие ко многим» в окне отношений в Access.

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

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

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

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

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

    Как определить связи между таблицами

    При создании связи между таблицами связанные поля не должны иметь одни и те же имена. Однако связанные поля должны иметь один и тот же тип данных, если только поле первичного ключа не является полем AutoNumber. Вы можете сопоставить поле AutoNumber с полем Number, только если свойство FieldSize обоих совпадающих полей совпадает. Например, можно сопоставить поле AutoNumber и поле Number, если свойство theFieldSizeproperty обоих полей имеет значение Long Integer. Даже если оба совпадающих поля являются числовыми полями, они должны иметь параметр sameFieldSizeproperty.

    Как определить связи «один ко многим» или «один к одному»

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

    1. Закройте все таблицы. Нельзя создавать или изменять связи между открытыми таблицами.
    2. В Access 2002 и Access 2003 выполните следующие действия.
      1. Нажмите F11, чтобы переключиться в окно базы данных.
      2. В меню Инструменты выберите Связи.

      В Access 2007, Access 2010 или Access 2013 нажмите Связи в группе Показать/Скрыть на вкладке Инструменты базы данных.

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

      Как определить связь «многие ко многим»

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

      1. Создайте две таблицы, которые будут иметь связь «многие ко многим».
      2. Создайте третью таблицу. Это стыковочная таблица. В таблице соединения добавьте новые поля, которые имеют те же определения, что и основные ключевые поля из каждой таблицы, созданной в шаге 1. В связующей таблице основные ключевые поля функционируют как внешние ключи. Вы можете добавить другие поля в связующую таблицу, так же, как и в любую другую таблицу.
      3. В связующей таблице установите первичный ключ, чтобы включить основные ключевые поля из двух других таблиц. Например, в связующей таблице «TitleAuthors» первичный ключ будет состоять из полей OrderID и ProductID.

      Примечание. Чтобы создать первичный ключ, выполните следующие действия:

      1. Откройте таблицу в Конструкторе.
      2. Выберите поле или поля, которые вы хотите определить в качестве первичного ключа. Чтобы выбрать одно поле, нажмите на селектор строки для нужного поля. Чтобы выбрать несколько полей, удерживайте клавишу Ctrl, а затем нажмите селектор строки для каждого поля.
      3. В Access 2002 или в Access 2003 нажмите на Первичный ключ на панели инструментов. В Access 2007 нажмите на Первичный ключ в группе Инструменты на вкладке Дизайн.

      Примечание. Если вы хотите, чтобы порядок полей в первичном ключе с несколькими полями отличался от порядка этих полей в таблице, нажмите Индексы на панели инструментов для отображения диалогового окна Indexes, а затем заново упорядочите имена полей для индекса с именем PrimaryKey.

      Целостность данных

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

      • Совпадающие поля из основной таблицы являются первичным ключом или имеет уникальный индекс.
      • Связанные поля имеют один и тот же тип данных. Из этого правила есть два исключения: Поле счетчика может быть связано с полем номера, которое имеет FieldSize значение свойства «Длинное целое», а поле счетчика, имеющее FieldSize значение свойства «Код репликации», может быть связано с полем номера, которое имеет FieldSize значение свойства «Код репликации».
      • Обе таблицы относятся к одной и той же базе данных Access. Если таблицы являются связанными таблицами, они должны быть таблицами в формате Access, и необходимо открыть базу данных, в которой они хранятся, чтобы установить целостность данных. Референтная целостность не может быть применена для связанных таблиц из баз данных в других форматах.

      При использовании целостности данных применяются следующие правила:

      • Невозможно ввести значение во внешнем ключевом поле связанной таблицы, которое не существует в первичном ключе первичной таблицы. Тем не менее, можно ввести значение Null во внешнем ключе. Это указывает на то, что записи не связаны между собой. Например, невозможно иметь заказ, который назначается клиенту, который не существует. Тем не менее, можно иметь заказ, который не назначается никому, введя значение Null в поле CustomerID.
      • Вы не можете удалить запись из основной таблицы, если в соответствующей таблице существуют соответствующие записи. Например, вы не можете удалить запись сотрудника из таблицы «Сотрудники», если в таблице «Заказы» есть заказы, назначенные сотруднику.
      • Невозможно изменить основное ключевое значение в основной таблице, если эта запись имеет соответствующие записи. Например, вы не можете изменить идентификатор сотрудника в таблице «Сотрудники», если в таблице «Заказы» есть заказы, назначенные этому сотруднику.

      Каскадные обновления и удаления

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

      Если установить флажок Каскадное обновление связанных полей при определении связей, то каждый раз при изменении первичного ключа записи в главной таблице Microsoft Access автоматически обновляет первичный ключ до нового значения во всех связанных записях. Например, при изменении идентификатора клиента в таблице «Клиенты», поле CustomerID в таблице «Заказы» автоматически обновляется для каждого из заказов этого клиента, чтобы связи не были нарушены. Access каскадирует обновления без отображения каких-либо сообщений.

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

      Если выбрать Каскадное удаление связанных полей при определении связей, то при удалении записей в главной таблице Access автоматически удаляет связанные записи в соответствующей таблице. Например, при удалении записи клиента из таблицы «Клиенты», все заказы клиента автоматически удаляются из таблицы «Заказы». (Это включает записи в таблице «Детали заказа», которые связаны с записями «Заказы»). При удалении записей из формы или таблицы после установки флажка Каскадное удаление связанных записей Access выводит предупреждение, что связанные записи также могут быть удалены. Однако при удалении записей с помощью запроса удаления Access автоматически удаляет записи в соответствующих таблицах, не отображая предупреждение.

      Типы соединения

      Существует три основных типа соединения: Вы можете увидеть их на следующем снимке экрана:

      Снимок экрана параметров объединения, на котором показаны три типа объединения.

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

      Вариант 2 определяет левое внешнее соединение. Левое внешнее соединение — это соединение, в котором все записи с левой стороны операции LEFT JOIN в оператора запроса SQL добавляются к результатам запроса, даже если нет соответствующих значений в объединенном поле из таблицы на правой стороне.

      Вариант 3 определяет правое внешнее соединение. Правое внешнее соединение — это соединение, в котором все записи с правой стороны операции RIGHT JOIN в операторе запроса SQL добавляются к результатам запроса, даже если нет соответствующих значений в объединенном поле из таблицы на левой стороне.

      Обратная связь

      Были ли сведения на этой странице полезными?

      Как создать множественную связь один-ко-многим между двумя таблицами в ACCESS

      введите сюда описание изображения

      Подскажите пожалуйста, как сделать подобную связь? В результате я хочу получить нарисованную связь. Просто протянуть связь не получается, т.к. ругается на целостность данных. Конкретно мне надо поставить зависимость между экземплярами «id_сети», для этого я вынес их в отдельную таблицу, но от одного ключевого атрибута я не могу поставить зависимость к составному ключу второй таблицы.

      Отслеживать

      51.4k 86 86 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков

      задан 4 мар 2016 в 12:37

      93 1 1 серебряный знак 12 12 бронзовых знаков

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

      4 мар 2016 в 13:13

      Очень странная, на мой взгляд таблица «Поставщик_покупатель». Она одновременно содержит как информацию о сущностях, так и связь этих сущностей. А Вы хотите эти пары еще и к сетям привязать? Я бы серьёзно задумался над архитектурой и над нормальной формой такой БД. Но если, хотите все-таки связать, то в этой таблице надо добавить поле «id_сети_ref» как ссылку (вторичный ключ) на «Id_сети»

      MS Access – отношения «многие ко многим»

      В этой главе давайте разберемся в отношениях «многие ко многим». Чтобы представить отношение многие-многие, вы должны создать третью таблицу, часто называемую соединительной таблицей, которая разбивает отношение многие-ко-многим на два отношения один-ко-многим. Для этого нам также нужно добавить соединительную таблицу. Давайте сначала добавим еще одну таблицу tblAuthers .

      TblAuthers

      Давайте теперь создадим отношения « многие ко многим» . У нас есть более одного автора, работающего над несколькими проектами, и наоборот. Как вы знаете, у нас есть поле Author в tblProjects, поэтому мы создали для него таблицу. Нам больше не нужно это поле.

      TblAuthers Описание

      Выберите поле Автор и нажмите кнопку удаления, и вы увидите следующее сообщение.

      Диалоговое окно

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

      Иностранные ключи

      Эти поля внешнего ключа будут первичными ключами из двух таблиц, которые были связаны вместе – tblAuthers и tblProjects .

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

      Дизайн столовых инструментов

      Комбинация этих двух полей является уникальным идентификатором таблиц . Давайте теперь сохраним эту таблицу как tblAuthorJunction .

      Последний шаг в сближении отношений «многие ко многим» – возврат к представлению об этих отношениях и создание этих отношений, нажав « Показать таблицу» .

      Выберите три вышеуказанные таблицы и нажмите кнопку «Добавить», а затем закройте это диалоговое окно.

      Выделенные таблицы

      Нажмите и перетащите поле AuthorID из tblAuthors и поместите его поверх таблицы AuthorID таблицы tblAuthorJunction .

      TblAuthers Junction

      Отношения, которые вы создаете, – это отношения, которые Access будет рассматривать как отношения «один ко многим». Мы также обеспечим ссылочную целостность. Теперь давайте включим Cascade Update и нажмите кнопку Create , как на скриншоте выше.

      каскадный

      Давайте теперь возьмем ProjectID , перетащите его прямо поверх ProjectID из tblAuthorJunction .

      Ссылочный ключ

      Мы обеспечим обязательное использование ссылочной целостности и каскадного обновления .

      Каскадное обновление

      Ниже приведены отношения многие ко многим.

      MS Access – отношения один ко многим

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

      Процесс создания отношения один-ко-многим точно такой же, как и при создании отношения один-к-одному.

      Один ко многим

      Давайте сначала очистим макет, нажав опцию « Очистить макет» на вкладке «Дизайн» .

      Инструменты базы данных

      Сначала мы добавим еще одну таблицу tblTasks, как показано на следующем скриншоте.

      Таблица задач

      Нажмите на значок Сохранить и введите tblTasks в качестве имени таблицы и перейдите в представление Отношения .

      Задача Отношения

      Нажмите на опцию Показать таблицу .

      Показать задачу таблицы

      Добавьте tblProjects и tblTasks и закройте диалоговое окно Показать таблицу .

      Добавить проекты

      Мы можем снова пройти тот же процесс, чтобы связать эти таблицы. Нажмите и удерживайте ProjectID из tblProjects и перетащите его до ProjectID из tblTasks. Кроме того, окно отношений появляется, когда вы отпускаете мышь.

      ProjectID

      Нажмите кнопку Создать. Теперь у нас созданы очень простые отношения.

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

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