Как сделать связь один ко многим в access 2007?
Настройка связей между таблицами
В данном разделе вы узнаете, как создать и удалить связи между таблицами, как включить режим обеспечения целостности данных и как просмотреть дочерние записи при редактировании родительской таблицы.
Прежде чем приступить к настройке связей, следует отметить, что для установки связи между таблицами используются общие поля этих таблиц. Вторичный ключ дочерней таблицы содержит значения первичного ключа родительской таблицы, и таким образом запись дочерней таблицы ссылается на одну из записей родительской таблицы.
Просмотр, создание, редактирование и удаление связей осуществляются на схеме данных (рис. 2.21). Чтобы открыть схему данных, нажмите кнопку Схема данных на вкладке Работа с базами данных .
Рис. 2.21. Схема данных
Итак, начнем с рассмотрения процедуры создания связи.
Создание связи
Если вы хотите создать связь между двумя таблицами, выполните следующие действия.
1. Перед созданием связи обе связываемые таблицы должны отображаться на схеме данных. Если таблица отсутствует на схеме данных, ее требуется вначале добавить. Для этого нажмите кнопку Отобразить таблицу на вкладке Конструктор . Затем в появившемся окне Добавление таблицы щелкните кнопкой мыши на названии таблицы и нажмите кнопку Добавить . После добавления всех нужных таблиц нажмите кнопку Закрыть .
2. Щелкните кнопкой мыши на названии поля, которое является первичным ключом в родительской таблице. Удерживая нажатой кнопку мыши, перетащите поле первичного ключа, наведите указатель на название того поля дочерней таблицы, которое должно стать вторичным ключом (при этом в изображении указателя появится знак +), и отпустите кнопку мыши.
3. На экране появится окно Изменение связей (рис. 2.22). В этом окне указаны названия связываемых полей. Убедитесь, что поля для создания связи выбраны верно. В случае обнаружения ошибки выберите другие поля.
Рис. 2.22. Окно Изменение связей
4. Выберите режим обеспечения целостности данных (об этом режиме подробно будет рассказано в следующем подразделе). Рекомендуется установить флажок Обеспечение целостности данных . Затем нажмите кнопку Создать .
5. Сохраните изменения схемы данных, нажав комбинацию клавиш Ctrl+S .
Далее будет описано, как включить режим обеспечения целостности данных при создании или изменении связи.
Обеспечение целостности данных
Целостностью данных в Microsoft Access называется ссылочная целостность – состояние отдельной связи или всей базы данных, при котором отсутствуют некорректные ссылки. Иными словами, целостность данных означает, что в дочерней таблице нет записей, ссылающихся «в никуда», вторичный ключ каждой записи содержит значение, существующее в столбце первичного ключа родительской таблицы.
Целостность данных может нарушиться в следующих ситуациях:
• в дочернюю таблицу добавляется новая запись, содержащая некорректное (отсутствующее в первичном ключе родительской таблицы) значение вторичного ключа, или в существующей записи дочерней таблицы значение вторичного ключа изменяется на некорректное;
• из родительской таблицы удаляется запись, в результате чего ссылки на эту запись становятся некорректными;
• в родительской записи изменяется значение первичного ключа, следовательно, ссылки на эту запись также становятся некорректными.
Исключить все эти ситуации позволяет режим автоматического обеспечения целостности данных. Этот режим включается отдельно для каждой связи в окне Изменение связи (см. рис. 2.22). Если установить флажок Обеспечение целостности данных , программа Access не допустит выполнения операций, ведущих к нарушению ссылочной целостности. Так, запрещается:
• сохранение записи с некорректным значением вторичного ключа;
• удаление родительской записи, если для связи не установлен флажок каскадное удаление связанных записей ; либо вместе с родительской записью автоматически удаляются дочерние записи, если флажок каскадное удаление связанных записей установлен;
• изменение значения первичного ключа родительской записи, если для связи не установлен флажок каскадное обновление связанных полей ; либо при изменении значения первичного ключа в родительской записи автоматически меняются значения вторичного ключа в дочерних записях, если флажок каскадное обновление связанных полей
Если вторичный ключ дочерней таблицы содержит некорректные значения, то включить режим обеспечения целостности невозможно: необходимо вначале удалить или изменить значения, нарушающие целостность данных.
После того как режим обеспечения целостности данных включен, над линией связи в схеме данных появляется символ возле родительской таблицы и символ ? возле дочерней таблицы (см. рис. 2.21). Благодаря этим подписям вы сразу увидите, что для данной записи поддерживается целостность данных.
Продолжим изучение операций, выполняемых со связями, и перейдем теперь к редактированию существующих связей.
Редактирование связи
Если вам необходимо изменить свойства связи, например режим обеспечения целостности данных для связи, дважды щелкните кнопкой мыши на линии связи в схеме данных.
На экране появится окно Изменение связей
(см. рис. 2.22). В этом окне выполните необходимые изменения и нажмите кнопку ОК .В следующем подразделе рассказывается, как удалить ненужную или ошибочно созданную связь между таблицами.
Удаление связи
Чтобы удалить связь, щелкните кнопкой мыши на линии связи в схеме данных (линия при этом станет жирной) и нажмите клавишу Delete . На появившейся панели подтвердите необходимость удаления связи, нажав кнопку Да .
На этом заканчивается рассмотрение операций со связями. Последний подраздел этого раздела посвящен просмотру дочерних записей при работе с родительской таблицей.
Отображение дочерних записей
Итак, если между таблицами создана связь, то, открыв родительскую таблицу в режиме таблицы, вы сможете просматривать и записи дочерней таблицы.
Чтобы увидеть записи, ссылающиеся на данную родительскую запись, нажмите знак + слева от записи. Откроется подтаблица, содержащая дочерние записи (рис. 2.23).
Если таблица имеет несколько дочерних таблиц, то вы можете выбрать ту из них, которая будет отображаться в виде подтаблицы.
• Если подтаблица не выбрана, при первом щелчке кнопкой мыши на знаке + появляется окно Вставка подтаблицы . В этом окне щелкните кнопкой мыши на названии нужной дочерней таблицы (при этом внизу окна отобразятся названия первичного ключа и вторичного ключа, с помощью которых образована связь таблиц). Нажмите кнопку ОК .
• Если подтаблица уже была выбрана, но вы хотите выбрать другую дочернюю таблицу в качестве подтаблицы, выполните следующие действия.
1) Перейдите в режим конструктора (кнопка Режим вкладки Главная ).
2) На вкладке Конструктор нажмите кнопку Страница свойств .
Рис. 2.23. Просмотр дочерних записей
3) В появившемся окне свойств (рис. 2.24) щелкните кнопкой мыши на значении свойства Имя подтаблицы . Справа от значения свойства появится кнопка
4) Нажмите эту кнопку и выберите из списка название дочерней таблицы, записи которой будут отображаться в подтаблице.
5) Сохраните изменения, нажав сочетание клавиш Ctrl+S .
6) Вернитесь в режим таблицы (нажмите кнопку Режим на вкладке Главная или Конструктор ).
Теперь при нажатии знака + будут отображаться записи выбранной вами подтаблицы.
Настроив связи между таблицами, вы завершили создание структуры базы данных. Последним аспектом работы с таблицами, о котором будет рассказано, станет просмотр данных в режиме таблицы.
Следующая глава >
Реляционная база данных, созданная в соответствии с проектом канонической модели данных предметной области, состоит из нормализованных таблиц, связанных одно-многозначными отношениями. В такой базе данных обеспечивается отсутствие дублирования описательных данных, их однократный ввод, поддержание целостности данных средствами системы. Связи между таблицами позволяют выполнить объединение данных различных таблиц, необходимое для решения большинства задач ввода, просмотра и корректировки данных, получения информации по запросам и вывода отчетов.
Связи между таблицами устанавливаются в соответствии с проектом логической структуры базы данных и запоминаются в схеме данных Access. Схема данных в Access является не только средством графического отображения логической структуры базы данных, она активно используется системой в процессе обработки данных. Создание схемы данных позволяет упростить конструирование многотабличных форм, запросов, отчетов, а также обеспечить поддержание целостности взаимосвязанных данных при вводе и корректировке данных в таблицах.
Создание схемы данных
Создание схемы данных начинается с выполнения команды Схема данных (Relationships) в группе Отношения (Relationships) на вкладке ленты Работа с базами данных (Database Tools). В результате выполнения этой команды открывается окно схемы данных и диалоговое окно
Включение таблиц в схему данных
В окне Добавление таблицы (Show Table) (рис. 3.48) отображены все таблицы и запросы, содержащиеся в базе данных. Выберем вкладку Таблицы (Tables) и с помощью кнопки Добавить (Add) разместим в окне Схема данных (Relationships) все ранее созданные таблицы базы данных Поставка товаров, отображенные в окне Добавление таблицы (Show Table). Затем нажмем кнопку Закрыть (Close). В результате в окне Схема данных (Relationships) таблицы базы будут представлены окнами со списками своих полей и выделенными жирным шрифтом ключами (см. рис. 3.52).
Создание связей между таблицами схемы данных
При создании связей в схеме данных используется проект логической структуры реляционной базы данных, в котором показаны все одно-многозначные связи таблиц. Реализуются связи с помощью добавления в связанные таблицы общих полей, называемых ключом связи. При одно-многозначных отношениях между таблицами ключом связи является ключ главной таблицы (простой или составной). В подчиненной таблице он может быть частью уникального ключа или вовсе не входить в состав ключа таблицы. Одно-многозначные связи являются основными в реляционных базах данных. Одно-однозначные связи используются, как правило, при необходимости распределять большое количество полей, определяемых одним и тем же ключом, по разным таблицам, имеющим разный регламент обслуживания.
Создание связей по простому ключу
Установим связь между таблицами ПОКУПАТЕЛЬ и ДОГОВОР, которые находятся в отношении «один-ко-многим». Устанавливая связи между парой таблиц, находящихся в отношении типа 1 : M, выделим в главной таблице ПОКУПАТЕЛЬ ключевое поле КОД_ПОК, по которому устанавливается связь. Далее при нажатой кнопке мыши перетащим его в соответствующее поле подчиненной таблицы ДОГОВОР.
Поскольку поле связи является уникальным ключом в главной таблице связи, а в подчиненной таблице связи не является ключевым, схема данных в Access выявляет отношение «один-ко-многим» между записями этих таблиц. Значение «один-ко-многим» (One-To-Many) отобразится в окне Изменение связей (Edit Relationships) в строке Тип отношения (Relationship Type) (рис. 3.49).
ЗАМЕЧАНИЕ
Если поле связи является уникальным ключом в обеих связываемых таблицах, схема данных в Access выявляет отношение «один-к-одному«. Если для связи таблиц вместо ключевого поля главной таблицы используется некоторый уникальный индекс, система также констатирует отношение таблиц как 1 : М или 1 : 1.
Определение связей по составному ключу
Определим связи между таблицами НАКЛАДНАЯ ОТГРУЗКА, которые связаны по составному ключу НОМ_НАКЛ + КОД_СК. Для этого в главной таблице НАКЛАДНАЯ выделим оба этих поля, нажав клавишу , и перетащим их в подчиненную таблицу ОТГРУЗКА.
В окне Изменение связей (Edit Relationships) (рис. 3.50) для каждого поля составного ключа главной таблицы НАКЛАДНАЯ, названной Таблица/запрос (Table/Query), выберем соответствующее поле подчиненной таблицы ОТГРУЗКА, названной Связанная таблица/запрос (Related Table/Query).
Каскадное обновление и удаление связанных записей
Если для выбранной связи обеспечивается поддержание целостности, можно задать режим каскадного удаления связанных записей и режим каскадного обновления связанных полей. Такие параметры делают возможным в главной таблице, соответственно, удаление записей и изменение значения в ключевом поле, т. к. при этих параметрах система автоматически выполнит необходимые изменения в подчиненных таблицах, обеспечив сохранение свойств целостности базы данных.
В режиме каскадного удаления связанных записей при удалении записи из главной таблицы будут автоматически удаляться все связанные записи в подчиненных таблицах. При удалении записи из главной таблицы выполняется каскадное удаление подчиненных записей на всех уровнях, если этот режим задан на каждом уровне.
В режиме каскадного обновления связанных полей при изменении значения ключевого поля в записи главной таблицы Access автоматически изменит значения в соответствующем поле в подчиненных записях.
Установить в окне Изменение связей (Edit Relationships) (см. рис. 3.49) флажки каскадное обновление связанных полей (Cascade Update Related Fields) и каскадное удаление связанных записей (Cascade Delete Related Records) можно только после задания параметра обеспечения целостности данных.
После создания связей изображения таблиц могут перемещаться в пределах рабочего пространства окна схемы данных. Перемещения и изменения размеров окон со списками полей таблиц в окне схемы данных осуществляются принятыми в Windows способами.
Заметим, если каскадное удаление не разрешено, невозможно удалить запись в главной таблице, если имеются связанные с ней записи в подчиненной.
Смотрим видео:
Вот основное, что мы хотели рассказать на тему «Схема данных в Access».
Дальше будем изучать запросы в Access.
оздание связей «один ко многим» или «один к одному»
Чтобы создать связь вида «один ко многим» или «один к одному», воспользуйтесь приведенной ниже последовательностью действий:
1. Закройте все открытые таблицы. Создавать или изменять связи между открытыми таблицами нельзя.
2. В Access версий 2002 или 2003 выполните указанные ниже действия.
a. Нажмите клавишу F11, чтобы перейти в окно базы данных.
b. В меню Сервис выберите команду Связи.
В Access 2007 нажмите кнопку Связи в группе Показать или скрыть вкладки Инструменты для баз данных.
3. Если в базе данных отсутствуют связи, то автоматически появится диалоговое окно Добавление таблицы. Если окно Добавление таблицы не появилось, но при этом нужно добавить таблицы в список связываемых, выберите команду Добавить таблицу в меню Связи.
4. Дважды щелкните названия таблиц, которые необходимо связать, после чего закройте диалоговое окно Добавление таблицы. Чтобы связать таблицу с самой собой, добавьте ее два раза.
5. Перетащите связываемое поле из одной таблицы на связываемое поле в другой. Чтобы перетащить несколько полей, нажмите клавишу CTRL, щелкните каждое поле, а затем перетащите их.
В большинстве случаев понадобится перетащить поле первичного ключа (выделенное полужирным текстом) из одной таблицы на аналогичное поле (часто с тем же самым названием) , называемое внешним ключом, другой таблицы.
6. Появится окно Изменение связей. Убедитесь, что в каждом из столбцов отображаются названия нужных полей. Если нужно, их можно изменить.
При необходимости задайте параметры связи. Если требуются сведения о конкретном элементе окна Изменение связей, нажмите кнопку со знаком вопроса, а затем щелкните соответствующий элемент. Эти параметры будут подробно описаны ниже.
7. Чтобы установить связь, нажмите кнопку Создать.
8. Повторите действия с 5 по 8 для каждой пары связываемых таблиц.
При закрытии диалогового окна Изменение связей Microsoft Access спросит, нужно ли сохранить макет. Вне зависимости от ответа на этот вопрос создаваемые связи сохраняются в базе данных.
Примечание. Создавать связи можно не только в таблицах, но и в запросах. При этом, однако, не обеспечивается целостность данных.
Создание связей «многие ко многим»
Чтобы создать связь вида «многие ко многим», выполните указанные ниже действия.
1. Создайте две таблицы, которые необходимо связать отношением «многие ко многим».
2. Создайте третью таблицу, называемую соединительной, и добавьте в нее поля с теми же определениями, что и поля первичных ключей в каждой из двух других таблиц. Поля первичных ключей соединительной таблицы служат внешними ключами. В соединительную таблицу, как и в любую другую, можно добавить и другие поля.
3. Задайте первичный ключ этой таблицы таким образом, чтобы он включал в себя поля первичных ключей обеих основных таблиц. Например, первичный ключ соединительной таблицы «АвторыКниг» будет состоять из полей «ИД_заказа» и «ИД_продукта».
Примечание. Чтобы создать первичный ключ, выполните указанные ниже действия.
a. Откройте таблицу в режиме конструктора.
b. Выберите одно или несколько полей, которые необходимо определить в качестве первичного ключа. Чтобы выбрать одно поле, щелкните знак выбора строки для нужного поля.
Чтобы выбрать несколько полей, удерживайте нажатой клавишу CTRL и щелкните знак выбора строки для каждого из полей.
c. В Access версий 2002 или 2003 нажмите кнопку Первичный ключ на панели инструментов.
В Access 2007 нажмите кнопку Первичный ключ в группе Сервис вкладки Структура.
Примечание. Чтобы порядок следования полей в первичном ключе, состоящем из нескольких полей, отличался от такового в таблице, нажмите кнопку Индексы на панели инструментов, в результате чего появится диалоговое окно Индексы, в котором можно изменить порядок следования полей индекса под названием КлючевоеПоле.
Как в access
В разделе Программное обеспечение на вопрос Как в Access установить связи между таблицами, с поддержкой целостности данных заданный автором Впросак лучший ответ это оздание связей «один ко многим» или «один к одному»
Чтобы создать связь вида «один ко многим» или «один к одному», воспользуйтесь приведенной ниже последовательностью действий:
1. Закройте все открытые таблицы. Создавать или изменять связи между открытыми таблицами нельзя.
2. В Access версий 2002 или 2003 выполните указанные ниже действия.
a. Нажмите клавишу F11, чтобы перейти в окно базы данных.
b. В меню Сервис выберите команду Связи.
В Access 2007 нажмите кнопку Связи в группе Показать или скрыть вкладки Инструменты для баз данных.
3. Если в базе данных отсутствуют связи, то автоматически появится диалоговое окно Добавление таблицы. Если окно Добавление таблицы не появилось, но при этом нужно добавить таблицы в список связываемых, выберите команду Добавить таблицу в меню Связи.
4. Дважды щелкните названия таблиц, которые необходимо связать, после чего закройте диалоговое окно Добавление таблицы. Чтобы связать таблицу с самой собой, добавьте ее два раза.
5. Перетащите связываемое поле из одной таблицы на связываемое поле в другой. Чтобы перетащить несколько полей, нажмите клавишу CTRL, щелкните каждое поле, а затем перетащите их.
В большинстве случаев понадобится перетащить поле первичного ключа (выделенное полужирным текстом) из одной таблицы на аналогичное поле (часто с тем же самым названием) , называемое внешним ключом, другой таблицы.
6. Появится окно Изменение связей. Убедитесь, что в каждом из столбцов отображаются названия нужных полей. Если нужно, их можно изменить.
При необходимости задайте параметры связи. Если требуются сведения о конкретном элементе окна Изменение связей, нажмите кнопку со знаком вопроса, а затем щелкните соответствующий элемент. Эти параметры будут подробно описаны ниже.
7. Чтобы установить связь, нажмите кнопку Создать.
8. Повторите действия с 5 по 8 для каждой пары связываемых таблиц.
При закрытии диалогового окна Изменение связей Microsoft Access спросит, нужно ли сохранить макет. Вне зависимости от ответа на этот вопрос создаваемые связи сохраняются в базе данных.
Примечание. Создавать связи можно не только в таблицах, но и в запросах. При этом, однако, не обеспечивается целостность данных.
Создание связей «многие ко многим»
Чтобы создать связь вида «многие ко многим», выполните указанные ниже действия.
1. Создайте две таблицы, которые необходимо связать отношением «многие ко многим».
2. Создайте третью таблицу, называемую соединительной, и добавьте в нее поля с теми же определениями, что и поля первичных ключей в каждой из двух других таблиц. Поля первичных ключей соединительной таблицы служат внешними ключами. В соединительную таблицу, как и в любую другую, можно добавить и другие поля.
3. Задайте первичный ключ этой таблицы таким образом, чтобы он включал в себя поля первичных ключей обеих основных таблиц. Например, первичный ключ соединительной таблицы «АвторыКниг» будет состоять из полей «ИД_заказа» и «ИД_продукта».
Примечание. Чтобы создать первичный ключ, выполните указанные ниже действия.
a. Откройте таблицу в режиме конструктора.
b. Выберите одно или несколько полей, которые необходимо определить в качестве первичного ключа. Чтобы выбрать одно поле, щелкните знак выбора строки для нужного поля.
Чтобы выбрать несколько полей, удерживайте нажатой клавишу CTRL и щелкните знак выбора строки для каждого из полей.
c. В Access версий 2002 или 2003 нажмите кнопку Первичный ключ на панели инструментов.
В Access 2007 нажмите кнопку Первичный ключ в группе Сервис вкладки Структура.
Примечание. Чтобы порядок следования полей в первичном ключе, состоящем из нескольких полей, отличался от такового в таблице, нажмите кнопку Индексы на панели инструментов, в результате чего появится диалоговое окно Индексы, в котором можно изменить порядок следования полей индекса под названием КлючевоеПоле.
Pers.narod.ru. Обучение. Access VBA — редактируем связь многие-ко-многим и программно выполняем запрос с параметрами формы
Pers.narod.ru. Обучение. Access VBA — редактируем связь многие-ко-многим и программно выполняем запрос с параметрами формыЭтот сайт больше не обновляется. Подключите Javascript, чтобы увидеть новый адрес страницы или перейдите к статье
Pers.narod.ru. Обучение. Access VBA — редактируем связь многие-ко-многим и программно выполняем запрос с параметрами формы |
Статья написана в учебных целях, хотя в ней есть и пара интересных неучебных нюансов.
Постановка проблемы: мы хотим динамически редактировать в Access связи между 2 таблицами, объединенными отношением «многие ко многим» (например, теги и слова, помеченные тегами, студенты и дисциплины, которые они посещают, или просто абстрактные «объекты» и «категории»). Думаю, понятно, что «многие ко многим» означает, что один объект может относиться к нескольким категориям и, наоборот, одной категории соответствует несколько объектов.
Классический способ реализации такой связи — промежуточная таблица, хранящая внешние ключи
категорий и объектов и реализующая, таким образом, две связи «один ко многим», на которые мы разложили
наше отношение:
Сама по себе реализация такого редактора в Access несложна, вот весь процесс.
1. Создаем новую базу данных и сохраняем ее.
2. В окне базы данных на вкладке «Таблицы» создаем в режиме конструктора 3 таблицы:
- таблица «Категории» будет включать поле «Код категории», имеющее тип «Счетчик» и текстовое поле «Категория», служащее для описания; щелкнув правой кнопкой на поле «код», сделаем его ключевым:
- таблица «Объекты» будет устроена аналогично: она включает ключевое поле-счетчик с именем «Код объекта» и текстовое поле «Объект», предназначенное для данных;
- наконец, таблица «Связи» состоит из двух числовых полей, показанных ниже:
Обратите внимание, что оба поля я сделал ключевыми — это поможет избежать дублирования связей — например, объект 1 не должен иметь две одинаковых связи с категорией 1. Чтобы сделать оба поля ключевыми, нужно при нажатой клавише Ctrl выделить их, щелкая по области ключа, а затем вызвать правой кнопкой пункт меню.
3. Идем Сервис, Схема данных…, добавляем в окно схемы все 3 таблицы и связываем их, перетаскивая поля мышкой так,
чтобы получились связи, показанные на первом рисунке. В появившемся окне «Изменение связей» нужно включить все флажки для
обеспечения целостности данных при добавлении или удалении записей.
4. Закрыв и сохранив схему, вносим по несколько записей в таблицы «Категории» и «Объекты».
5. Формы для работы с категориями и объектами по отдельности или в связке «главная и подчиненная таблица» сделать легко. Для последнего, например, достаточно перейти на вкладку Формы, вызвать Мастер форм, добавить для формы все поля таблиц «Категории» и «Объекты», а на следующем шаге определить главную и починенную формы. Но нас интересует сейчас не это. Главное, что мы хотим сделать — спроектировать форму «Связи» для редактирования наших данных.
6. Вызываем Конструктор форм, получаем новую пустую форму. Если окна «Раздел: область данных» (на самом деле это окно свойств) нет на экране, вызываем его, выбрав в окне формы правой кнопкой мыши пункт меню Свойства.
7. В выпадающем списке окна свойств выбираем «Форма» и назначаем на вкладке Данные нашей форме источником данных таблицу «Связи».
8. С помощью меню Вид, Панель элементов убеждаемся, что панель с интерфейсными элементами доступна. Находим
на ней элемент «Список» и добавляем его на форму, при этом должен вызваться мастер «Создание списков»:
Если мастера для этого или других элементов не вызываются, причин может быть 2: не нажата кнопка «Мастера» на Панели элементов или не установлены соответствующие компоненты Access.
Подтверждаем, что список использует данные из таблицы или запроса, на следующем шаге выбираем таблицу «Категории», затем включаем в список оба ее поля, на следующем шаге подтверждаем скрытие ключевого столбца, еще на одном шаге выбираем вариант «Сохранить в поле» и поле «Код категории», наконец, делаем разумную подпись, например, «Выбор категории». В окне свойств на закладке «Другие» дадим списку удобное название, например, СписокКатегории.
9. Аналогичным образом создаем список для отображения объектов из таблицы «Объекты», а называться он будет «СписокОбъекты».
10. В принципе, все готово. Наша форма работает, в чем можно убедиться, открыв ее кнопкой Вид
Проблема состоит в том, что при повторном добавлении связи Access начинает ругаться стандартными сообщениями («Изменения не были внесены из-за повторяющихся значений в индексе…») и, более того, не дает сохранить последние внесенные изменения. Напишем небольшую процедуру на VBA для решения проблемы и лучшей обработки записей.
11. Вернувшись в режим конструктора, добавим на свободное место кнопку и с помощью мастера «Создание кнопок» назначим ей действие «добавить запись» из категории действий «Обработка записей». Все остальное можно настроить по вкусу.
12. При выбранной кнопке в окне свойств перейдем на вкладку События и обратимся к коду сгенерированного
нами обработчика:
13. Мы перепишем код сгенерированной Access процедуры так, чтобы он отслеживал ситуацию, когда в списках категорий и объектов ничего не выбрано, а также не давал повторно добавить уже существующую связь. Для последнего действия нам понадобиться выполнить из кода на VBA дополнительный запрос по извлечению выбранных на форме кода категории и кода объекта из таблицы «Связи». Если этот запрос вернет пустой результат, значит, такой связи еще нет и следует добавить запись. Сгенерировать такой запрос на вкладке «Запросы» и потом просто вызвать его, к сожалению, не получится. Дело в том, что Access не видит взятых из формы параметров запроса, если запрос выполняется программно. Ошибка, как правило, возникает со следующим текстом «Too few parameters. Expected Число» («Слишком мало параметров. Ожидалось Число»). Эта ошибка возникает, если команда или один из нижележащих запросов содержит обращения к формам или собственные параметры, — все эти обращения будут восприняты как параметры, которым не передано значение.
Почему так происходит?
По этому поводу в справке Microsoft MSDN написано примерно следующее:
NOTE: В DAO Вы должны явно присвоить значение параметру.
При использовании DoCmd.OpenQuery Вы этого делать не должны, т.к.
DAO использует операции низкого уровня, что даёт Вам большую свободу
в использовании параметров (т.е. Вы можете сами присвоить параметру
значение переменной, а не использовать ссылку на форму), но Вы должны
выполнить служебные действия, которые Access делает «за кулисами»
при исполнении DoCmd. С другой стороны, DoCmd работает на более
высоком уровне, чем DAO. Выполняя DoCmd, Microsoft Access делает
некоторые предположения о том, как поступить с параметрами, и не дает
Вам никакой свободы в этом отношении.
Попросту говоря, при выполнении запроса непосредственно из окна Access он выполняется с помощью движка JET, который, будучи встроен в Access, «знает» о наличии форм и пытается найти их поля и подставить значения. При выполении запроса из кода методом Execute или иным, запрос выполняется с помощью библиотеки DAO, которая, будучи внешней, ничего «не знает» о формах ACCESS, поэтому все недостающие значения считает неопределенными.
В Интернете можно встретить советы предварительно обработать все параметры процедурой вида
Dim q As DAO.QueryDef, p As DAO.Parameter Set q = CurrentDb.QueryDefs("ИмяЗапроса") 'как обычного запроса Select, 'так и INSERT/UPDATE; в запросах на удаление это не помогает For Each p In q.Parameters p.Value = Eval(p.Name) Next q.Execute q.close: Set q=Nothing
Однако, для работы этого кода нужно, во-первых, иметь подключенную DAO (в окне редактора Visual Basic при остановленной программе вызвать Tools, References (или Сервис, Ссылки), найти и включить в списке библиотеку Microsoft DAO 3.6 Object Library), во-вторых, работа кода все-таки не гарантируется и в этом случае.
Мы хотим обойтись стандартным кодом
Dim rst As Recordset CurrentDb.OpenRecordset ("строка запроса")
однако, едва избавившись от ошибок с недостающимим параметрами, получим сообщение о нессответствии типов (type mismatch, ошибка с кодом 13)!
Вся проблема состоит в том, что объект RecordSet есть и в библиотеке DAO, и в используемой Access по умолчанию библиотеке ADODb! Таким образом, наличие прямой ссылки на DAO, как в показанной выше процедуре, не гарантирует работоспособность кода — может возникать куча заморочек, связанных с тем, какая библиотека подключена в данный момент и у какой выше приоритет.
Поискав (и не найдя) ответ по всему Интернету я догадался, наконец, описать RecordSet как Variant, то есть, без указания типа:
Dim rs
Все остальное было уже делом техники — программно получить в переменные нужные свойства полей, раз Access не будет обрабатывать их из внешнего запроса, сделать запрос для проверки того, нет ли уже в базе такой связи, затем либо разрешить добавление записи, либо выдать сообщение об ошибке. Вот, наконец, код процедуры, стоившей мне нескольких проведенных в матерщине часов:
Private Sub КнопкаДобавить_Click() If ([Forms]![Связи]![СписокКатегории]Нам остается отключить для формы встроенную навигацию (свойства "Область выделения" и "Кнопки перехода" со вкладки "Макет" окна свойств формы), добавить с помощью мастера свою навигацию и получить работающее приложение.
Кстати, стандартные сообщения для кнопок навигации, генерируемые Access, можно заменить на свои более осмысленные, например, код
MsgBox Err.Descriptionна
MsgBox "Достигнуто начало базы данных", vbOKOnly, "Сообщение"Это пример можно скачать и доделать, ведь область применения отношений "многие-ко-многим" так же широка, как сами эти отношения.
Скачать редактор связи "многие-ко-многим": base_mn.zip, 32 Кб
Вопрос 17. Реализация связи таблиц в СУБД Access. — Студопедия.Нет
Требования к полям связи таблиц.
Что такое связи между таблицами
В реляционной базе данных связи позволяют избежать избыточности данных. Например, в ходе создания базы данных, содержащей сведения о книгах, может появиться таблица под названием «Книги», в которой будут храниться параметры каждой книги, такие как ее название, дата публикации и издатель. Кроме того, есть и дополнительные сведения об издателе, которые может потребоваться сохранить, такие как его телефонный номер, адрес и почтовый индекс. Если хранить их в таблице с книгами, то телефонный номер издателя будет повторяться для каждой опубликованной им книги.
Более правильным вариантом является вынесение сведений об издателях в отдельную таблицу «Издатели». При этом таблица «Книги» будет содержать ссылки на записи таблицы «Издатели».
Чтобы сохранить синхронизацию, следует обеспечить целостность данных между таблицами «Книги» и «Издатели». Связи с обеспечением целостности данных позволяют следить за тем, чтобы данные в одной таблице соответствовали данным в другой. Например, каждая книга в таблице «Книги» связана с определенным издателем в таблице «Издатели». Добавить в таблицу книгу для издателя, отсутствующего в базе данных, невозможно.
Виды связей между таблицами
Связь осуществляется путем сопоставления данных в ключевых столбцах; обычно это столбцы, имеющие в обеих таблицах одинаковые названия. В большинстве случаев сопоставляются первичный ключ одной таблицы, содержащий для каждой из строк уникальный идентификатор, и внешний ключ другой таблицы. Например, с каждым из изданий, находящихся в продаже, можно связать объемы его продаж путем создания столбца «ИД_издания» в таблице «Книги» (первичный ключ) и столбца «ИД_издания» в таблице «Продажи» (внешний ключ).
Существует три вида связей между таблицами. Вид создаваемой связи зависит от того, как заданы связанные столбцы.
Связи «один ко многим»
Связь «один ко многим» — наиболее распространенный вид связи. При такой связи каждой строке таблицы А может соответствовать множество строк таблицы Б, однако каждой строке таблицы Б может соответствовать только одна строка таблицы А. Например, между таблицами «Издатели» и «Книги» установлена связь «один ко многим»: каждый из издателей может опубликовать множество книг, однако каждая книга публикуется лишь одним издателем.
Связь «один ко многим» создается в том случае, когда только на один из связываемых столбцов наложено ограничение уникальности или он является первичным ключом.
В Microsoft Access сторона связи «один ко многим», которой соответствует первичный ключ, обозначается символом ключа. Сторона связи, которой соответствует внешний ключ, обозначается символом бесконечности.
Связи «многие ко многим»
При установлении связи «многие ко многим» каждой строке таблицы А может соответствовать множество строк таблицы Б и наоборот. Такая связь создается при помощи третьей таблицы, называемой соединительной, первичный ключ которой состоит из внешних ключей, связанных с таблицами А и Б. Например, между таблицами «Авторы» и «Книги» установлена связь вида «многие ко многим», задаваемая с помощью связей вида «один ко многим» между каждой из этих таблиц и таблицей «АвторыКниг». Первичный ключ таблицы «АвторыКниг» — это сочетание столбцов «ИД_автора» (первичного ключа таблицы авторов) и «ИД_книги» (первичного ключа таблицы заголовков).
Связи «один к одному»
При установлении связи «один к одному» каждой строке таблицы А может соответствовать только одна строка таблицы Б и наоборот. Связь «один к одному» создается в том случае, когда оба связанные столбца являются первичными ключами или на них наложены ограничения уникальности.
Этот вид связи используется редко, поскольку в такой ситуации связываемые данные обычно можно хранить в одной таблице. Использовать связь вида «один к одному» можно в указанных ниже случаях.
· Чтобы разделить таблицу, содержащую слишком много столбцов.
· Чтобы изолировать часть таблицы по соображениям безопасности.
· Для хранения данных кратковременного использования, удалить которые проще всего путем очистки таблицы.
· Для хранения данных, имеющих отношение только к подмножеству основной таблицы.
В Microsoft Access сторона связи «один к одному», которой соответствует первичный ключ, обозначается символом ключа. Сторона связи, которой соответствует внешний ключ, также обозначается символом ключа.
Создание связей между таблицами
При установлении связи между таблицами связанные поля не обязательно должны иметь одинаковые названия. При этом у них должен быть один и тот же тип данных, если только поле, являющееся первичным ключом, не относится к типу «Счетчик». Поле типа «Счетчик» можно связать с полем типа «Числовой» только в том случае, если для свойства FieldSize (размер поля) каждого из них задано одно и то же значение. Например, можно связать столбцы типов «Счетчик» и «Числовой», если для свойства FieldSize каждого из них установлено значение «Длинное целое». Даже если оба связываемых столбца относятся к типу «Числовой», значение свойства FieldSize для обоих полей должно быть одинаковым.
Создание связей «один ко многим» или «один к одному»
Чтобы создать связь вида «один ко многим» или «один к одному», воспользуйтесь приведенной ниже последовательностью действий:
1. Закройте все открытые таблицы. Создавать или изменять связи между открытыми таблицами нельзя.
2. В Access версий 2002 или 2003 выполните указанные ниже действия.
1. Нажмите клавишу F11, чтобы перейти в окно базы данных.
2. В меню Сервис выберите команду Связи.
В Access 2007 нажмите кнопку Связи в группе Показать или скрыть вкладки Инструменты для баз данных.
3. Если в базе данных отсутствуют связи, то автоматически появится диалоговое окно Добавление таблицы. Если окно Добавление таблицы не появилось, но при этом нужно добавить таблицы в список связываемых, выберите команду Добавить таблицу в меню Связи.
4. Дважды щелкните названия таблиц, которые необходимо связать, после чего закройте диалоговое окно Добавление таблицы. Чтобы связать таблицу с самой собой, добавьте ее два раза.
5. Перетащите связываемое поле из одной таблицы на связываемое поле в другой. Чтобы перетащить несколько полей, нажмите клавишу CTRL, щелкните каждое поле, а затем перетащите их.
В большинстве случаев понадобится перетащить поле первичного ключа (выделенное полужирным текстом) из одной таблицы на аналогичное поле (часто с тем же самым названием), называемое внешним ключом, другой таблицы.
6. Появится окно Изменение связей. Убедитесь, что в каждом из столбцов отображаются названия нужных полей. Если нужно, их можно изменить.
При необходимости задайте параметры связи. Если требуются сведения о конкретном элементе окна Изменение связей, нажмите кнопку со знаком вопроса, а затем щелкните соответствующий элемент. Эти параметры будут подробно описаны ниже.
7. Чтобы установить связь, нажмите кнопку Создать.
8. Повторите действия с 5 по 8 для каждой пары связываемых таблиц.
При закрытии диалогового окна Изменение связей Microsoft Access спросит, нужно ли сохранить макет. Вне зависимости от ответа на этот вопрос создаваемые связи сохраняются в базе данных.
Примечание. Создавать связи можно не только в таблицах, но и в запросах. При этом, однако, не обеспечивается целостность данных.
Создание связей «многие ко многим»
Чтобы создать связь вида «многие ко многим», выполните указанные ниже действия.
1. Создайте две таблицы, которые необходимо связать отношением «многие ко многим».
2. Создайте третью таблицу, называемую соединительной, и добавьте в нее поля с теми же определениями, что и поля первичных ключей в каждой из двух других таблиц. Поля первичных ключей соединительной таблицы служат внешними ключами. В соединительную таблицу, как и в любую другую, можно добавить и другие поля.
3. Задайте первичный ключ этой таблицы таким образом, чтобы он включал в себя поля первичных ключей обеих основных таблиц. Например, первичный ключ соединительной таблицы «АвторыКниг» будет состоять из полей «ИД_заказа» и «ИД_продукта».
Примечание. Чтобы создать первичный ключ, выполните указанные ниже действия.
1. Откройте таблицу в режиме конструктора.
2. Выберите одно или несколько полей, которые необходимо определить в качестве первичного ключа. Чтобы выбрать одно поле, щелкните знак выбора строки для нужного поля.
Чтобы выбрать несколько полей, удерживайте нажатой клавишу CTRL и щелкните знак выбора строки для каждого из полей.
3. В Access версий 2002 или 2003 нажмите кнопку Первичный ключ на панели инструментов.
В Access 2007 нажмите кнопку Первичный ключ в группе Сервис вкладки Структура.
Примечание. Чтобы порядок следования полей в первичном ключе, состоящем из нескольких полей, отличался от такового в таблице, нажмите кнопку Индексы на панели инструментов, в результате чего появится диалоговое окно Индексы, в котором можно изменить порядок следования полей индекса под названием КлючевоеПоле.
4. Установите связь вида «один ко многим» между каждой из двух главных таблиц и соединительной таблицей.
Целостность данных
Целостность данных — это система правил Microsoft Access, которая используется для проверки допустимости отношений между записями связанных таблиц и для того, чтобы не позволить случайно удалить или изменить связанные данные. Настроить проверку целостности данных можно при соблюдении всех указанных ниже условий.
· Связываемое поле из главной таблицы является первичным ключом или имеет однозначный индекс.
· Связываемые поля должны иметь одинаковый тип данных. Существует два исключения. Поле типа «Счетчик» может быть связано с числовым полем, если для свойства FieldSize у него установлено значение «Длинное целое»; кроме того, можно связать поле «Счетчик» с числовым полем, если у них обоих для свойства FieldSize задано значение «Код репликации».
· Обе таблицы принадлежат к одной и той же базе данных Microsoft Access. Если таблицы связаны, то они должны иметь формат Microsoft Access, а для настройки целостности данных необходимо открыть ту базу данных, в которой они хранятся. Обеспечить целостность данных для таблиц, находящихся в базах данных другого формата, невозможно.
При обеспечении целостности данных используются указанные ниже правила.
· Невозможно присвоить полю внешнего ключа связанной таблицы значение, отсутствующее в списке значений первичного ключа главной таблицы. При этом можно задать для внешнего ключа пустое значение (Null), указав, что записи не связаны. Например, нельзя создать заказ для несуществующего клиента, но можно создать заказ, не присвоенный ни одному из клиентов, задав для поля «Клиент» пустое значение.
· Невозможно удалить запись из главной таблицы, если в связанной таблице есть соответствующие ей записи. Например, нельзя удалить запись сотрудника из таблицы «Сотрудники», если ему назначены заказы в таблице «Заказы».
· Невозможно изменить значение первичного ключа в главной таблице, если с данной записью связаны другие записи. Например, нельзя изменить ИД сотрудника в таблице «Сотрудники», если ему назначены заказы в таблице «Заказы».
Видео: создание отношений «многие ко многим» — Access
Попробуй!
Что такое отношения «многие ко многим»?
Отношения «многие ко многим» — это наиболее часто используемые отношения таблиц. Они предоставляют важную информацию, например, с какими клиентами контактировали ваши продавцы и какие продукты находятся в заказах клиентов.
Отношение «многие ко многим» существует, когда один или несколько элементов в одной таблице могут иметь отношение к одному или нескольким элементам в другой таблице.Например:
Ваша таблица заказов содержит заказы, размещенные несколькими клиентами (которые перечислены в таблице клиентов), и клиент может разместить более одного заказа.
Таблица «Ваши товары» содержит отдельные товары, которые вы продаете, которые являются частью многих заказов в таблице «Заказ».
Один заказ может включать один экземпляр (или несколько экземпляров) определенного продукта и / или один экземпляр (или более одного экземпляра) нескольких продуктов.
Например, номер заказа клиента Элизабет Андерсен 1012 может содержать по одному из продуктов 12 и 15 и пять из продуктов 30.
Создание отношений «многие ко многим»
Вы создаете отношения «многие ко многим» иначе, чем отношения «один к одному» или «один ко многим». Для этих отношений вы просто соединяете соответствующие поля линией. Чтобы создать отношения «многие ко многим», вам необходимо создать новую таблицу для соединения двух других.Эта новая таблица называется промежуточной таблицей (или иногда , связывающей или таблицей соединений ).
В сценарии, описанном ранее, вы создаете таблицу сведений о заказе с записями, которые содержат для каждого элемента в любом заданном порядке идентификатор из таблицы заказов и идентификатор из таблицы продуктов. Вы создаете первичный ключ для этой таблицы, используя комбинированные ключи из двух таблиц.
В нашем сценарии номер заказа Элизабет Андерсен 1012 состоит из продуктов 12, 15 и 30.Это означает, что наши записи о заказе выглядят следующим образом:
Номер заказа | Номер продукта |
---|---|
1012 | 12 |
1012 | 15 |
1012 | 30 |
Элизабет заказала по одному из продуктов 12 и 15 и по пять из продуктов 30. Мы не можем добавить еще одну строку с 1012 и 30, потому что идентификатор заказа и идентификатор продукта вместе составляют наш первичный ключ, а первичные ключи должны быть уникальными. Вместо этого мы добавляем поле «Количество» в таблицу «Сведения о заказе».
Номер заказа | Номер продукта | Кол. Акций |
---|---|---|
1012 | 12 | 1 |
1012 | 15 | 1 |
1012 | 30 | 5 |
Создать промежуточную таблицу
Выберите Создать > Таблица .
Выбрать Сохранить .
Для Имя таблицы введите описательный заголовок. Чтобы указать его назначение, вы можете включить junction или промежуточный в имя таблицы.
Создать поля в промежуточной таблице
В качестве первого столбца таблицы Access автоматически добавляет поле идентификатора.Измените это поле, чтобы оно соответствовало идентификатору первой таблицы в вашем отношении «многие ко многим». Например, если первая таблица — это таблица «Заказы» с именем «Идентификатор заказа», а ее первичный ключ — это число, измените имя поля идентификатора в новой таблице на «Идентификатор заказа» и в качестве типа данных используйте Number .
В представлении таблицы выберите заголовок столбца ID , а затем введите новое имя для поля.
Выберите поле, которое вы только что переименовали.
На вкладке Поля в разделе Тип данных выберите тип данных, соответствующий полю в исходной таблице, например Number или Short Text .
Выберите Нажмите, чтобы добавить , а затем выберите тип данных, который соответствует первичному ключу во второй таблице. В заголовке столбца, который уже выбран, введите имя поля первичного ключа из второй таблицы, например ID продукта.
Если вам нужно отслеживать любую другую информацию об этих записях, например количество товара, создайте дополнительные поля.
Объединить поля первичного идентификатора
Теперь, когда у вас есть поля, содержащие идентификаторы из двух таблиц, которые вы хотите соединить, создайте первичный ключ на основе этих идентификаторов в промежуточной таблице.
В Design View откройте промежуточную таблицу.
Выберите обе строки, содержащие идентификаторы. (Если вы следовали предыдущей процедуре, это первые две строки.)
Выберите Дизайн > Первичный ключ .
Значки клавиш появляются рядом с обоими полями идентификатора.
Соедините три таблицы, чтобы создать отношение «многие ко многим»
Чтобы завершить связь «многие ко многим», создайте связь «один ко многим» между полем первичного ключа в каждой таблице и совпадающим полем в промежуточной таблице. Дополнительные сведения о том, как это сделать, см. В разделе Начало работы со связями таблиц.
Когда вы закончите, отношения должны выглядеть примерно так:
Видео: создание отношений «многие ко многим» — Access
Попробуй!
Что такое отношения «многие ко многим»?
Отношения «многие ко многим» — это наиболее часто используемые отношения таблиц. Они предоставляют важную информацию, например, с какими клиентами контактировали ваши продавцы и какие продукты находятся в заказах клиентов.
Отношение «многие ко многим» существует, когда один или несколько элементов в одной таблице могут иметь отношение к одному или нескольким элементам в другой таблице. Например:
Ваша таблица заказов содержит заказы, размещенные несколькими клиентами (которые перечислены в таблице клиентов), и клиент может разместить более одного заказа.
Таблица «Ваши товары» содержит отдельные товары, которые вы продаете, которые являются частью многих заказов в таблице «Заказ».
Один заказ может включать один экземпляр (или несколько экземпляров) определенного продукта и / или один экземпляр (или более одного экземпляра) нескольких продуктов.
Например, номер заказа клиента Элизабет Андерсен 1012 может содержать по одному из продуктов 12 и 15 и пять из продуктов 30.
Создание отношений «многие ко многим»
Вы создаете отношения «многие ко многим» иначе, чем отношения «один к одному» или «один ко многим».Для этих отношений вы просто соединяете соответствующие поля линией. Чтобы создать отношения «многие ко многим», вам необходимо создать новую таблицу для соединения двух других. Эта новая таблица называется промежуточной таблицей (или иногда , связывающей или таблицей соединений ).
В сценарии, описанном ранее, вы создаете таблицу сведений о заказе с записями, которые содержат для каждого элемента в любом заданном порядке идентификатор из таблицы заказов и идентификатор из таблицы продуктов.Вы создаете первичный ключ для этой таблицы, используя комбинированные ключи из двух таблиц.
В нашем сценарии номер заказа Элизабет Андерсен 1012 состоит из продуктов 12, 15 и 30. Это означает, что наши данные о заказе выглядят следующим образом:
Номер заказа | Номер продукта |
---|---|
1012 | 12 |
1012 | 15 |
1012 | 30 |
Элизабет заказала по одному из продуктов 12 и 15 и по пять из продуктов 30. Мы не можем добавить еще одну строку с 1012 и 30, потому что идентификатор заказа и идентификатор продукта вместе составляют наш первичный ключ, а первичные ключи должны быть уникальными. Вместо этого мы добавляем поле «Количество» в таблицу «Сведения о заказе».
Номер заказа | Номер продукта | Кол. Акций |
---|---|---|
1012 | 12 | 1 |
1012 | 15 | 1 |
1012 | 30 | 5 |
Создать промежуточную таблицу
Выберите Создать > Таблица .
Выбрать Сохранить .
Для Имя таблицы введите описательный заголовок. Чтобы указать его назначение, вы можете включить junction или промежуточный в имя таблицы.
Создать поля в промежуточной таблице
В качестве первого столбца таблицы Access автоматически добавляет поле идентификатора.Измените это поле, чтобы оно соответствовало идентификатору первой таблицы в вашем отношении «многие ко многим». Например, если первая таблица — это таблица «Заказы» с именем «Идентификатор заказа», а ее первичный ключ — это число, измените имя поля идентификатора в новой таблице на «Идентификатор заказа» и в качестве типа данных используйте Number .
В представлении таблицы выберите заголовок столбца ID , а затем введите новое имя для поля.
Выберите поле, которое вы только что переименовали.
На вкладке Поля в разделе Тип данных выберите тип данных, соответствующий полю в исходной таблице, например Number или Short Text .
Выберите Нажмите, чтобы добавить , а затем выберите тип данных, который соответствует первичному ключу во второй таблице. В заголовке столбца, который уже выбран, введите имя поля первичного ключа из второй таблицы, например ID продукта.
Если вам нужно отслеживать любую другую информацию об этих записях, например количество товара, создайте дополнительные поля.
Объединить поля первичного идентификатора
Теперь, когда у вас есть поля, содержащие идентификаторы из двух таблиц, которые вы хотите соединить, создайте первичный ключ на основе этих идентификаторов в промежуточной таблице.
В Design View откройте промежуточную таблицу.
Выберите обе строки, содержащие идентификаторы. (Если вы следовали предыдущей процедуре, это первые две строки.)
Выберите Дизайн > Первичный ключ .
Значки клавиш появляются рядом с обоими полями идентификатора.
Соедините три таблицы, чтобы создать отношение «многие ко многим»
Чтобы завершить связь «многие ко многим», создайте связь «один ко многим» между полем первичного ключа в каждой таблице и совпадающим полем в промежуточной таблице. Дополнительные сведения о том, как это сделать, см. В разделе Начало работы со связями таблиц.
Когда вы закончите, отношения должны выглядеть примерно так:
Учебное пособие поSQL — Связь «многие-ко-многим» в MySQL »grokonez
В этом учебном пособии мы расскажем, как использовать запросы SQL для создания таблиц связи« многие-ко-многим »с базой данных MySQL.
Цель
Связь «многие ко многим»:
Создайте 3 таблицы:
— таблица пользователя
-> атрибуты: (идентификатор, электронная почта, имя пользователя, пароль)
— таблица ролей
-> атрибуты: (id, description, name)
— user_roles
table -> attributes: (user_id, role_id)
Create Tables
Синтаксис создания таблицы SQL:
CREATE TABLE table_name ( column1 datatype, Тип данных column2, Тип данных column3, . … ); |
— Создать User
table ->
CREATE TABLE user ( id bigint (20) NOT NULL, email varchar (40) NOT NULL, username varchar (15) NOT NULL, пароль varchar (100) NOT NULL, PRIMARY KEY (id) ); |
— Создать роль Таблица
->
CREATE TABLE роль ( id bigint (20) NOT NULL, name varchar (60) NOT NULL, PRIMARY KEY ( id) ); |
— Создать User_Roles
table ->
CREATE TABLE user_roles ( user_id bigint (20) NOT NULL, role_id bigint (20) NOT NULL FOR, EYuser_id) ССЫЛКИ user (id) ON DELETE RESTRICT ON UPDATE CASCADE, FOREIGN KEY (role_id) REFERENCES role (id) ON DELETE RESTRICT ON UPDATE CASCADE, PRIMARY KEY (user_id, role14id); |
Вставить данные в таблицы
Вставить в
синтаксис:
- Задает имена столбцов и значения для вставки
INSERT INTO имя_таблицы (столбец1, столбец2, столбец3,. ..)
ЗНАЧЕНИЯ (значение1, значение2, значение3, …);
- Если вы добавляете значения для всех столбцов таблицы, вам не нужно указывать имена столбцов в запросе SQL.
INSERT INTO имя_таблицы
VALUES (значение1, значение2, значение3, …);
— Вставить в user
table:
INSERT INTO user VALUES (1, ‘[email protected]’, ‘Jack’, ‘jack123’); ВСТАВИТЬ В ЗНАЧЕНИЯ пользователя (2, ‘adam @ grokonez.com ‘,’ Адам ‘,’ adam123 ‘); |
— Вставить в роль
таблица:
INSERT INTO роль ЗНАЧЕНИЯ (3, ‘ADMIN’); INSERT INTO роль ЗНАЧЕНИЯ (4, ‘ПОЛЬЗОВАТЕЛЬ’); |
— Вставить в user_roles
table:
INSERT INTO user_roles VALUES (1, 3); INSERT INTO user_roles VALUES (1, 4); INSERT INTO user_roles VALUES (2, 4); |
Запрос на присоединение
ВЫБРАТЬ пользователя. |