Введение в системы БД (542480), страница 93
Текст из файла (страница 93)
.Иаментальные снюта иногда иначе называют аввигествченными представзениями (9.)(, (9.3>', (9.6>, (9 !4>, (9дб/ Однако этот термин не»дачек и гга нс рекаиенд»ется испальзавапю, паскалыс» овеществлены представления илн нет — эта вопрос реализации, а не лзадслн. Чта экс касается модели, та в ее паничанпа представления не авеи1ествллютсл па определению и термин "овеществленное представление" лвллстсп логической несообразностью, 378 Часть ((. Реляционная модель ЧАК Р2ЯС ЯМАРЯНОТ ( Б ЯОХМ БР ) МЕККЕ Рй = Рй ( 'Р2' ) ) ( Яй, СХТХ ) КЕРКЕБН ЕЧЕКХ ОАХ Определение моментального снимка во многом подобно выполнению запроса, за исключением следующего. 1.
Результат выполнения этого запроса хранится в базе данных под указанным именем (в приведенном выше примере это Р2ЯС) как переменная-отношение, доступ к которой разрешен только для чтения (не считая операции периодического обновления; см. ниже). 2. Периодически (в нашем примере — каждый день, что устанавливается опцией ЕЧЕКХ БАХ) содержание моментального снимка обновляется, т.е.
текушне данные аннулируются и запрос выполняется повторно, после чего полученный результат запроса записывается в качестве нового значения моментального снимка. Таким образом, моментальный снимок Р2ЯС всегда представляет состояние данных, которое они имели не более 24 часов назад (каким в этом случае лолжен быть предикат данного отношения?). Суть идеи моментальных снимков состоит в том, что многие приложения (возможно, даже большинство) могут допускать или даже требовать для обработки данные в том состоянии, в котором они находились в определенный момент. В частности, в эту категорию приложений попадают многие приложения для создания отчетов и ведения бухгалтерского учета.
Подобные приложения обычно требуют фиксации состояния данных в установленное время (например, в конце периода отчетности), и концепция моментальных снимков позволяет выполнить такую фиксацию, не влияя на работу других транзакций, обновляющих рассматриваемые данные в режиме реального времени. Аналогично может потребоваться зафиксировать состояние большого объема данных, которые используются для выполнения сложного запроса или приложения, не требуюшего модификации исходных данных, опять же, чтобы избежать блокирования обновления данных на время их выполнения. Замечание. Эта идея становится еше привлекательнее в среде распределенных баз данных или приложений поддержки принятия решений (подробности приводятся в главах 20 и 2! соответственно).
Отметим также, что моментальные снимки представляют важный частный случай контролируаиай избыточности (см. главу 1), а процедура "обновление снимка" — это соответствуюший процесс распространения обновления (снова см, главу 1). В общем случае определение моментального снимка имеет следуюший синтаксис. ЧАК <нмя переменной-атношення> ЯМАРЯНОТ <реляционное внрашенне> <слнсок апределеннй потенцнальнмк ключей> КЕРКЕБН ЕЧЕКХ <пернод> ; В этом определении для указания периода обновления моментального снимка используется параметр <пернод>, который может принимать, например, следуюшие значения: МОМТН (месяц), РЕЕК (неделя), НООК (час), л МХМОТЕЯ (л минут), МОМРАХ (понедельник), ИЕЕКРАХ (день недели) и т.п.
Ниже приведен синтаксис выражения для удаления определения моментального снимка. ОКОР ЧАК <нмя переменной-отношения> Здесь параметр <нмя переменной-отношения> задает имя удаляемого моментального снимка. Глава 9. Представления 379 Замечание. Мы подразумеваем, что операция ОВОР завершится неудачно, если какая- либо переменная-отношение в данный момент ссылается на удаляемый моментальный снимок.
Альтернативным решением может быть расширение приведенного выше определения моментального снимка за счет включения опций ВЕЯТВ1СТ и САЯСАОЕ. Здесь мы не будем обсуждать эту возможность. 9.6. Поддержка представлений в языке Я0Е В этом разделе будут рассмотрены средства поддержки представлений, существующие в языке Ячг(. (к сожалению, на данный момент язык Яо). не предусматривает поддержки моментальных снимков). Прежде всего, рассмотрим синтаксис оператора создания представления СЕНАТЕ Ч1ЕИ.
СВЕАТЕ Ч1ЕИ <ння представлення> АЯ <таблнчное внравенне> ( ИТТН ( <ква ф атер ) СВЕСЕ ОРТ10Н ) Здесь параметр <кваннфнкатор> может принимать значение САЯСАОЕО или ЬОСЫ, причем значение САЯСАОЕЮ принимается по умолчанию (и фактически это единственная разумная опция, как подробно объясняется в (4.!9)), поэтому здесь опцию БОСАМИ мы рассматривать не будем.
Пояснения 1. Значение параметра <табличное внраненне> представляет собой определение представления. Формат этого выражения подробно описывается в приложении А. 2. Фраза И1ТН СНЕСК ОРТ10Н, если она указана, означает„что операции вставки (1НЯЕВТ) и обновления (ОРОАТЕ) для данного представлении будут отменены в случае нарушения ограничений целостности, указанных в определении представления. Поэтому заметь~с, что подобные операции буду~ завершаться выдачей ошибки лишь в том случае, когда определитель И1ТН СНЕСК ОРТ10И указан явно, т.е, по умолчанию любые операции вставки и обновления кортежей будут завершаться успеино.
На основании выволов, сделанных в разделе 9.4, можно заключить, что подобное повеление логически некорректно. Поэтому нас~оятельно рекомендуется всегда указывать опцию И1ТН СНЕСК ОРТ10И в определениях любых создаваемых представленийч (9.8). При иеры 1. СВЕРЛЕ Ч1ЕИ ЯОРРЫЕВ АЯ НЕДОЕСТ Я.Я!(, Я.ЯТАТОЯ, Я.С1ТУ ГВОН Я ИНЕВЕ Я.ЯТАТОЯ > 15 ИХТН СНЕСК ОРТ10Н 2. СВЕАТЕ Ч1ЕИ ВЕОРАВТ АЯ НЕДОЕСТ Р.Р$, Р.НАНЕ, Р.ИЕ16НТ АЯ ИТ, Р.С1ТУ З Безусловна, речь идет тояько об обновяяемых представлениял. Как .иы убедиися позже, в языке 501 представления часто не являются обновляемыми и наличие опнии Ы17Н СНЕСК ОР710Н в таких случаях недопустимо в соответствии с требованиями языка ЕДА 380 Часть П. Реляз(ионная модель ЯКОМ Р ИНЕКЕ Р.СОЬОК = 'Кеб' И1ТН СНЕСК ОРТ1ОН ; 3.
СКЕАТЕ Ч1ЕИ РО АЯ ЯЕЬЕСТ ЯР.РХ, ЯОМ ( ЯР.ОТХ ) АЯ ТОТОТХ РКСМ ЯР СКООР ВХ ЯР.РЯ В отличие от приведенного выше аналога этого представления (см. в разделе 9.1 подраздел "Дополнительные примеры"), данное представление не будет включать строк для деталей, которые не поставляются ни одним из поставщиков. Подробности приводятся в обсуждении примера 7.7.8 в главе 7. 4. СКЕАТЕ Ч1ЕИ С1ТХ РА1К АЯ ЯЕОЕСТ 01ЯТ1НСТ Я.СХТХ АЯ ЯС1ТХ, Р.СХТХ АЯ РСХТХ ЯКОМ Я, ЯР, Р ИНЕКЕ Я.ЯХ = ЯР.ЯЯ АНО ЯР.РЯ - "Р.РР 5. СКЕАТЕ Ч1ЕИ НЕАЧХ КЕОРАКТ АЯ ЯЕЕЕСТ КР.РЯ, КР.РНАМЕ, КР.ИТ, КР.С1ТХ ЯКОМ КЕОРАКТ АЯ КР ИНЕКЕ КР ИТ > 12.0 И1ТН СНЕСК ОРТ1ОН Существующее представление може~ быть удалено с помощью Щ -оператора ОКОР Ч1ЕИ, синтаксис которого приведен ниже. ОКОР Ч1ЕИ <лня представления> <режим> ; В этом операторе (как и в Я >(,-операторах ОКОР ТАНЕК и ОКОР ООМА1Н) значением параметра <режим> могут быть опции КЕЯТК1СТ и САЯСАОЕ.
Если указана опция КЕЯТК1СТ и иа удаляемое представление имеются ссылки в определениях других представлений или ограничений целостности, то данная операция ОКОР будет признана ошибочной. Если указана опция САЯСАОЕ, то выполнение данной операции ОКОР завершится успешно и булет сопровождаться "каскадным" удалением всех представлений и ограничений целостности, определения которых ссылаются на данное удаляемое представление.
Выборка данных из представлений Как было показано в разделе 9.3, для всех операций выборки данных из любых представлений в текущей версии стандарта языка 81.11 (Я.>Е/92) гарантируется корректность выполнения. К сожалению, этого нельзя сказа~ь о некоторых современных программных продуктах, как и о предыдущих версиях стандарта языка ЯО(. (см.
упр. 9.14). Обновление данных в представлениях Стандарт Я()1.!92 поддерживает весьма ограниченный набор операций обновления данных в представлениях. В качестве обновляемых, в основном, рассматриваются только те представления, которые являются производными от одной базовой таблицы и описаны с использованием некоторой комбинации операций выборки и 381 Глава 9. Представления проекции. Более того, поддержка даже такого простейшего типа представлений трактуется неправильно, поскольку в стандарте языка Я)Б не используется понятие предиката переменной-отношения и, в частности, в Бо).-таблицах разрешается наличие повторяющихся строк.