- •Установочный модуль
- •Введение
- •Модуль 1
- •Реляционная алгебра
- •Отсутствующие данные
- •Пустые значения
- •Неопределенные значения
- •Интерпретации
- •Правила вычисления выражений
- •Следствия
- •Проверка условий
- •Реляционные объекты данных
- •Формальные определения
- •Домены и атрибуты
- •Схема отношения
- •Именованное значение атрибута
- •Кортеж
- •Отношение
- •Схема базы данных
- •База данных
- •Операции реляционной алгебры
- •Унарные операции
- •Бинарные операции
- •Варианты операции соединения
- •Производные операции
- •Пример построения выражения реляционной алгебры
- •Понятие базовых и виртуальных отношений
- •Понятие полноты реляционной алгебры
- •Формирование запросов на языке SQL
- •Металингвистические символы
- •Реализация операций реляционной алгебры
- •Пример использования подзапросов
- •Группирующие запросы
- •Упорядочение результатов
- •Вопросы для самоконтроля
- •Упражнения
- •Построение выражений реляционной алгебры
- •Модуль 2
- •Базовые и виртуальные отношения
- •Типы данных
- •Базовые типы данных
- •Типы данных, определяемые пользователем
- •Первичные и кандидатные ключи
- •Создание базовых отношений
- •Индексы
- •Модификация базовых отношений
- •Вставка строк
- •Обновление строк
- •Удаление строк
- •Целостность
- •Декларативная поддержка
- •Пример декларативной поддержки целостности
- •Транзакции и блокировки
- •Триггеры
- •Виртуальные отношения
- •Вопросы для самоконтроля
- •Упражнения
- •Декларативная поддержка целостности
- •Модуль 3
- •Нормальные формы
- •Функциональные зависимости (ФЗ)
- •Правила вывода Армстронга
- •Производные правила вывода
- •Независимость правил Армстронга
- •Полнота системы правил Армстронга
- •Нормальные формы
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
- •Пример построения нормализованных схем отношений
- •Вопросы для самоконтроля
- •Модуль 4
- •Проектирование схем баз данных
- •Уровни логической модели
- •Миграция ключей и виды связей
- •Классификация кластеров
- •Иерархическая рекурсия
- •Абстрактная схема
- •Обобщения
- •Пример реализации иерархической рекурсии
- •Сетевая рекурсия
- •Абстрактная схема
- •Сетевая реализация иерархической рекурсии
- •Обобщения
- •Пример реализации сетевой рекурсии
- •Ассоциация
- •Детализация связей многие-ко-многим
- •Обобщения
- •Пример реализации ассоциации
- •Обобщение
- •Абстрактная схема
- •Пример реализации обобщения
- •Композиция
- •Абстрактная схема
- •Пример реализации композиции
- •Агрегация
- •Абстрактная схема
- •Пример реализации агрегации
- •Унификация атрибутов
- •Вопросы для самоконтроля
- •Упражнения
- •Иерархическая рекурсия
- •Сетевая рекурсия
- •Ассоциация
- •Обобщение
- •Композиция
- •Агрегация
- •Дополнительные главы
- •Технологии баз данных
- •Информационные системы
- •Жизненный цикл ИС
- •СУБД и БД
- •Жизненный цикл БД и средства проектирования
- •Модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Постреляционная модель данных
- •Объектно-ориентированные модели данных
- •XML как модель данных
- •Многомерная модель данных (OLAP)
- •Основные функции СУБД
- •Управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация и восстановление БД после сбоев
- •Поддержка языков баз данных
- •Типовая организация СУБД
- •Модели взаимодействия с БД
- •Модель с централизованной архитектурой
- •Модель с автономными персональными компьютерами
- •Архитектура «файл-сервер»
- •Архитектура «клиент-сервер»
- •Архитектура «клиент-сервер» трехзвенная
- •Распределенные базы данных
- •Технология тиражирования данных
- •Понятие «фрактал»
- •Геометрические фракталы
- •Алгебраические фракталы
- •Стохастические фракталы
- •Системы итерируемых функций
- •Вопросы для самоконтроля
- •Литература
- •Список иллюстраций
- •Список таблиц
Базовое отношение может быть удалено с помощью оператора
drop table имя_базового_отношения
3.4. Индексы
Создание ключей (в развитых СУБД автоматически) связано с созданием индексов.
Простой или составной индекс для подсхемы из одного или нескольких атрибутов – это системная структура данных, в которой (по крайней мере, на логическом уровне) размещается упорядоченный перечень значений индекса со ссылками на те кортежи базового отношения, в которых эти значения встречаются.
Индексы могут быть уникальными и неуникальными, как показано в табл. 3.2 на примере паспортных данных (№ П – номер паспорта, Ф – фамилия).
|
|
|
Таблица 3.2.: Индексы |
|
|
|
|
|
|
|
||||||||
|
Паспортные данные |
|
|
|
Индекс № П |
|
|
|
Индекс Ф |
|
||||||||
|
|
|
|
|
|
|||||||||||||
№ |
№ П |
|
Ф |
|
... |
|
|
|
№ П |
|
№ |
|
|
|
Ф |
|
№ |
|
|
|
|
|
|
|
|
|
|
|
|||||||||
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
300000 |
|
Петров |
|
|
|
|
|
100000 |
|
2 |
|
|
|
null |
|
2 |
|
|
2 |
100000 |
|
null |
|
|
|
|
|
200000 |
|
4 |
|
|
|
Иванов |
|
4 |
|
3 |
400000 |
|
Петров |
|
|
|
|
|
300000 |
|
1 |
|
|
|
Петров |
|
1, 3 |
|
4 |
200000 |
|
Иванов |
|
|
|
|
|
400000 |
|
3 |
|
|
|
|
|
|
|
Здесь предполагается, что атрибут № П – первичный ключ. Поэтому индекс для него является уникальным. Индекс атрибута Ф является неуникальным.
Представим себе, что по заданному номеру паспорта требуется найти соответствующие паспортные данные (левая таблица, миллион записей). Последовательный просмотр записей этой таблицы может привести к миллиону сравнений. Но в данном случае имеется структура Индекс № П. В ней имеется упорядоченный список номеров паспортов с указанием на номера записей, содержащих соответствующие паспортные данные. Поэтому можно применить алгоритм дихотомического поиска заданного номера паспорта по упорядоченному списку номеров паспортов структуры Индекс № П, а затем, если запись найдена, по найденному из структуры номеру записи прямым доступом выбрать данные из паспортных данных. Такой дихотомический поиск значения индекса в миллионе кортежей будет реализован в СУБД за двадцать итераций:
106 = (103)2 (210)2 = 220
Индексы могут создаваться безотносительно к ключам для поддержки производительности операций сортировки и поиска. Создание индексов не предусмотрено стандартом SQL, однако большинство диалектов языка поддерживают как минимум следующие операторы создания и удаления индексов:
create [unique] index имя_индекса
on имя_базового_отношения(имя_атрибута,..)
drop index {имя_базового_отношения.имя_индекса},..
Имя индекса должно быть уникально в пределах отношения. Поэтому в операторе удаления ин-