27_SH43-0144-00 (1038594), страница 35
Текст из файла (страница 35)
В этом случаеможно создать производную таблицу, содержащую только столбцыLASTNAME (фамилия) и PHONENO (номер телефона). Права на доступ к этойпроизводной таблице могут быть предоставлены группе PUBLIC (то есть всемпользователям), в то время как права на доступ ко всей таблице EMPLOYEEможно ограничить, разрешив его только тем пользователям, которые имеютправо получать информацию о заработной плате. Информацию о производныхтаблицах только для чтения смотрите в руководстве SQL Reference.CREATE VIEW <имя> (<столбец>, <столбец>, <столбец>)SELECT <имена_столбцов> FROM <имя_таблицы>WITH CHECK OPTIONИспользуя производную таблицу, можно сделать доступным для прикладнойпрограммы часть данных таблицы и проверять вставляемые или изменяемыеданные. Имена столбцов производной таблицы могут не совпадать с именамисоответствующих столбцов исходных таблиц.Используя производные таблицы, можно гибко определить, как будутвыглядеть данные таблицы для программ и запросов конечных пользователей.Следующий оператор SQL создает производную таблицу на основе таблицыEMPLOYEE, в которой перечислены все сотрудники отдела A00 с личныминомерами и номерами телефонов:CREATE VIEW EMP_VIEW (DA00NAME, DA00NUM, PHONENO)AS SELECT LASTNAME, EMPNO, PHONENO FROM EMPLOYEEWHERE WORKDEPT = 'A00'WITH CHECK OPTIONВ первой строке этого оператора задается имя производной таблицы иопределяются ее столбцы.
Имя EMP_VIEW должно быть уникальным в своейсхеме в SYSCAT.TABLES. Имя производной таблицы выглядит как имятаблицы, хотя сама она и не содержит данных. В этой производной таблицебудет три столбца с именами DA00NAME, DA00NUM и PHONENO, которыесоответствуют столбцам LASTNAME, EMPNO и PHONENO из таблицыГлава 3. Создание базы данных149EMPLOYEE. Каждому из перечисленных столбцов соответствует один столбец всписке выборки в операторе SELECT. Если имена столбцов не заданы, впроизводной таблице используются те же имена столбцов, что и для столбцовтаблицы в операторе SELECT.Вторая строка - это оператор SELECT, в котором описывается, какие значениядолжны быть выбраны из базы данных.
Он может включать условия ALL,DISTINCT, FROM, WHERE, GROUP BY и HAVING. Имя или имена объектовданных, из которых выбираются столбцы для этой производной таблицы,должны быть заданы после условия FROM.Условие WITH CHECK OPTION указывает, что для всех операций вставки илиизменения для этой производной таблицы должна выполняться проверка насоответствие определению этой производной таблицы и что эти операциидолжны отвергаться, если они не удовлетворяют этому определению.
Такойрежим лучше обеспечивает целостность данных, но требует дополнительнойобработки. Если такое условие опущено, операции вставки и изменения не будутпроверяться на соответствие определению этой производной таблицы.Следующий оператор SQL создает для таблицы EMPLOYEE ту же производнуютаблицу, используя условие SELECT AS:CREATE VIEW EMP_VIEWSELECT LASTNAME AS DA00NAME,EMPNO AS DA00NUM,PHONENOFROM EMPLOYEEWHERE WORKDEPT = 'A00'WITH CHECK OPTIONМожно создать производную таблицу, используя в ее определениипользовательскую функцию.
Однако, чтобы обновить такую производнуютаблицу при изменении функций, придется отбросить эту производную таблицуи затем создать ее заново. Если от пользовательской функции зависитпроизводная таблица, эту функцию нельзя отбросить.Следующий оператор SQL создает производную таблицу с функцией вопределении:CREATE VIEW EMPLOYEE_PENSION (NAME, PENSION)AS SELECT NAME, PENSION(HIREDATE,BIRTHDATE,SALARY,BONUS)FROM EMPLOYEEПользовательская функция PENSION вычисляет пенсию, на которую имеетправо работник, используя формулу, в которую входят его дата приема наработу (HIREDATE), дата рождения (BIRTHDATE), заработная плата (SALARY)и премия (BONUS).150Руководство администратора: РеализацияСоздание типизированной производной таблицы||||Для создания типизированной производной таблицы можно использоватьоператор CREATE VIEW.
Всю необходимую информацию о типизированныхпроизводных таблицах можно найти в руководстве Application DevelopmentGuide.Создание сводной таблицыСводная таблица - это таблица, определение которой основано на результатахзапроса. Сама сводная таблица содержит обычно предварительно вычисленныерезультаты, основанные на данных, существующих в таблице или таблицах, наоснове которых создана эта сводная таблица. Если компилятор SQL определяет,что для выполнения запроса эффективнее использовать не базовую таблицу, асводную, будет использована сводная таблица и результаты будут полученыбыстрее.Для репликации сводной таблицы на всех узлах в среде многораздельных базданных можно создать эту сводную таблицу с опцией репликации.
Такиетаблицы называются “реплицируемыми сводными таблицами”.Дополнительную информацию о таких таблицах смотрите в руководствеРуководство администратора: Планирование.Примечание: Сводные таблицы нельзя использовать со статическим SQL илипсевдонимами.В общем случае сводная таблица или реплицируемая сводная таблицаиспользуется для оптимизации запроса, если уровень изоляции этой своднойтаблицы или реплицируемой сводной таблицы больше или равен уровнюизоляции запроса. Например, если запрос выполняется с уровнем изоляциистабильность на уровне указателя (CS), для оптимизации используются толькосводные таблицы или реплицируемые сводные таблицы, определенные суровнем изоляции CS или более высоким.Для создания сводной таблицы используется оператор CREATE SUMMARYTABLE с условием AS полная_выборка и опциями IMMEDIATE или REFRESHDEFERRED.|||||||||Для имен столбцов сводной таблицы можно задать уникальные имена.
Списокимен столбцов должен содержать столько же имен, сколько столбцов в таблицерезультатов этой полной выборки. Список имен столбцов должен быть задан,если таблица результатов полной выборки содержит повторяющиеся именастолбцов или столбцы без имен. Столбцы без имен образуются для констант,функций, выражений или операторов присваивания, для которых не заданыимена с помощью условия AS списка выборки. Если список столбцов не задан,столбцы этой таблицы будут иметь те же имена, что и столбцы наборарезультатов полной выборки.Глава 3. Создание базы данных151При создании сводной таблицы можно задать, должно ли содержимое этойтаблицы обновляться автоматически при изменении базовой таблицы, или жедля ее обновления будет использоваться оператор REFRESH TABLE. Чтобысводная таблица автоматически обновлялась при изменении базовой таблицы(или таблиц), задайте ключевое слово REFRESH IMMEDIATE. Такоенемедленное обновление удобно, когда:v Существуют запросы, для выполнения которых с использованием базовойтаблицы требуется много времениv Базовая таблица (или таблицы) изменяется редкоv Обновление сводной таблицы не занимает много времени.В этом случае сводная таблица содержит заранее вычисленные результаты.
Еслинужно, чтобы обновление сводной таблицы было отложено, задайте ключевоеслово REFRESH DEFERRED. Сводные таблицы, для которых задано ключевоеслово REFRESH DEFERRED, не будут отражать изменения базовых таблиц.Такие сводные таблицы следует использовать в тех случаях, когда это несущественно. Например, при выполнении запросов DSS может использоватьсясводная таблица, содержащая унаследованные данные.Сводная таблица, определенная с условием REFRESH DEFERRED, можетиспользоваться вместо запроса, когда он:v Удовлетворяет ограничениям на полную выборку для сводной таблицы снемедленным обновлением, за исключением:– Не требуется, чтобы список SELECT содержал COUNT(*) илиCOUNT_BIG(*)– Список SELECT может содержать функции столбцов MAX и MIN– Разрешено условие HAVING.Специальному регистру SQL под именем CURRENT REFRESH AGEприсваивается значение ANY или 99999999999999.
Все девятки - этомаксимальное значение, которое может иметь этот специальный регистр,содержащий значение длительности времени типа данных DECIMAL(20,6).Примечание: Сводные таблицы, определенные с REFRESH DEFERRED, неиспользуются для оптимизации статического SQL.Специальный регистр CURRENT REFRESH AGE используется для заданияинтервала времени, в течение которого сводная таблица, определенная сREFRESH DEFERRED, может использоваться для динамических запросов,прежде чем будет необходимо ее обновление. Для задания значенияспециального регистра CURRENT REFRESH AGE можно использовать операторSET CURRENT REFRESH AGE.
Дополнительную информацию о специальномрегистре CURRENT REFRESH AGE и операторе SET CURRENT REFRESH AGEсмотрите в руководстве SQL Reference.152Руководство администратора: РеализацияСводные таблицы, определенные с REFRESH IMMEDIATE, могут применятьсякак для статических, так и для динамических запросов; для таких сводныхтаблиц не нужно использовать специальный регистр CURRENT REFRESH AGE.Примечание: Будьте осторожны, задавая для специального регистра CURRENTREFRESH AGE ненулевое значение.
Когда для оптимизацииобработки запросов разрешено использовать сводную таблицу,которая может не отражать текущие значения базовой таблицы,результаты запроса могут не точно отражать данные базовойтаблицы. Это может быть приемлемо, если известно, что базовыеданные не изменились, или если данные таковы, что для нихдопустима некоторая ошибка в результатах.После выполнения операций, изменяющих исходные данные, сводная таблицауже не будет содержать точные данные.
Нужно будет использовать операторREFRESH TABLE. Дополнительную информацию смотрите в справочнике SQLReference.Если на основе допустимой полной выборки нужно создать новую базовуютаблицу, задайте при создании этой таблицы ключевое слово DEFINITIONONLY. Когда таблица будет создана, она будет считаться не сводной, а базовойтаблицей.
Например, можно создать таблицы исключений, используемые вLOAD и SET INTEGRITY:CREATE TABLE XT AS(SELECT T.*, CURRENT TIMESTAMP AS TIMESTAMP,CLOB(",32K)AS MSG FROM T) DEFINITION ONLYНекоторые главные ограничения, касающиеся сводных таблиц:1. Сводную таблицу нельзя изменять.2. Нельзя изменить длину столбца базовой таблицы, если для этой таблицысуществует сводная таблица.3. Нельзя импортировать данные в сводную таблицу.4. Нельзя создать индекс уникальности для сводной таблицы.5. Нельзя создать сводную таблицу на основе результатов запроса, в которомиспользуется один или несколько псевдонимов.Полный список ограничений для сводных таблиц смотрите в руководстве SQLReference.Создание алиасаАлиас - это метод косвенного задания в операторе SQL таблицы, псевдонимаили производной таблицы, позволяющий исключить зависимость этогооператора SQL от полного имени таблицы или производной таблицы. Приизменении имени таблицы или производной таблицы потребуется изменитьГлава 3.