Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_N4_сложные_запросы.doc
Скачиваний:
6
Добавлен:
28.07.2019
Размер:
286.72 Кб
Скачать

Требования к запросам на обновление

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

  • Свойство запроса "Уникальные значения" имеет значение Да.

  • В запросе используются рекурсивные соединения.

  • В запросе применяются статистические функции SQL, например Sum (). Следует отметить, что статистические функции SQL используются во всех перекрестных запросах.

  • Если две таблицы связаны отношением "один-ко-многим", то в таблице со стороны "один" не определено ни одно поле первичногоключа, повторения значений которого не допускается.

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

  • В таблице, которая является единственной в запросе

  • В обеих таблицах, связанных отношением "один-к-одному"

  • В таблице со стороны "многие", связанной с другой таблицей отношением "один-ко-многим"

  • В таблице со стороны "один", связанной с другой таблицей отношением "один-ко-многим", если ни одно поле таблицы со стороны "многие" не участвует в запросе

Обновление таблицы со стороны "Один", связанной с другой таблицей отношением "один-ко-многим", требует особого рассмотрения. Для изменения данных в такой таблице:

  1. Добавьте в запрос поле или поля первичного ключа таблицы со стороны "один", а также обновляемые поля.

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

  3. Добавьте условие отбора записей для обновления полей, заданных на шаге 2.

  4. Сбросьте флажок "Вывод на экран" поля или полей таблицы со стороны "многие", так чтобы они не выводились в динамическом наборе записей запроса.

Выполнив эти действия, можно редактировать данные не ключевых полей таблицы со стороны "один". Однако нельзя изменять значения ключевых полей, которые связывают записи таблицы со стороны "один" с записями таблицы со стороны "многие". Это приведет к нарушению целостности данных. Кроме того, нельзя обновить значение вычисляемого поля запроса — таблицы не могут включать вычисляемые величины.

Если добавить поля подстановки в таблицы и в точности соблюсти условия, выполнение которых необходимо для обновления данных в динамическом наборе запроса, то можно избежать написания запросов, в которых участвуют таблицы, связанные отношением "один-ко-многим". Например, в таблице "Заказы" имеется три поля подстановки: "КодКлиента", "КодСотрудника" и "Доставка". Вместо запросов на обновление лучше использовать для редактирования данных поля подстановки. Однако большинство разработчиков баз данных полагают, что такое упрощение значительно увеличивает вероятность возникновения ошибок при вводе данных.