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