Связывание таблиц. Целостность данных.
Access позволяет строить реляционные базы данных, отдельные таблицы которые могут быть связаны между собой отношениями.
Механизм описания логических связей между таблицами в Access реализован в виде объекта, называемого Схемой данных. Перейти к созданию связей можно командой Сервис/ Схема данных. Чтобы добавить таблицы или запросы в окно Схема данных, необходимо выбрать опцию Добавить таблицу в меню Связи или нажать кнопку Отобразить таблицу, расположенную в строке пиктограмм. Если данные, сохраненные в различных таблицах, пребывают в смысловой взаимосвязи, то эту связь следует явным образом оформить, указав используемые при этом поля. Организация связи между таблицами выполняется посредством указания связываемых полей данных, присутствующих в обеих таблицах. С помощью мыши поле, которое следует использовать для установки связи, из списка одной таблицы переносится к соответствующему полю другой таблицы. После переноса полей на экране появится диалоговое окно Изменение связей, в котором будет предложена связь между таблицами.
Рис.. Объявление связи между таблицами.
Для данных таблиц будет установлено отношение типа Один-ко-многим, что отразится в области Тип отношения. Это означает, что одной записи главной или первичной таблицы Предлагаемые модели могут быть поставлены в соответствие несколько записей связанной (подчиненной) таблицы Клиенты. Данное отношение является наиболее распространенным в реляционных базах данных. Далее посредством установления типа отношений между таблицами необходимо определить дополнительные параметры связи (Обеспечение целостности данных, Каскадное обновление связанных полей, Каскадное удаление связанных полей).
После нажатия кнопки Создать в окне Схема данных будет графически показана созданная связь между таблицами Предлагаемые модели и Клиенты.
Примечание. Поля, через которые осуществляется связь, в первичной и связанной таблицах могут иметь разные имена. Необходимым условием установления связи является совпадение типа данных и значений характеристик (в особенности размера).
Установление опции проверки ссылочной целостности Обеспечение целостности данных обеспечивает проверку ссылочной целостности связи между обеими таблицами. Эта проверка позволяет избежать ряд ошибок, допускаемых при удалении записей из первичной таблицы и вводе информации в связанную таблицу. Благодаря проверке ссылочной целостности можно избежать следующих ошибочных ситуаций:
· Добавления в связанную таблицу записей, для которых отсутствует соответствующая запись в первичной таблице;
· Осуществления изменений в главной таблице, которые приведут к появлению «осиротевших» записей в связанной таблице;
· Удаления записей в главной таблице, на которые ссылаются записи из связанной таблице.
Примечание. Между двумя таблицами может быть объявлено только одно отношение. Если дается определение другому отношению между теми же таблицами, то оно заменит уже имеющееся отношение.
Что означает целостность данных?
Под целостностью данных понимается выполнение логических ограничений на данные. Эти ограничения вытекают из свойств предметной области и свойств модели данных. Одни ограничения определяются неявно и зависят от выбранной модели данных. Другие ограничения указываются пользователем явно с использованием средств Access. К таким ограничениям относятся ограничения на область допустимых значений атрибутов таблиц, которые задаются при определении типов данных и характеристик полей таблицы. Второй тип ограничений – это ограничения на связи между таблицами. Рассмотрим особенности задания таких ограничений.
Целостность данных означает систему правил, используемых в Access для поддержания связей между записями в связанных таблицах, а также обеспечивает защиту от случайного удаления или изменения связанных данных. Установить целостность данных можно, если выполнены следующие условия.
· Связанное поле главной таблицы является ключевым полем или имеет уникальный индекс.
· Связанные поля имеют один тип данных. Здесь существует два исключения. Поле счетчика может быть связанно с числовым полем формата Длинное целое. А также поле счетчика можно связать с числовым полем, если в обоих полях для свойства Размер поля задано значение Код репликации.
· Обе таблицы принадлежат одной базе данных Access. Если таблицы являются связанными, то они должны быть таблицами Access. Для установки целостности данных база данных, в которой находится таблица, должна быть открыта. Для связанных таблиц из баз данных других форматов установить целостность данных невозможно.
Установив целостность данных, необходимо следовать следующим правилам.
· Невозможно ввести в поле внешнего ключа связанной таблицы значение, не содержащееся в ключевом поле главной таблицы. Однако в поле внешнего ключа возможен ввод пустых значений, показывающих, что записи не являются связанными. Например, нельзя сохранить запись, регистрирующую заказ на несуществующую модель машины TОYОТА, но можно создать запись для заказа, в котором клиент пока не определился, какую машину он предпочитает, если ввести пустое значение в поле Код модели.
· Не допускается удаление записи из главной таблицы, если существуют связанные с ней записи в подчиненной таблице. Например, невозможно удалить запись из таблицы Модели, если в таблицы Клиенты имеются заказы, относящиеся к данной модели.
· Невозможно удалить значение ключевого поля в главной таблице, ели существуют записи, связанные с данным значением. Например, невозможно изменить код модели в таблице Модели, если в таблице Клиенты имеются заказы, относящиеся к этой модели.
Чтобы наложить эти правила на конкретную связь, при ее создании следует установить флажок Обеспечение целостности данных. Если данный флажок установлен, то любая попытка выполнить действие, нарушающее одно из перечисленных выше правил, приведет к выводу на экран предупреждения, а само действие выполнено не будет. Чтобы преодолеть ограничения на удаление или изменение связанных записей, сохраняя при этом целостность данных, следует установить флажки Каскадное обновление связанных полей и Каскадное удаление связанных полей. Если установлен флажок Каскадное обновление связанных полей, то при изменении ключевого поля главной таблицы автоматически изменяются соответствующие значения связанных записей. Если установлен флажок Каскадное удаление связанных полей, то при удалении записи в главной таблице удаляются и все связанные записи в подчиненной таблице.