Проектирование схемы приложения. Эффективное использование синонимов в схеме приложения, страница 11

Предположим, например, что вы создаете для таблицы STOCK представление INVENTORY (показанное выше). Эта таблица находится в другой пользователь­ской схеме, поэтому вы можете применять представление INVENTORY только для операторов SELECT (но не INSERT, UPDATE или DELETE). Кроме того, для создания представления вы не можете использовать полученные на основе ролей полномочия на объект (в отличие от непосредственно присвоенных полномочий).

При создании схемы приложения, содержащей все необходимые для работы объекты, эти проблемы не должны вас беспокоить, ведь владельцу (схеме) в этом случае принадлежат все объекты приложения, включая представления и соответст­вующие базовые таблицы. Все сложные требования к полномочиям вам при этом рассматривать не потребуется.

Использование в представлении псевдонимов имен столбцов

Во многих случаях вместо имен, соответствующих именам столбцов базовой таблицы, в столбцах представления желательно использовать альтернативные имена. Например, при создании представления, объединяющего две различные таблицы, важно четко различать столбцы разных таблиц с идентичными именами. Представление ORDERPORT, показанное в этой главе выше, иллюстрирует один из способов спецификации псевдонимов столбцов. Как демонстрирует следующий пример, CREATE VIEW также позволяет вам перед определением запроса пред­ставления задать список разделенных запятыми псевдонимов. Если вы используете этот метод, то число псевдонимов столбца должно соответствовать числу столбцов в определяющем запросе:

CREATE VIEW orderreport (order_id, order_date, line_item_id, stock_id) AS

 SELECT orders.id, orders.orderdate, item.id, stockid

FROM orders, item

             WHERE item.orderid = orders.id

Задание для представлений ограничений целостности

Ограничения целостности таблицы устанавливают правила целостности для любых видов доступа, включая работу с таблицей ее представления. Oracle7 не позволяет обходить правила целостности путем создания и использования пред­ставления.

Если вы создаете для приложения представление, которое пользователи будут применять для вставки или обновления данных таблицы, то рассмотрите возмож­ность применения специальных определяемых для него ограничений целостности. Если при создании представления команда CREATE VIEW задается с ключевым словом CHECK, то Oracle7 позволяет пользователям вставлять и обновлять толь­ко те строки, которые в этом представлении доступны. Например, следующий оператор определяет представление, выводящее только покупателей из штата Калифорния:

CREATE VIEW California AS

SELECT companyname, lastname, firstname, city FROM customer

WHERE state = 'CA' —CA -шт. Калифорния

WITH CHECK OPTION

Следующий пример показывает, какие операторы UPDATE Oracle7 запрещают использовать из-за ограничений целостности представления CALIFORNIA:

UPDATE California

SET city = ‘SOUTH LAKE TAHOE'

WHERE id = 7593

UPDATE California

SET city = 'WA'

WHERE id = 7593

Второй оператор работать не сможет, так как в результате будет получается строка, не выводимая в представлении CALIFORNIA (полученные данные отно­сятся к покупателю из штата Вашингтон).

Замена представлений

Иногда возникает необходимость заменить текущую версию представления новым определением. Например, если вы добавили к таблице новый столбец, то можете изменить соответствующее представление для вывода нового столбца таб­лицы.

Одним из способов замены представления его новой версией является удаление текущего представления и воссоздание нового (с новым определением). Однако при таком способе удаляются также все назначенные представлению полномочия. Чтобы приложение вновь заработало, вы вынуждены будете заново назначать их в новой его версии. Oracle7 позволяет избежать этой проблемы с помощью замены текущей версии новой, для чего используется параметр REPLACE команды CREATE VIEW:

CREATE OR REPLACE VIEW...

Совет

Как и команду ALTERTABLE, параметр REPLACE коман­ды CREATEVIEW удобно использовать, когда опреде­ление представления нужно заменить во время работы приложения (в среде рабочей базы данных). Вместо приостановки или завершения приложения для выполнения операций обслуживания вы можете просто заменить представление, не влияя на доступность приложения.

Удаление представлений