Ограничение стандарта SQL1 на обновление представлений
Несмотря
на то, что для пользователей представления выглядят как реальные отношения,
существует ряд ограничений на операции модификации данных, связанные с представлениями.
СУБД может
обновлять данные через представления только в том случае, если она может однозначно
сопоставить каждой строке представления строку из реальной таблицы базы данных,
а для каждого обновляемого столбца представления однозначно определить исходный
столбец исходной таблицы базы данных. Далеко не для всех запросов это возможно
сделать. Действительно, запросы с группировкой, сложные запросы с подзапросами
возвращают результат, который СУБД не сможет однозначно интерпретировать в терминах
реальных таблиц БД.
Согласно
стандарту, представление можно обновлять только в том случае, когда его запрос
соответствует следующим требованиям:
В запросе должен отсутствовать
предикат DISTINCT, то есть повторяющиеся строки не должны исключаться из таблицы
результатов запроса.
В предложении FROM
должна быть задана только одна таблица, которую можно обновлять, то есть у
представления должна быть только одна исходная таблица (это горизонтальное
или вертикальное представление), а пользователь должен иметь соответствующие
права доступа к ней. Если таблица сама является представлением, то она тоже
должна удовлетворять данным условиям.
Каждое имя в списке
возвращаемых столбцов должно быть ссылкой на простой столбец: в списке не
должны содержаться выражения, вычисляемые столбцы или агрегатные функции.
В предложении WHERE
не должен стоять вложенный запрос; в нем могут присутствовать только простые
условия поиска.
В запросе не должно
присутствовать выражение группировки GROUP BY или HAVING.
Однако в ряде коммерческих
СУБД эти требования смягчены и операции модификации разрешены для более широкого
класса представлений.
Знаете ли Вы, что в 1965 году два американца Пензиас (эмигрант из Германии) и Вильсон заявили, что они открыли излучение космоса. Через несколько лет им дали Нобелевскую премию, как-будто никто не знал работ Э. Регенера, измерившего температуру космического пространства с помощью запуска болометра в стратосферу в 1933 г.? Подробнее читайте в FAQ по эфирной физике.