Базовые переменные отношения и представления

Каталог

Одной из функций СУБД является поддержка каталога, или словаря. Каталог обычно размещается там, где сохраняются различные схемы (внешние, концептуальные и внутренние) и все, что относится к отображениям между ними. В каталоге содержится детальная информация (метаданные), касающиеся различных объектов, которые имеют значение для самой системы (например, переменные-отношения, индексы, ограничения целостности, ограничения защиты и др.). Метаданные необходимы для обеспечения правильной работы системы. Например, оптимизатор использует информацию каталога об индексах и других физических структурах хранения данных, а также иную информацию для принятия решения о том, каким образом выполнить тот или иной запрос. Аналогично подсистема защиты использует информацию каталога о пользователях и установленных ограничениях защиты, чтобы разрешить или отклонить выполнение поступившего запроса.

Замечательным свойством реляционных систем является то, что каталог состоит также из переменных-отношений (или системных переменных-отношений, названных так для того, чтобы отличать их от пользовательских). В результате пользователь может обращаться к каталогу, как и к своим данным. Например, в каталоге обычно содержатся системные переменные-отношения TABLES и COLUMNS, назначение которых – описать известные системе таблицы (т.е. переменные-отношения) и столбцы этих таблиц.

Примечание. Кроме того, каталог должен описывать самого себя, а значит, в системных переменных-отношениях должны присутствовать записи, соответствующие переменным-отношениям каталога.

На основе реляционных значений, присвоенных некоторому множеству переменных-отношений, реляционные выражения позволяют получить множество реляционных значений.

Исходные (заданные) переменные-отношения называются базовыми переменными-отношениями, а присвоенные им значения называются базовыми отношениями (или значениями базовых отношений).

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

Реляционные системы, очевидно, должны предоставлять средства для создания, в первую очередь, базовых переменных-отношений. В языке SQL, например, эта функция обеспечивается оператором CREATE TABLE (здесь слово TABLE используется в узком смысле, как базовая переменная-отношение). Эти переменные-отношения обязательно должны быть поименованы:

CREATE TABLE EMP … ;

Однако реляционные системы обычно поддерживают еще один вид именованных переменных-отношений, называемых представлениями. В любой конкретный момент времени их значение является производным отношением (т.е. представление – производная переменная-отношение). Значение данного представления в данное время является результатом вычисления определенного реляционного выражения в данный момент, а упомянутое реляционное выражение определяется в момент создания этого представления.

Пример 2.5. Определение представления можно осуществить следующим образом:

CREATE VIEW TOPEMP AS

(EMP WHERE SALARY >= 19K) { EMP#, ENAME, SALARY }

За ключевым словом AS расположено выражение фактически определяющее представление, которое не вычисляется, а запоминается системой. С точки зрения пользователя появилась новая переменная-отношение с именем TOPEMP, имеющая текущее значение, которое показано в незатененных участках. Пользователь должен иметь возможность оперировать этим представлением так же, как если бы оно бы было базовой переменной-отношением.

TOPEMP
EMP# ENAME DEPT# SALARY
С1 Иванов Отд1 21K
С2 Петров Отд1 18K
С3 Никитин Отд2 20K
С4 Буденко Отд2 19K

 

Рис. 2.4. Переменная-отношение TOPEMP (затененные участки) как представление базовой переменной-отношения EMP

Однако для представления не существует отдельной копии данных. Представление – это, в некотором смысле, окно, через которое можно видеть часть значения базовой переменной-отношения EMP. Следовательно, все изменения в базовой переменной-отношении будут автоматически и немедленно видны в подобном окне. Аналогично, изменения, внесенные через представление TOPEMP, будут видны и в базовой переменной-отношении EMP.

Пример 2.6. Ниже представлен пример запроса, использующего представление TOPEMP:

( TOPEMP WHERE SALARY < 21K) { EMP#, SALARY }

Результат приведен на рис. 2.5. С концептуальной точки зрения операции с представлениями фактически реализуются посредством замены ссылки на имя представления выражением, которое определяет представление (хранящееся в каталоге). Тогда выражение преобразуется следующим образом:

( (EMP WHERE SALARY > = 19K) { EMP#, ENAME, SALARY}

WHERE SALARY < 21K) { EMP#, SALARY }

После определенного количества перегруппировок это выражение может быть упрощено и может принять следующий вид:

( EMP WHERE SALARY > = 19K AND SALARY < 21K) { EMP#, SALARY }

EMP# ENAME SALARY
С3 Никитин 20K
С4 Буденко 19K

Рис. 2.5. Результат выполнения запроса над представлением TOPEMP

Иными словами, первоначальная операция над представлением конвертируется в эквивалентную операцию над соответствующей базовой переменной-отношением (при этом она оптимизируется).

В принципе, определение представления может быть произвольной сложности (например, представлять соединение нескольких переменных-отношений).

Аналогом внешнего уровня в архитектуре ANSI/SPARC в реляционных системах является множество из нескольких переменных-отношений, каждая из которых является представлением в реляционном смысле. «Внешняя схема» состоит из определений таких представлений.