SQL1

       

ПРОВЕРКА ЗНАЧЕНИЙ, ПОМЕЩАЕМЫХ В ПРЕДСТАВЛЕНИЕ


Другой вывод о модифицируемости представления - вы можете вводить значения, которые "проглатываются" (swallowed) в базовой таблице. Рассмотрим такое представление:

CREATE VIEW Highratings AS SELECT cnum, rating FROM Customers WHERE rating = 300;

Это представление - модифицируемое. Оно просто ограничивает ваш доступ к определенным строкам и столбцам в таблице. Предположим, что вы вставляете (INSERT) следующую строку:

INSERT INTO Highratings VALUES (2018, 200);

Команда INSERT допустима в данном представлении. Строка будет вставлена с помощью представления Highratings в таблицу Заказчиков. Однако, когда она появится там, она исчезнет из представления, поскольку значение оценки не равно 300. Это - обычная проблема.

Значение 200 может быть просто напечатано, но теперь строка находится уже в таблице Заказчиков, где вы не можете даже увидеть её. Пользователь не сможет понять, почему введя строку он не может её увидеть и будет неспособен при этом удалить её. Вы можете быть гарантированы от модификаций такого типа с помощью включения WITH CHECK OPTION (С ОПЦИЕЙ ПРОВЕРКИ) в определение представления. Мы можем использовать WITH CHECK OPTION в определении представления Highratmgs.

CREATE VIEW Highratings AS SELECT cnum, rating FROM Customers WHERE rating = 300 WITH CHECK OPTION;

Вышеупомянутая вставка будет отклонена.

WITH CHECK OPTION производит действие все_или_ничего (all-or-nothing). Вы помещаете его в определение представления, а не в команду DML, так что или все команды модификации в представлении будут проверяться, или ни одна не будет проверена. Обычно вы хотите использовать опцию проверки, применяя её в определении представления, что может быть удобно. В общем, вы должны использовать эту опцию, если у вас нет причины разрешать представлению помещать в таблицу значения, которые оно само не может содержать.



Содержание раздела