- •Часть 1
- •Глава 1. Управление базами данных.
- •1.1. Вводный пример
- •1.2. Что такое система баз данных
- •1.3. Что такое база данных
- •Свойства
- •1.4. Почему база данных
- •1.5.Независимость данных
- •1.6. Реляционные и другие системы
- •1.7. Резюме
- •1.5. А)
- •Глава 2.
- •2.1. Цель
- •2.2. Три уровня архитектуры
- •2.3. Внешний уровень
- •2.4. Концептуальный уровень
- •2.5. Внутренний уровень
- •2.6. Отображения
- •2.7. Администратор базы данных
- •2.8. Система управления базой данных
- •2.9. Система управления передачей данных
- •2.10. Архитектура клиент/сервер
- •2.11. Утилиты
- •2.12. Распределенная обработка
- •2.13. Резюме
- •Глава 3.
- •3.1. Введение
- •3.2. Реляционные системы
- •3.3. Замечание относительно терминологии
- •3.4. Реляционная модель
- •3.5. Оптимизация
- •3.6. Каталог
- •3.7. Базовые таблицы и представления
- •3.8. Язык sql
- •3.9. База данных поставщиков и деталей
- •3.10. Резюме
3.6. Каталог
Как отмечалось в главе 2, каждая СУБД должна обеспечивать функцию каталога, или словаря. Каталог, между прочим, размещается там, где сохраняются различные схемы (внешние, концептуальные, внутренние) и все, что относится к отображениям (внешнее - концептуальное, концептуальное - внутреннее). Иначе говоря, каталог содержит детальную информацию (иногда называемую дескрипторами), касающуюся различных объектов, которые имеют значение для самой системы. Примерами таких объектов могут служить таблицы, индексы, правила целостности, правила безопасности и т.д. Информация дескриптора необходима для обеспечения правильной работы системы. Например, оптимизатор использует информацию каталога об индексах, а также другую информацию, чтобы определиться, каким образом выполнить запрос пользователя. Подобно этому, подсистема безопасности использует информацию каталога о пользователях и правилах безопасности, чтобы разрешить (или отказать) запросу первоочередное выполнение.
Прекрасным свойством реляционных систем в настоящее время является то, что каталог сам состоит из таблиц (точнее, системных таблиц, названных так для отличия от обычных пользовательских). В результате пользователь может обращаться к каталогу так же, как к своим данным. Например, в каталоге обычно содержатся системные таблицы TABLES и COLUMNS, назначение которых — описание известных системе таблиц и столбцов этих таблиц. (Мы говорим "обычно", потому что каталоги в различных системах разные, так как большая доля информации каталога является особенной для системы.) Для базы данных отделов и служащих таблицы TABLES и COLUMNS могут схематически выглядеть так, как показано на рис. 3.4.
Замечание. Точнее говоря, таблицы TABLES и COLUMNS описывают известные системе именованные таблицы, в противоположность неименованным таблицам, которые являются результатом какого-либо реляционного выражения. Обратите также внимание на то, что категория "именованные таблицы" включает таблицы каталога, т.е. каталог описывает сам себя. Однако на рис. 3.4 сам каталог не показан в таблицах.
TABLES
|
TABNAME
|
COLCOUNT
|
ROWCONT
|
|
.....
|
| |
|
DEPT
|
3
|
3
|
|
... .
|
| |
|
EMP
|
4
|
4
|
|
.....
|
| |
|
|
|
|
|
|
| |
COLUMNS
|
TABNAME
|
COLNAME
|
.....
|
| |||
|
DEPT
|
DEPT#
|
.....
|
| |||
|
DEPT
|
DNAME
|
.....
|
| |||
|
DEPT
|
BUDGET
|
.....
|
| |||
|
EMP
|
EMP#
|
.....
|
| |||
|
EMP
|
ENAME
|
.....
|
| |||
|
EMP
|
DEPT#
|
.....
|
| |||
|
EMP
|
SALARY
|
.....
|
|
Рис. 3.4. Каталог базы данных отделов и служащих (изображен схематически)
Теперь предположим, что пользователю базы данных отделов и служащих понадобилось узнать, какие именно столбцы содержит таблица DEPT (конечно, предполагается, что по каким-то причинам пользователь не имеет этой информации). Тогда необходимое выражение будет выглядеть следующим образом:
( COLUMNS WHERE TABNAME = 'DEPT' ) [ COLNAME ]
Замечание. Если бы нам понадобилось сохранить результат в более постоянном виде, мы могли бы присвоить его другой таблице, скажем, таблице RESULT, как было показано в примере выше, но мы будем опускать этот шаг присвоения в большинстве наших примеров (как в этой, так и в последующих главах).
Вот еще один пример. Необходимо узнать, в каких таблицах есть столбец ЕМР#:
( COLUMNS WHERE COLNAME = 'ЕМР#' ) [ TABNAME ]
Упражнение для самопроверки. Каким будет результат выполнения следующего выражения:
( ( TABLES JOIN COLUMNS )
WHERE COLCOUNT < 5 ) [ TABNAME, COLNAME ]