
- •Содержание
- •Список сокращений
- •Введение
- •Основные понятия теории баз данных
- •Понятие системы баз данных
- •Базы данных и их назначение
- •Данные и модели данных
- •Типы систем баз данных
- •Архитектура системы баз данных
- •Уровни архитектуры
- •Система управления базами данных
- •Система управления передачей данных
- •Архитектура «клиент-сервер»
- •Утилиты
- •Распределенная обработка
- •Семантическое моделирование
- •Общий подход
- •Модель «сущность/связь»
- •Введение в реляционные базы данных
- •Реляционная модель
- •Отношения и переменные-отношения
- •Оптимизация
- •Каталог
- •Базовые переменные отношения и представления
- •Транзакции
- •Введение в язык sql
- •Обзор языка sql
- •Каталог в sql
- •Представления
- •Транзакции в sql
- •Взаимодействие приложений и субд
- •Домены, отношения и базовые переменные-отношения
- •Значения отношений
- •Средства sql
- •Реляционная алгебра
- •Введение в реляционную алгебру
- •Реляционная замкнутость
- •Синтаксис
- •Семантика
- •Примеры
- •Назначение реляционной алгебры
- •Реляционное исчисление
- •Введение в реляционное исчисление
- •Исчисление кортежей
- •Примеры для исчисления кортежей
- •Средства языка sql
- •Целостность данных
- •Введение в целостность данных
- •Ограничения типа
- •Ограничения атрибута
- •Ограничения переменной-отношения
- •Ограничения баз данных
- •«Золотое правило»
- •Ограничения состояния и ограничения перехода
- •Средства языка sql
- •Функциональные зависимости
- •Введение
- •Основные определения
- •Тривиальные и нетривиальные зависимости
- •Замыкание множества зависимостей
- •Замыкание множества атрибутов
- •Неприводимые множества зависимостей
- •Нормализация: формы 1нф, 2нф, 3нф и нфбк
- •Введение
- •Декомпозиция без потерь и функциональные зависимости
- •Первая, вторая и третья нормальные формы
- •Нормальная форма Бойса-Кодда
- •Нормализация: более высокие нормальные формы
- •Многозначные зависимости и четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Общая схема процедуры нормализации
- •Вопросы для самопроверки
- •Дополнительная литература
Оптимизация
Реляционные операторы, как уже отмечалось, выполняются на уровне множеств. Поэтому реляционные языки называют непроцедурными, так как пользователь определяет, что делать, но не как делать. Фактически пользователь определяет, что ему нужно, без указания процедуры получения результата. Процесс «навигации» по хранимой БД с целью удовлетворения запроса пользователя выполняется автоматически, а не пользователем вручную. Поэтому реляционные системы иногда называют системами автоматической навигации. В нереляционных системах ответственность за навигацию по базе данных несет, в основном, сам пользователь. Можно сказать, что реляционные языки, такие как SQL, обладают более высоким уровнем абстракции, чем типичные языки программирования (например, C++), либо подъязыки данных, относящиеся к нереляционным СУБД.
Ответственность за то, как именно выполняется автоматическая навигация, несет очень важный компонент СУБД – оптимизатор. Другими словами, работа оптимизатора заключается в том, чтобы для каждого запроса пользователя выбрать самый эффективный способ выполнения этого запроса.
Пример 4.4. Предположим, что пользователь сделал следующий запрос:
RESULT := (Служащие WHERE НомСлужащего = ‘С4’) { Зарплата }
Здесь выражение круглых скобках представляет запрос выборки строк, а выражение в фигурных скобках – выборку столбцов (или проекцию). В результате выполнения данного запроса результат будет содержать одну строку из одного столбца, содержащей величин зарплаты служащего с номером ‘C4’.
В данном случае возможны несколько способов поиска необходимых данных:
Последовательный физический просмотр переменной-отношения «Служащие», пока требуемая запись не будет найдена.
Если есть индекс для столбца НомСлужащего переменной-отношения, то переход с помощью этого индекса непосредственно к данным служащего ‘C4’.
Оптимизатор выберет, какую стратегию следует применить.
В общем случае оптимизатор для реализации конкретного реляционного запроса будет осуществлять выбор стратегии, исходя из соображений, подобных следующим:
На какие переменные-отношения есть ссылки в запросе;
Насколько велики эти переменные-отношения;
Какие существуют индексы;
Насколько избирательны эти индексы;
Как физически группируются данные на диски;
Какие реляционные операции используются и т.д.
Поэтому пользователь лишь указывает в запросе какие данные ему требуются, а не как их получить, тогда как стратегия доступа к данным определяется оптимизатором. В результате пользователь и пользовательские программы обретают независимость от применяемых стратегий доступа, что важно для достижения цели независимости от физического представления данных.
Каталог
Одной из функций СУБД является поддержка каталога, или словаря. Каталог обычно размещается там, где сохраняются различные схемы (внешние, концептуальные и внутренние) и все, что относится к отображениям между ними. В каталоге содержится детальная информация (метаданные), касающиеся различных объектов, которые имеют значение для самой системы (например, переменные-отношения, индексы, ограничения целостности, ограничения защиты и др.). Метаданные необходимы для обеспечения правильной работы системы. Например, оптимизатор использует информацию каталога об индексах и других физических структурах хранения данных, а также иную информацию для принятия решения о том, каким образом выполнить тот или иной запрос. Аналогично подсистема защиты использует информацию каталога о пользователях и установленных ограничениях защиты, чтобы разрешить или отклонить выполнение поступившего запроса.
Замечательным свойством реляционных систем является то, что каталог состоит также из переменных-отношений (или системных переменных-отношений, названных так для того, чтобы отличать их от пользовательских). В результате пользователь может обращаться к каталогу, как и к своим данным. Например, в каталоге обычно содержатся системные переменные-отношения TABLES и COLUMNS, назначение которых – описать известные системе таблицы (т.е. переменные-отношения) и столбцы этих таблиц.
Примечание. Кроме того, каталог должен описывать самого себя, а значит, в системных переменных-отношениях должны присутствовать записи, соответствующие переменным-отношениям каталога.