ИСПОЛЬЗОВАНИЕ ПРЕДСТАВЛЕНИЙ В КАЧЕСТВЕ АЛЬТЕРНАТИВЫ К ОГРАНИЧЕНИЯМ
Одной из
последних прикладных программ является использование представлений с WITH CHECK
OPTION как альтернативы к ограничениям. Предположим что вы хотели удостовериться, что все
значения поля city в
таблице Продавцов находятся в одном из городов где ваша компания в настоящее время имеет
ведомство. Вы можете
установить ограничение CHECK непосредственно на столбец city, но позже может стать трудно его
изменить, если ваша
компания например откроет там другие ведомства. В качестве альтернативы, можно создать
представление, которое
исключает неправильные значения city:
CREATE VIEW Curcities AS SELECT * FROM Salespeople WHERE city IN ('London',
'Rome', 'San Jose', 'Berlin') WITH CHECK OPTION;
Теперь, вместо того, чтобы предоставить пользователям привилегии модифицирования в таблице
Продавцов, вы можете предоставить их в представлении Curcities. Преимущество такого подхода
- в том, что если вам нужно сделать изменение, вы можете удалить это представление, создать
новое, и предоставить в этом
новом представлении привилегии пользователям, что проще чем изменять ограничения. Недостатком
является то, что
владелец таблицы Продавцов также должен использовать это представ- ление если он не хочет
чтобы его собственные
команды были отклонены. С другой стороны, этот подход позволяет владельцу таблицы и любым
другим получить
привилегии модификации в самой таблице, а не в представлении, чтобы делать исключения для
ограничений. Это часто
бывает желательно, но не выполнимо, если вы используете ограничения в базовой таблице.
К сожалению, эти исключения
нельзя будет увидеть в представлении. Если вы выберите этот подход, вам захочется создать
второе представление,
содержащее только исключения:
CREATE VIEW Othercities AS SELECT * FROM Salespeople WHERE city NOT IN ('London',
'Rome', 'San Jose', 'Berlin') WITH CHECK OPTION;
Вы должны выбрать для передачи пользователям только привилегию SELECT в этом представлении,
чтобы они могли видеть исключенные строки, но не могли помещать недопустимые значения
city в базовую таблицу. Фактически, пользователи могли бы сделать запрос обоих представлений
в объединении и увидеть
все строки сразу.