- •Глава 1. Базы данных и системы управления 9
- •Глава 2. Организация доступа к данным 45
- •Глава 3. Реляционная алгебра 60
- •Глава 4. Основы sql 67
- •Глава 5. Проектирование реляционных баз данных 89
- •Глава 6. Взаимодействие sql с приложениями 116
- •Глава 7. Некоторые проблемы администрирования баз данных 154
- •Базы данных и системы управления
- •Файловые системы
- •Концепция баз данных
- •Основные функции субд
- •Непосредственное управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация
- •Поддержка языков баз данных
- •Трехуровневая модель архитектуры систем баз данных
- •Модели данных
- •Характеристика связей
- •Компьютерно-ориентированные модели данных
- •Реляционный подход
- •Ключи и целостность реляционных данных
- •Моделирование концептуальной схемы базы данных
- •Организация доступа к данным
- •Страницы и файлы
- •Индексирование
- •Структуры типа б-дерева
- •Хеширование
- •Методы сжатия
- •Метод дифференциального сжатия
- •Иерархические методы сжатия
- •Кодирование по методу Хаффмена
- •Реляционная алгебра
- •Традиционные реляционные операции
- •Специальные реляционные операции
- •Дополнительные реляционные операции
- •Примеры использования реляционной алгебры для выражения словесных запросов в виде формул
- •Основы sql
- •Типы данных
- •Строковые типы данных
- •Битовые типы данных
- •Точные числовые типы данных
- •Вещественные числовые типы данных
- •Календарные типы данных
- •Значения null
- •Создание и обслуживание таблиц
- •Запрос на выборку
- •Статистические функции
- •Создание соединений
- •Вложенные запросы
- •Запрос на объединение
- •Запросы, выполняющие реляционные операции вычитания, пересечения и деления
- •Запросы на изменение
- •Перекрестные запросы
- •Проектирование реляционных баз данных
- •Нормализация отношений
- •Функциональные зависимости
- •Н ормальные формы, обоснованные функциональными зависимостями
- •Нормальная форма Бойса–Кодда
- •Нормальные формы, обоснованные более сложными зависимостями
- •Процедура нормализации и проектирования
- •Пример проектирования базы данных
- •Назначение и предметная область
- •Проектирование базы данных
- •Взаимодействие sql с приложениями
- •Встраивание sql-операторов в программный код
- •Тип курсора
- •Триггеры
- •Хранимые процедуры
- •Стандартные интерфейсы для доступа к данным
- •Информационное окружение веб-сервера
- •Стандарт odbc
- •Уровни соответствия
- •Уровень соответствия odbc
- •Задание имени источника данных odbc
- •Расширяемый язык разметки xml
- •Xml как язык разметки
- •Материализация хмl-документов с помощью xslt
- •Создание хмl-документов на основе информации из базы данных
- •Некоторые проблемы администрирования баз данных
- •Оптимизация запросов
- •Параллельная обработка данных
- •Потеря обновления
- •Зависимость от незафиксированных обновлений
- •Несогласованный анализ
- •Блокировки транзакций
- •Согласованность и уровень изоляции транзакций
- •Распределенные системы баз данных
- •Фрагментация
- •Репликация
- •Распространение обновлений
- •Управление каталогом
- •Распределенная обработка запросов
- •Типы распределенных систем баз данных
- •Нераспределенные мультибазовые субд
- •Клиент-серверные системы
- •Системы с общими ресурсами
- •Технические аспекты администрирования базы данных
- •Восстановление базы данных
- •Безопасность баз данных
- •Шифрование данных
- •Производительность баз данных
- •Администрирование данных
- •Литература
Иерархические методы сжатия
Предположим, что рассматриваемый файл упорядочен физически (т.е. кластеризован) по значениям некоторого поля F, и допустим также, что каждое отдельное значение F встречается в нескольких подряд идущих записях этого файла. Например, файл поставщиков может быть кластеризован по значениям поля города; в этом случае будут храниться вместе данные обо всех поставщиках из Бреста, Минска и т.д. В такой ситуации может оказаться, что множество всех записей поставщиков, относящихся к конкретному городу, целесообразно представить в сжатом виде как одну иерархическую запись, в которой название рассматриваемого города представлено только один раз, а за ним следует информация о номере, имени и статусе для каждого поставщика, который в данное время находится в этом городе.
Брест П1 Волк 20 П5 Бык 30
Гродно П3 Лев 30
Минск П2 Заяц 10 П2 Лиса 20
Иерархические записи состоят из постоянной части (города) и повторяющейся группы.
Иерархическое сжатие по принципу, описанному выше, чаще всего является наиболее подходящим для индекса, в котором набор подряд идущих элементов имеет одинаковое значение данных (но разные значения указателей).
Очевидно, что иерархическое сжатие в той форме, которая здесь описана, применимо, только если файл организован по принципу внутрифайловой кластеризации. Но аналогичного рода сжатие может также применяться и в случае межфайловой кластеризации. Предположим, что кластеризованы данные о поставщиках и поставках. Это означает, что данные о поставках поставщика П1 непосредственно следуют за записью с данными о поставщике П1, данные о поставках поставщика П2 – за данными о поставщике П2 и т.д. А именно, предположим, что информация о поставщике П1 и поставках поставщика П1 хранится на странице p1, информация о поставщике П2 и поставках поставщика П2 – на странице р2 и т.д. В таком случае может быть применен метод межфайлового сжатия:
П
Страница р1
П1 Волк 20 Брест
Пр2 Д3 300 Пр2
Д4 100 Пр3 Д1 50
Страница р2
П2 Заяц 10 Минск
Пр1 Д3 200 Пр2
Д4 200 Пр5 Д1 150 Пр7 Д2 220
Кодирование по методу Хаффмена
Кодирование по методу Хаффмена (Huffman coding) представляет собой метод символьного кодирования, который позволяет в принципе достичь значительной степени сжатия данных, если в них различные символы встречаются с разными частотами (что обычно и происходит на практике). Основная его идея состоит в следующем: используется кодирование с применением битовых строк для представления символов таким образом, что разные символы заменяются битовыми строками различной длины, причем наиболее часто встречающиеся символы заменяются самыми короткими строками. Кроме того, ни одному символу не поставлен в соответствие такой код (длиной, скажем, n битов), что эти n битов идентичны первым n битам кода какого-то другого символа.
В качестве примера предположим, что в кодируемых данных встречаются только символы А, В, С, D и Е, а также допустим, что относительная частота появления этих пяти символов соответствует приведенным в таблице:
Символ |
E |
A |
D |
C |
B |
Частота |
35% |
30% |
20% |
10% |
5% |
Код |
1 |
01 |
001 |
0001 |
0000 |
Символ Е имеет максимальную частоту и потому ему присваивается самый короткий код, состоящий из одного бита, скажем, 1. Поэтому все другие коды должны начинаться с 0 и иметь длину не меньше 2 битов (единственный 0 нельзя использовать в качестве кода, поскольку его невозможно будет отличить от начальной части любого другого кода). Символу А присваивается код с длиной на единицу больше по сравнению с самым коротким кодом, скажем, 01, символам D, С и B присваиваются коды, соответственно, 001, 0001 и 0000.
Упражнение. Какие английские слова закодированы в приведенных ниже строках?
00110001010011
010001000110011
Ответ: (DECADE) и (ACCEDE)
При использовании приведенных здесь значений кодов ожидаемая средняя длина закодированного символа в битах выражается следующим значением:
0,351 + 0,302 + 0,203 + 0,104 + 0,054 = 2,15 битов
Если бы каждому символу было назначено одинаковое количество битов, как в обычной схеме кодирования символов, то потребовалось бы 3 бита в расчете на символ (чтобы можно было охватить все эти пять вариантов).