Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

Определение модифицируемости представления

Если команды модификации могут выполняться в представлении, представление, как сообщалось будет модифицируемым; в противном случае оно предназначено только для чтения при запросе. Непротивореча этой терминологии, мы будем использовать выражение "модифицируемое представление"(updating a view), что означает возможность выполнения в представлении любой из трех команд модификации DML ( Вставить, Изменить и Удалить ), которые могут изменять значения. Как вы определите, является ли представление модифицируемым? В теории базы данных, это - пока обсуждаемая тема. Основной ее принцип такой: модифицируемое представление - это представление, в котором команда модификации может выполниться, чтобы изменить одну и только одну строку основной таблицы в каждый момент времени, не воздействуя на любые другие строки любой таблицы. Использование этого принципа на практике, однако, затруднено. Кроме того, некоторые представления, которые являются модифицируемыми в теории, на самом деле не являются модифицируемыми в SQL. Критерии по которые определяют, является ли представление модифицируемым или нет, в SQL, следующие:

  • Оно должно выводиться в одну и только в одну базовую таблицу.
  • Оно должно содержать первичный ключ этой таблицы ( это технически не предписывается стандартом ANSI, но было бы неплохо придерживаться этого).
  • Оно не должно иметь никаких полей, которые бы являлись агрегатными функциями.
  • Оно не должно содержать DISTINCT в своем определении.
  • Оно не должно использовать GROUP BY или HAVING в своем определении.
  • Оно не должно использовать подзапросы ( это - ANSI_ограничение которое не предписано для некоторых реализаций )
  • Оно может быть исполяьзовано в другом представлении, но это представле- ние должно также быть модифицируемыми.
  • Оно не должно использовать константы, строки, или выражения значений ( например: comm * 100 ) среди выбранных полей вывода.
  • Для INSERT, оно должно содержать любые поля основной таблицы которые имеют ограничение NOT NULL, если другое ограничение по умолчанию, не определено.