|
Программирование >> Хронологические базы данных
Замечание. Мы подразумеваем, что операция DROP завершится неудачно, если какая-либо переменная-отношение в данный момент ссылается на удаляемый моментальный снимок. Альтернативным решением может быть расширение приведенного выше определения моментального снимка за счет включения опций RESTRICT и CASCADE. Здесь мы не будем обсуждать эту возможность. 9.6. Поддержка представлений в языке SQL в этом разделе будут рассмотрены средства поддержки представлений, существующие в языке SQL (к сожалению, на данный момент язык SQL не предусматривает поддержки моментальных снимков). Прежде всего, рассмотрим синтаксис оператора создания представления CREATE VIEW. CREATE VIEW <имя представлениЯ> AS <та6личное выражение> [ WITH [ <квалификатор> ] CHECK OPTION ] ; Здесь параметр <квалификатор> может принимать значение CASCADED или LOCAL, причем значение CASCADED принимается по умолчанию (и фактически это единственная разумная опция, как подробно объясняется в [4.19]), поэтому здесь опцию LOCAL мы рассматривать не будем. Пояснения 1. Значение параметра <табличное выражение> представляет собой определение представления. Формат этого выражения подробно описывается в приложении А. 2. Фраза WITH CHECK OPTION, если она указана, означает, что операции вставки (INSERT) и обновления (UPDATE) для данного представлении будут отменены в случае нарушения ограничений целостности, указанных в определении представления. Поэтому заметьте, что подобные операции будут завершаться выдачей ошибки лишь в том случае, когда определитель WITH CHECK OPTION указан явно, т.е. по умолчанию любые операции вставки и обновления кортежей будут завершаться успешно. На основании выводов, сделанных в разделе 9.4, можно заключить, что подобное поведение логически некорректно. Поэтому настоятельно рекомендуется всегда указывать опцию WITH CHECK OPTION в определениях любых создаваемых представлений [9.8]. Примеры 1. CREATE VIEW SUPPLIER AS SELECT S.St, S.STATUS, S.CITY FROM S WHERE S.STATUS > 15 WITH CHECK OPTION ; 2. CREATE VIEW REDPART AS SELECT P.Pt, P.NAME, P.WEIGHT AS WT, P.CITY Безусловно, речь идет только об обновляемых представлениях. Как мы убедимся позже, в языке SOL представления часто не являются обновляемыми и наличие опции WITH CHECK OPTION в таких случаях недопустимо в соответствии с требованиями языка SOL. FROM P WHERE P.COLOR = Red WITH CHECK OPTION ; 3. CREATE VIEW PQ AS SELECT SP.Pt, SUM ( SP.QTY ) AS TOTQTY FROM SP GROUP BY SP.Pt ; В отличие от приведенного выше аналога этого представления (см. в разделе 9.1 подраздел Дополнительные примеры ), данное представление не будет включать строк для деталей, которые не поставляются ни одним из поставщиков. Подробности приводятся в обсуждении примера 7.7.8 в главе 7. 4. CREATE VIEW CITY PAIR AS SELECT DISTINCT S.CITY AS SCITY, P.CITY AS PCITY FROM S, SP, P WHERE S.St = SP.St AND SP.PI = P.PI ; 5. CREATE VIEW HEAVY REDPART AS SELECT RP.Pt, RP.PNAME, RP.WT, RP.CITY FROM REDPART AS RP WHERE RP.WT > 12.0 WITH CHECK OPTION ; Существующее представление может быть удалено с помощью SQL-оператора DROP VIEW, синтаксис которого приведен ниже. DROP VIEW <имя представления> <режим> ; В этом операторе (как и в SQL-операторах DROP TABLE и DROP DOMAIN) значением параметра <режиМ> могут быть опции RESTRICT и CASCADE. Если указана опция RESTRICT и на удаляемое представление имеются ссылки в определениях других представлений или ограничений целостности, то данная операция DROP будет признана ошибочной. Если указана опция CASCADE, то выполнение данной операции DROP завершится успешно и будет сопровождаться каскадным удалением всех представлений и ограничений целостности, определения которых ссылаются на данное удаляемое представление. Выборка данных из представлений Как было показано в разделе 9.3, для всех операций выборки данных из любых представлений в текущей версии стандарта языка SQL (SQL/92) гарантируется корректность выполнения. К сожалению, этого нельзя сказать о некоторых современных программных продуктах, как и о предыдущих версиях стандарта языка SQL (см. упр. 9.14). Обновление данных в представлениях Стандарт SQL/92 поддерживает весьма ограниченный набор операций обновления данных в представлениях. В качестве обновляемых, в основном, рассматриваются только те представления, которые являются производными от одной базовой таблицы и описаны с использованием некоторой комбинации операций выборки и проекции. Более того, поддержка даже такого простейшего типа представлений трактуется неправильно, поскольку в стандарте языка SQL не используется понятие предиката переменной-отношения и, в частности, в SQL-таблицах разрешается наличие повторяющихся строк. Ниже приведено более точное изложение правил обновляемости представлений в соответствии со стандартом языка SQL (этот список взят из [4.19], хотя здесь он несколько упрощен). Стандартом языка SQL предполагается, что представление является обновляемым только в том случае, если выполнены все следующие условия. 1. Табличное выражение, определяющее область видимости представления, должно быть выражением выборки, т.е. в него не должны непосредственно входить такие ключевые слова, как JOIN, UNION, INTERSECT и EXCEPT. 2. Предложение SELECT в выражении выборки не должно непосредственно содержать ключевое слово DISTINCT. 3. Каждый выбираемый элемент в предложении SELECT (после любых требуемых расширений этого списка, заданных шаблоном звездочка (*)) должен быть именем столбца (возможно, уточненным и при необходимости сопровождаемым фразой AS), представляющим простую ссылку на столбец исходной таблицы (см. п. 5). 4. Предложение FROM в выражении выборки должно содержать ровно одну ссылку на таблицу. 5. Данная ссылка на таблицу должна задавать либо базовую таблицу, либо обновляемое представление. Замечание. Таблица, которую задает ссылка, является единственной исходной таблицей для рассматриваемого обновляемого представления (см. п. 3). 6. Заданное выражение выборки не должно включать предложения WHERE с подзапросом, в котором содержится предложение FROM, ссылающееся на ту же таблицу, что и основное предложение FROM, рассмотренное в п. 4. 7. Выражение выборки не должно включать предложения GROUP ВУ. 8. Выражение выборки не должно включать предложения HAVING. Сделаем пару замечаний к перечисленным правилам. 1. Подход к обновляемости представлений в языке SQL следует принципу все или ничего . Это значит, что по отношению к любому представлению все три операции, INSERT, UPDATE и DELETE, либо можно применять, либо нельзя. Например, в языке SQL невозможна ситуация, когда к некоторому представлению допускается применение операции DELETE, но запрещено применять операцию INSERT (хотя отдельные коммерческие программные продукты такую возможность поддерживают). 2. В языке SQL операция UPDATE либо применима к данному представлению, либо нет. Иначе говоря, в языке SQL недопустима ситуация, когда одни столбцы представления являются обновляемыми, а другие - нет (хотя некоторые коммерческие программные продукты в этом отношении пошли дальше стандарта).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |