
- •1. Введение в курс
- •1.1. Введение в базы данных, содержание и цели курса, основные понятия
- •1.1.1. О чём этот курс
- •1.1.2. Основные определения
- •1.1.3. Способы организации знаний в базах знаний
- •1.1.4. Применение баз знаний
- •1.1.5. Виды моделей баз данных
- •2. Теория баз данных
- •2.1. История развития представлений о базах данных
- •2.1.1. Области применения вычислительной техники
- •2.1.2. Базы данных и информационные системы
- •2.1.3. История развития баз данных
- •2.1.4. Этапы развития баз данных
- •2.2. Основные термины и определения теории бд, виды бд и их отличия
- •2.2.1. Классификация бд
- •2.3. Реляционные бд, понятие сущности и связи
- •2.3.1. Общие определения
- •2.3.2. Факты о реляционной модели данных
- •2.3.3. Достоинства реляционной модели данных
- •2.3.4. Недостатки реляционной модели данных
- •2.3.5. Целостность бд
- •2.3.6. Отношения
- •2.3.7. Кортежи и отношения
- •2.3.8. Связи
- •2.3.9. Ключи отношений
- •2.3.10. Ссылочная целостность
- •2.3.11. Консистентность данных
- •2.4. Многоуровневая архитектура баз данных, понятие физического и логического уровней баз данных
- •2.4.1. Определения
- •2.4.2. Многоуровневая структура баз данных
- •2.4.3. Постоянная и переменная длина записи
- •2.4.4. Способы представления данных
- •2.4.5. Простейший вариант – плоский файл
- •2.4.6. Факторизация по значениям поля
- •2.4.7. Индексирование по полям
- •2.4.8. Комбинация простых представлений
- •2.4.9. Использование цепочек указателей
- •2.4.10. Многосписочные структуры
- •2.4.11. Инвертированная организация
- •2.4.12. Иерархическая организация
- •2.4.14. Промежуточный итог
- •2.4.15. Методы индексирования
- •2.4.16. Индексирование по комбинации полей
- •2.4.17. Селективный индекс
- •2.4.18. Индексация по методу сжатия
- •2.4.19. Фронтальное сжатие
- •2.4.20. Сжатие окончания
- •2.4.21. Символьные указатели
- •2.4.23. Индексно-последовательная организация
- •2.4.24. Сбалансированные деревья
- •2.4.25. Ведение файла
- •2.4.26. Хэширование
- •2.4.28. Итог
- •2.5. Алгоритмы хэширования
- •2.5.1. Введение
- •2.5.2. Хэширование
- •2.5.2. Факторы эффективности хэширования
- •2.5.3. Размер участка памяти
- •2.5.4. Плотность заполнения
- •2.5.5. Алгоритмы хэширования
- •2.5.6. Размещение записей в области переполнения
- •2.5.7. Итог
- •2.6. Механизмы обработки и хранения данных в бд
- •2.6.1. Введение
- •2.6.2. Механизмы обработки и хранения данных в ms-sql 6.0-6.5
- •2.6.3. Механизмы обработки и хранения данных в ms-sql 7.0 и более поздних версиях
- •2.6.4. Метод доступа isam
- •2.6.5. Метод доспута MyIsam
- •2.6.6. Метод доступа vsam
- •2.6.7. Включение записей в *sam-файлы
- •2.6.8. Размещение индексов для *sam-файлов
- •2.6.9. Метод доступа InnoDb
- •2.6.10. Итог
- •2.7. Физическое представление древовидных и сетевых структур
- •2.7.1. Введение
- •2.7.2. Древовидные структуры
- •2.7.3. Сетевые структуры
- •2.7.4. Итог
- •3.1.4. Стандарты разработки бд/субд
- •3.1.5. Sql и его стандарты
- •Часть 1 – sql/Структура (sql/Framework) – определяет общие требования соответствия и фундаментальные понятия sql.
- •3.1.6. Использование методологии idef1x
- •3.1.7. Пример логической и физической схемы в ErWin
- •3.1.8. Минимальный набор стандартных таблиц
- •3.1.8. Итог
- •3.2. Средства автоматизированного проектирования бд
- •3.2.1. Введение
- •3.2.2. Case-технологии
- •3.2.3. Достоинства case-технологий
- •3.2.4. Промежуточные выводы и определения
- •3.2.5. Методологии структурного моделирования
- •3.2.6. Методология sadt (idef0)
- •3.2.7. Методологии информационного моделирования
- •3.2.8. Нотация Чена
- •3.2.9. Нотация Мартина
- •3.2.10. Нотация ide1x
- •3.2.11. Нотация Баркера
- •3.2.12. Язык информационного моделирования
- •3.2.13. Case-средства
- •3.2.14. Процесс создания модели бд в ErWin
- •3.2.15. Процесс создания модели бд в Sparx ea
- •3.2.16. Итог
- •3.3. Особенности проектирования бд на логическом и физическом уровнях
- •3.3.1. Введение
- •3.3.2. Модель бд
- •3.3.4. Банки данных
- •3.3.5. Модели данных
- •3.3.6. Этапы проектирования бд
- •3.3.7. Проектирование бд: внешний уровень
- •3.3.8. Проектирование бд: инфологический уровень
- •3.3.9. Проектирование бд: даталогический уровень
- •3.3.10. Уровни sql
- •3.3.11. Проектирование бд: физический уровень
- •3.3.12. Итог
- •3.4. Прямое и обратное проектирование бд
- •3.4.1. Введение
- •3.4.2. Понятие нормализации
- •3.4.3. Требования нормализации
- •3.4.4. Примеры аномалий
- •3.4.5. Нормальные формы
- •3.4.6. Зависимости
- •3.4.6. Первая нормальная форма
- •3.4.7. Вторая нормальная форма
- •3.4.8. Третья нормальная форма
- •3.4.9. Нормальная форма Бойса-Кодда
- •3.4.10. Четвёртая нормальная форма
- •3.4.11. Пятая нормальная форма
- •3.4.12. Доменно-ключевая нормальная форма
- •3.4.13. Ещё раз, кратко, все нормальные формы
- •3.4.14. Ещё раз, кратко, в ErWin
- •3.5.2. Показатели качества бд
- •3.5.3. Итог
2.5.4. Плотность заполнения
Число записей, направляемых в область переполнения, зависит от плотности заполнения первичных участков памяти: чем выше плотность заполнения первичных участков, тем выше вероятность того, что вновь поступающие записи будут направлены в область переполнения.
Мы можем изменять время доступа и объём памяти, затрачиваемый на хранение файла, задавая то или иное значение плотности заполнения основной области.
Сделав допущение о том, что алгоритм преобразования ключа в адрес направляет записи в участки случайным образом, можно найти зависимость числа записей, попадающих в область переполнения, от плотности заполнения основной области.
Мы должны выбирать алгоритм преобразования ключа в адрес таким образом, чтобы обеспечить оптимальное заполнение участков.
Если для хранения файла используется устройство с большим временем доступа, целесообразно сократить число обращений при поиске записей.
С этой целью можно снизить среднее число записей в области переполнения до 1%.
2.5.5. Алгоритмы хэширования
Процедура преобразования ключа в адрес (алгоритм хэширования) обычно выполняется в три этапа.
Если ключ не цифровой, он преобразуется в соответствующее цифровое представление таким образом, чтобы, исключить потерю информации, содержащейся в ключе. Например, буквенные знаки должны переводиться в цифровой код; допускается также представление символьного ключа в виде строки битов.
Ключи (в цифровом или битовом представлении) преобразуются в совокупность произвольно распределённых чисел, значения которых имеют тот же порядок, что и значения адресов основной области памяти. Желательно, чтобы набор ключей был распределён как можно равномернее в диапазоне, переводимом в допустимые адреса.
Полученные числа умножаются на константу, что позволяет разместить их строго в диапазоне значений адресов основной области. Например, пусть в результате выполнения этапа 2 мы получаем четырёхзначные числа, а в основной области имеется 7000 пакетов. Тогда четырёхзначные числа следует умножать на 0.7, что позволит распределить получаемые адреса в интервале от 0000 до 6999. Этот относительный номер участка преобразуется в машинный адрес участка.
Разработано множество различных алгоритмов, используемых на этапе 2, для преобразования ключа в адрес.
Желательно, чтобы величины, получаемые на выходе этапа 2, были распределены как можно более равномерно. В действительности же существующие алгоритмы не обеспечивают равномерности получаемого распределения, что приводит к направлению многих записей в область переполнения. Ниже рассмотрены некоторые из алгоритмов.
Метод квадратов
Ключ возводится в квадрат. После этого из полученного результата выделяется число, состоящее из центральных цифр.
Для получения номера участка достаточно умножить полученное число на соответствующую константу (в примере, рассмотренном выше, эта константа равна 0.7).
Умножение на константу обеспечивает выравнивание адреса в соответствии с размером основной области.
Например, пусть ключ записей состоит из шести цифр, а число участков в основной области равно 7000. Если ключ записи равен 172 148, то его квадрат равен 029 634 933 904. Четыре центральные цифры составляют число 3493. Номер участка равен 3493*0.7=2445.
Деление
Данный метод, в основе которого лежит обычное деление чисел, даёт лучшие результаты, чем метод квадратов. Ключ делится на число, равное числу участков в основной области или близкое к нему. Делитель должен быть простым числом или числом, которое не содержит небольших сомножителей. Остаток от деления и даёт относительный адрес участка.
Например, если число участков равно 7000, то в качестве делителя можно использовать число 6997. Пусть ключ записи равен 172 148. Остаток от деления 172 148 на 6997, равный 4220, будет взят в качестве относительного адреса участка, в который направляется запись с ключом 172 148.
При использовании данного метода в область переполнения направляется меньшее число записей. Одна из причин этого заключается в том, что ключи часто задаются в определенной последовательности (например, возрастающей). Тогда и остатки от деления на число (например, на 6997) также будут иметь соответствующую последовательность, что обеспечит равномерное заполнение участков.
Сдвиг разрядов
Все разряды числа, являющегося ключом, разбиваются на две части: старшие и младшие разряды. Обе эти части сдвигаются по направлению друг к другу так, чтобы число перекрывающихся разрядов соответствовало длине адреса.
Цифры, содержащиеся в перекрывающихся разрядах, суммируются, и результат, как и в первом методе, выравнивается в соответствии с диапазоном адресов участков.
Рассмотрим рисунок…
Рисунок 2.5.5.1 – Сдвиг разрядов
Складывание
Ключ разбивается на три части, средняя из которых равна длине адреса. Первая и третья части налагаются на вторую подобно тому, как складывается втрое лист бумаги; цифры суммируются, и результат, как и в предыдущем методе, выравнивается в соответствии с размером основной области. Этот метод наиболее удобен для преобразования больших ключей.
Рассмотрим на рисунке…
Рисунок 2.5.5.1 – Складывание
Анализ отдельных разрядов ключа
Для достижения равномерного распределения адресов участков можно использовать анализ распределения значений чисел и символов в каждом ключе.
Выбросив из ключа разряды, имеющие распределение, сильно отличающееся от равномерного, и преобразуя только оставшиеся разряды, мы сможем достичь более равномерного распределения адресов на выходе алгоритма перемешивания.
Преобразование основания системы счисления
После преобразования системы счисления выделяются младшие разряды числа.
Рассмотрим пример (перевод в 11-ричную систему счисления). Пусть ключ равен 172 148. Тогда
1*11^5+7*11^4+2*11^3+1*11^2+4*11^1+8 = 266 373
Младшие разряды: 6373.
Выравнивание адреса: 6373*0.7 = 4461
Метод Лина
В данном методе осуществляется представление ключа в системе счисления с основанием р, после чего осуществляется деление результата по модулю q, где р и q – простые числа (или числа, не содержащие небольших множителей).
Рассмотрим пример. Ключ 172 148 поразрядно преобразуется в двоичную строку: 0001 0111 0010 0001 0100 1000.
После этого осуществляется перегруппировка строки по три разряда: 000 101 110 010 000 101 001 000=05 620 510.
Затем осуществляется деление числа 05 620 510 на константу q по правилам деления десятичных чисел. Остаток от деления даёт номер участка.
Деление полиномов
Цифра каждого разряда ключа рассматривается как коэффициент полинома.
Например, ключ 172 148 может быть представлен полиномом
1x^5+7x^4+2x^3+1x^2+4x^1+8x^0
Затем этот полином делится на некоторый заранее выбранный и неизменяемый полином.
Коэффициенты полинома – остатка от деления – образуют число, которое является относительным адресом участка.