ОПРЕДЕЛЕНИЕ МОДИФИЦИРУЕМОСТИ ПРЕДСТАВЛЕНИЯ
Если команды модификации могут выполняться в представлении, представление как сообщалось
будет
модифицируемым; в противном случае оно предназначено только для чтения при запросе.
Непротивореча этой терминологии, мы будем использовать выражение "модифицируемое
представление"(updating a view), чтоы означает возможность
выполнения в представление любой из трех команд модификации DML ( Вставить, Изменить и
Удалить ), которые могут
изменять значения. Как вы определите, является ли представление модифицируемым? В теории
базы данных, это - пока
обсуждаемая тема. Основной ее принцип такой: модифицирумое представление - это представление
в котором команда
модификации может выполниться, чтобы изменить одну и только одну строку основной таблицы в
каждый момент
времени, не воздействуя на любые другие строки любой таблицы. Использование этого принципа на
практике, однако,
затруднено. Кроме того, некоторые представления, которые являются модифицируемыми в теории,
на самом деле не
являются модифицируемыми в SQL. Критерии по которые определяют, является ли представление
модифицируемым или
нет, в SQL, следующие:
* Оно должно выводиться в одну и только в одну базовую таблицу.
* Оно
должно содержать
первичный ключ этой таблицы ( это технически не предписывается стандартом ANSI, но было бы
неплохо придерживаться
этому).
* Оно не должно иметь никаких полей, которые бы являлись агрегатными функциями.
* Оно
не должно содержать
DISTINCT в своем определении.
* Оно не должно использовать GROUP BY или HAVING в своем
определении.
* Оно не
должно использовать подзапросы ( это - ANSI_ограничение которое не предписано для некоторых
реализаций )
* Оно
может быть использовано в другом представлении, но это представление должно также быть
модифицируемыми.
* Оно не
должно использовать константы, строки, или выражения значений ( например: comm * 100 ) среди
выбранных полей вывода.
* Для INSERT, оно должно содержать любые поля основной таблицы которые имеют ограничение
NOT NULL, если другое
ограничение по умолчанию, не определено.