
- •81. Типы данных ms Access
- •Оздание базы данных в ms Access
- •Формирование запросов в ms Access
- •2.4.4.1. Создание запроса на выборку с помощью Мастера
- •2.4.4.2. Создание запроса на выборку с помощью Конструктора
- •Рганизация данных в ms Access (понятие отношения, типы ключевых полей, виды связей между таблицами, целостность данных)
Рганизация данных в ms Access (понятие отношения, типы ключевых полей, виды связей между таблицами, целостность данных)
Определение связей между таблицами в базе данных Access (MDB)
javascript:AlterAllDivs('block');П оказать все
javascript:AlterAllDivs('none');С крыть все
После создания в базе данных Microsoft Access (База данных Microsoft Access. Совокупность данных и объектов (например, таблиц, запросов или форм), относящихся к определенной задаче.) отдельных таблиц по каждой теме необходимо выбрать способ, которым Microsoft Access будет вновь объединять сведения таблиц. Первым делом следует определить связи (Отношение. Связь, установленная между двумя общими полями (столбцами) двух таблиц. Существуют связи с отношением «один-к-одному», «один-ко-многим» и «многие-ко-многим».) между таблицами. После этого можно создать запросы, формы и отчеты для одновременного отображения сведений из нескольких таблиц. Например, следующая форма включает сведения из четырех таблиц:
Т аблица «Клиенты»
Т аблица «Заказы»
Т аблица «Товары»
Т аблица «Заказано»
Имя клиента в поле «Плательщик» получено из таблицы «Клиенты», код заказа и дата заказа — из таблица «Заказы», наименование товара — из таблицы «Товары», а цена и количество — из таблицы «Заказано». Для передачи сведений в форму эти таблицы связаны друг с другом несколькими способами.
Ниже представлено подробное описание доступных типов связи между таблицами, их совместного взаимодействия с формой и сведения об использовании связей между таблицами, необходимые для отображения требуемых данных.
javascript:ToggleDiv('divExpCollAsst_218344876')К ак работают связи между таблицами
В приведенном примере поля в четырех таблицах должны быть скоординированы таким образом, чтобы отображать сведения об одном и том же заказе. Эта координация осуществляется путем установления связей между таблицами. Связь между таблицами устанавливает отношения между совпадающими значениями в ключевых полях, обычно между полями, имеющими одинаковые имена в обеих таблицах. В большинстве случаев с ключевым полем (Первичный ключ. Одно или несколько полей (столбцов), комбинация значений которых однозначно определяет каждую запись в таблице. Первичный ключ не допускает значений Null и всегда должен иметь уникальный индекс. Первичный ключ используется для связывания таблицы с внешними ключами в других таблицах.) одной таблицы, являющимся уникальным идентификатором каждой записи, связывается внешний ключ (Внешний ключ. Одно или несколько полей (столбцов) в таблице, содержащих ссылку на поле или поля первичного ключа в другой таблице. Внешний ключ определяет способ объединения таблиц.) другой таблицы. Например, для связывания сотрудников с заказами, за которые они отвечают, следует создать отношение между полями «КодСотрудника».
П оле «Код сотрудника» отображается в двух таблицах — как первичный ключ....
. .. и как внешний ключ.
javascript:ToggleDiv('divExpCollAsst_561683606')О тношение «один-ко-многим»
Отношение «один-ко-многим» является наиболее часто используемым типом связи между таблицами. В отношении «один-ко-многим» каждой записи в таблице A могут соответствовать несколько записей в таблице B, но запись в таблице B не может иметь более одной соответствующей ей записи в таблице A.
О дин поставщик...
. .. может поставлять несколько товаров, ...
. .. но у каждого товара может быть только один поставщик.
javascript:ToggleDiv('divExpCollAsst_575733385')О тношение «многие-ко-многим»
При отношении «многие-ко-многим» одной записи в таблице A могут соответствовать несколько записей в таблице B, а одной записи в таблице B несколько записей в таблице A. Этот тип связи возможен только с помощью третьей (связующей) таблицы, первичный ключ (Первичный ключ. Одно или несколько полей (столбцов), комбинация значений которых однозначно определяет каждую запись в таблице. Первичный ключ не допускает значений Null и всегда должен иметь уникальный индекс. Первичный ключ используется для связывания таблицы с внешними ключами в других таблицах.) которой состоит из двух полей, которые являются внешними ключами (Внешний ключ. Одно или несколько полей (столбцов) в таблице, содержащих ссылку на поле или поля первичного ключа в другой таблице. Внешний ключ определяет способ объединения таблиц.) таблиц A и B. Отношение «многие-ко-многим» по сути дела представляет собой два отношения «один-ко-многим» с третьей таблицей. Например, отношение «многие-ко-многим» между таблицами «Заказы» и «Товары» определяется путем создания двух отношений «один-ко-многим» с таблицей «Заказано». В одном заказе может быть много товаров, а каждый товар может появляться в нескольких заказах.
П ервичный ключ из таблицы «Заказы»
П ервичный ключ из таблицы «Товары»
О дин заказ может содержать несколько товаров, ...
. .. а каждый товар может содержаться в нескольких заказах.
javascript:ToggleDiv('divExpCollAsst_72620656')О тношение «один-к-одному»
При отношении «один-к-одному» каждая запись в таблице A может иметь не более одной связанной записи в таблице B и наоборот. Отношения этого типа используются не очень часто, поскольку большая часть сведений, связанных таким образом, может быть помещена в одну таблицу. Отношение «один-к-одному» может использоваться для разделения таблиц, содержащих много полей, для отделения части таблицы по соображениям безопасности, а также для сохранения сведений, относящихся к подмножеству записей в главной таблице. Например, можно создать таблицу для отслеживания участия сотрудников в благотворительных спортивных мероприятиях. Каждому игроку в таблице «Футболисты» должна соответствовать одна запись в таблице «Сотрудники».
К аждому футболисту соответствует одна запись в таблице «Сотрудники».
Д анный набор значений представляет подмножество для поля «КодСотрудника» и таблицы «Сотрудники».
javascript:ToggleDiv('divExpCollAsst_300034707')О пределение связей между таблицами
Тип отношения в создаваемой Microsoft Access связи зависит от способа определения связываемых полей.
Отношение «один-ко-многим» создается в том случае, когда только одно из полей является полем первичного ключа (Первичный ключ. Одно или несколько полей (столбцов), комбинация значений которых однозначно определяет каждую запись в таблице. Первичный ключ не допускает значений Null и всегда должен иметь уникальный индекс. Первичный ключ используется для связывания таблицы с внешними ключами в других таблицах.) или уникального индекса (Уникальный индекс. Индекс, определенный для поля с заданным для свойства Индексированное поле (Indexed) значением Да (Совпадения не допускаются). При этом ввод в индексированное поле повторяющихся значений становится невозможным. Для ключевых полей уникальный индекс создается автоматически.).
Отношение «один-к-одному» создается в том случае, когда оба связываемых поля являются ключевыми или имеют уникальные индексы.
Отношение «многие-ко-многим» фактически является двумя отношениями «один-ко-многим» с третьей таблицей, первичный ключ которой состоит из полей внешнего ключа (Внешний ключ. Одно или несколько полей (столбцов) в таблице, содержащих ссылку на поле или поля первичного ключа в другой таблице. Внешний ключ определяет способ объединения таблиц.) двух других таблиц.
Имеется возможность связать таблицу саму с собой. Это полезно, когда нужно создать поле подстановок со значениями из этой же таблицы. Например, в таблице «Сотрудники» можно определить связь между полями «КодСотрудника» и «Подчиняется» и отображать в поле «Подчиняется» данные о сотруднике из связанного поля «КодСотрудника».
Примечание. Если перетащить поле, не являющееся ключевым и не имеющее уникального индекса, на другое поле, которое также не является ключевым и не имеет уникального индекса, создается неопределенное отношение. В запросах, содержащих таблицы с неопределенным отношением, Microsoft Access по умолчанию отображает линию объединения (Объединение. Связь между полем одной таблицы или запроса и полем другой таблицы или запроса, имеющим тот же тип данных. Объединение определяет взаимосвязь данных в приложении. Записи с не соответствующими значениями в связанных полях могут быть как включены, так и исключены в зависимости от типа объединения.) между таблицами, но условия целостности данных (Целостность данных. Правила, обеспечивающие поддержание установленных межтабличных отношений при добавлении, обновлении или удалении записей.) при этом не накладываются и нет гарантии уникальности записей в любой из таблиц.
javascript:ToggleDiv('divExpCollAsst_556583558')Ц елостность данных
Целостность данных означает систему правил, используемых в Microsoft Access для поддержания связей между записями в связанных таблицах, а также обеспечивающих защиту от случайного удаления или изменения связанных данных. Установить целостность данных можно, если выполнены следующие условия.
Связанное поле главной таблицы (Главная таблица. Таблица на стороне «один» при связи двух таблиц с отношением «один-ко-многим». В главной таблице должен существовать первичный ключ, а все записи в ней должны быть уникальными.) является первичным ключом (Первичный ключ. Одно или несколько полей (столбцов), комбинация значений которых однозначно определяет каждую запись в таблице. Первичный ключ не допускает значений Null и всегда должен иметь уникальный индекс. Первичный ключ используется для связывания таблицы с внешними ключами в других таблицах.) или имеет уникальный индекс (Уникальный индекс. Индекс, определенный для поля с заданным для свойства Индексированное поле (Indexed) значением Да (Совпадения не допускаются). При этом ввод в индексированное поле повторяющихся значений становится невозможным. Для ключевых полей уникальный индекс создается автоматически.).
Связанные поля имеют один тип данных (Тип данных. Характеристика поля, определяющая тип данных, который может содержать это поле. Существуют следующие типы данных: Boolean, Integer, Long, Currency, Single, Double, Date, String и Variant (по умолчанию).). Здесь существуют два исключения: поле счетчика (Тип данных «Счетчик». Тип данных поля в базе данных Microsoft Access, в котором для каждой добавляемой в таблицу записи в поле автоматически заносится уникальное числовое значение. Поле счетчика может содержать значения трех типов: последовательные, случайные и коды репликации.) может быть связано с числовым полем, свойство которого Размер поля (FieldSize) имеет значение Длинное целое, а также поле счетчика, свойство которого Размер поля (FieldSize) имеет значение Код репликации, можно связать с числовым полем, у которого свойство Размер поля (FieldSize) имеет значение Код репликации.
Обе таблицы принадлежат к одной базе данных Microsoft Access. Если таблицы являются связанными (Связанная таблица. Таблица, которая сохраняется в файле, не принадлежащем открытой базе данных, однако является доступной из Microsoft Access. Пользователь имеет возможность добавлять, удалять и изменять записи в связанной таблице, но не может изменять ее структуру.), то они должны быть таблицами формата Microsoft Access. Для установки целостности данных база данных, в которой находятся таблицы, должна быть открыта. Для связанных таблиц из баз данных других форматов установить целостность данных невозможно.
При использовании условий целостности данных действуют следующие правила.
Невозможно ввести в поле внешнего ключа (Внешний ключ. Одно или несколько полей (столбцов) в таблице, содержащих ссылку на поле или поля первичного ключа в другой таблице. Внешний ключ определяет способ объединения таблиц.) связанной таблицы значение, не содержащееся в ключевом поле главной таблицы. Однако в поле внешнего ключа возможен ввод значений Null (Null. Значение, которое можно ввести в поле или использовать в выражениях и запросах для указания отсутствующих или неизвестных данных. В Visual Basic ключевое слово Null указывает значение Null. Некоторые поля, такие как поля первичного ключа, не могут содержать значение Null.), показывающих, что записи не являются связанными. Например, нельзя сохранить запись, регистрирующую заказ, сделанный несуществующим клиентом, но можно создать запись для заказа, который пока не отнесен ни к одному из клиентов, если ввести значение Null в поле «КодКлиента».
Не допускается удаление записи из главной таблицы, если существуют связанные с ней записи в подчиненной таблице. Например, невозможно удалить запись из таблицы «Сотрудники», если в таблице «Заказы» имеются заказы, относящиеся к данному сотруднику.
Невозможно изменить значение первичного ключа в главной таблице, если существуют записи, связанные с данной записью. Например, невозможно изменить код сотрудника в таблице «Сотрудники», если в таблице «Заказы» имеются заказы, относящиеся к этому сотруднику.
javascript:ToggleDiv('divExpCollAsst_288216888')К аскадное обновление и удаление
Для отношений, в которых проверяется целостность данных (Целостность данных. Правила, обеспечивающие поддержание установленных межтабличных отношений при добавлении, обновлении или удалении записей.), пользователь имеет возможность указать, следует ли автоматически выполнять для связанных записей операции каскадного обновления (Каскадное обновление. Средство поддержания целостности данных в связанных таблицах, обеспечивающее обновление всех связанных записей в подчиненной таблице или таблицах при изменении записи в главной таблице.) и каскадного удаления (Каскадное удаление. Средство поддержания целостности данных в связанных таблицах, обеспечивающее удаление всех связанных записей в подчиненной таблице или таблицах при удалении записи в главной таблице.). Если включить данные параметры, станут возможными операции удаления и обновления, которые в противном случае запрещены условиями целостности данных. Чтобы обеспечить целостность данных при удалении записей или изменении значения первичного ключа (Первичный ключ. Одно или несколько полей (столбцов), комбинация значений которых однозначно определяет каждую запись в таблице. Первичный ключ не допускает значений Null и всегда должен иметь уникальный индекс. Первичный ключ используется для связывания таблицы с внешними ключами в других таблицах.) в главной таблице (Главная таблица. Таблица на стороне «один» при связи двух таблиц с отношением «один-ко-многим». В главной таблице должен существовать первичный ключ, а все записи в ней должны быть уникальными.), автоматически вносятся необходимые изменения в связанные таблицы.
Если при определении отношения установить флажок Каскадное обновление связанных полей, любое изменение значения первичного ключа главной таблицы приведет к автоматическому обновлению соответствующих значений во всех связанных записях. Например, при изменении кода клиента в таблице «Клиенты» будет автоматически обновлено поле «КодКлиента» во всех записях таблицы «Заказы» для заказов каждого клиента, поэтому целостность данных не будет нарушена. Microsoft Access выполнит каскадное обновление без ввода предупреждающих сообщений.
Примечание. Если в главной таблице ключевым полем является поле счетчика (Тип данных «Счетчик». Тип данных поля в базе данных Microsoft Access, в котором для каждой добавляемой в таблицу записи в поле автоматически заносится уникальное числовое значение. Поле счетчика может содержать значения трех типов: последовательные, случайные и коды репликации.) , то установка флажка Каскадное обновление связанных полей не приведет к каким-либо результатам, так как изменить значение поля счетчика невозможно.
Если при определении отношения установить флажок Каскадное удаление связанных записей, любое удаление записи в главной таблице приведет к автоматическому удалению связанных записей в подчиненной таблице. Например, при удалении из таблицы «Клиенты» записи конкретного клиента будут автоматически удалены все связанные записи в таблице «Заказы» (а также записи в таблице «Заказано», связанные с записями в таблице «Заказы»). Если записи удаляются из формы или таблицы при установленном флажке Каскадное удаление связанных записей, Microsoft Access выводит предупреждение о возможности удаления связанных записей. Если же записи удаляются с помощью запроса на удаление (Запрос на удаление. Запрос (инструкция SQL), в котором из одной или нескольких таблиц удаляются записи, удовлетворяющие указанному условию отбора.), то Microsoft Access удаляет записи автоматически без вывода предупреждения.