Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных / БД2012 / Часть 4.doc
Скачиваний:
30
Добавлен:
28.03.2015
Размер:
856.06 Кб
Скачать

Ограничения в многотабличных запросах

Запрос является виртуальной таблицей, но специфической, поскольку на ее редактирование накладываются некоторые ограничения.

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

Существуют следующие правила редактирования для запросов:

Тип запроса или поля

Возможность редактирования

Одна таблица

да

Отношение один к одному

да

Отношение один ко многим

как правило

Перекрестный запрос

нет

Обобщающие запросы Sum и т.п.

нет

Рассчитываемые поля

нет

Поля, заблокированные другим пользователем

нет

Редактирование полей справочников

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

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

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

  • Для обеспечения добавления записей в обе таблицы со связью «один ко многим» в запрос следует включить поле связи со стороны многие.

  • Если необходимо запретить обновление любого поля, задайте для свойства формы «Разрешить изменения»- НЕТ.

  • Если нужно запретить изменение для некоторых полей в форме нужно задать ДА для свойства «Блокировка» элемента управления этих полей.

  • Изменив в запросе записи, находящиеся в таблице со стороны «один» нельзя вносить изменения в таблице со стороны «многие» до тех пор, пока внесенные изменения не будут сохранены.

Создание связей для запросов

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

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

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

Таким образом, для просмотра данных с помощью запроса создается объединение таблиц путем установления связей по общим полям (joining).

Существует несколько типов объединений:

  1. Внутреннее объединение (равное). Это объединение создается по умолчанию и в результате - все записи с равными полями.

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

Смысл рассмотрения записи без пары существует. Например, выделить клиентов, не сделавших заказы. При этом возникает необходимость видеть всех клиентов. Чтобы всегда видеть всех клиентов нужно изменить свойство объединения. Для изменения нужно дважды щелкнуть на линии связи и появится окно «Параметры объединения».

Там 3 типа:

  1. объединение только тех записей, в которых связанные поля обеих таблиц совпадают- ВНУТРЕННЕЕ.

  2. Объединение всех записей из «Имя таблицы («один»)» и только тех записей из «Имя таблицы «многие»», в которых связанные поля совпадают.

  3. Объединение всех записей из «Имя таблицы («многие»)» и только тех записей из «Имя таблицы «один»», в которых связанные поля совпадают.

Пункты 2 и 3 – называются внешними объединениями - соответственно левым и правым.

Пустые значения различаются как NULL- неизвестно и “”- пустая строка- говорит о том, что «отсутствует».

Соседние файлы в папке БД2012