- •1. Определение информации. Основные проблемы, возникающие при хранении информации.
- •2. Отличительные особенности субд как программного продукта. Понятие экземпляра и базы данных.
- •3. Категории пользователей субд. Функциональные требования различных категорий пользователей к субд.
- •4. История развития субд. Особенности не реляционных моделей данных.
- •5. Общая характеристика моделей данных. Основные свойства. Понятие атрибутов, доменов.
- •6. Отношения модели данных. Понятия сущности и связи.
- •7. Ограничение целостности модели данных. Трехуровневая архитектура ansi/sparc.
- •8. Структурные компоненты модели данных в нотации idef1x. Понятия сущность, связь. Типы сущностей и связей.
- •9. Реляционная модель данных. Базовые структурные компоненты реляционной модели данных. Основные свойства.
- •10. Свойства реляционной модели данных. Представление сущности.
- •11. Свойства реляционной модели данных. Представление связи.
- •12. Требования целостности в реляционной модели данных.
- •13. Язык определения данных в реляционной модели данных. Основные возможности. Примеры.
- •14. Типы ограничений целостности, основные типы данных, основные операции реляционной модели данных.
- •15. Проектирование реляционных баз данных. Цели проектирования, основные этапы.
- •16. Проектирование реляционных баз данных. Проблемы обновления, удаления, добавления данных. Типы ограничений целостности.
- •17. Функциональная зависимость. Нормализация отношений. Концепция нормальных форм.
- •18. Первая и вторая нормальные форма. Определение. Аномалии, возникающие при нарушении. Примеры нарушения и нормализации.
- •19. Третья нормальная форма. Нормальная форма Бойса-Кодда. Определение. Аномалии, возникающие при нарушении. Примеры нарушения и нормализации.
- •20. Понятие многозначной зависимости. Примеры.
- •21. Четвертая и пятая нормальные формы. Определение. Аномалии, возникающие при нарушении. Примеры нарушения и нормализации.
- •22. Основные свойства sql, как языка программирования. Отличие от других языков программирования.
- •23. Основы построения sql- запросов. Источники данных запроса. Условия выборки кортежей. Примеры.
- •24. Левые, правые и полные соединения. Функции для работы с null значениями. Выборка уникальных записей. Примеры.
- •25. Использование подзапросов. Типы подзапросов. Примеры.
- •26. Коррелированные подзапросы. Особенности использования in, not in,exists, not exists.
- •27. Теоретико-множественные операции в sql-запросах. Примеры.
- •28. Агрегирующие функции. Группировка кортежей. Примеры.
- •29. Представления. Особенности использования. Примеры.
- •30. Триггеры в Transact sql. Пример реализации триггера.
- •31. Курсоры. Основные функции. Правила применения. Примеры.
- •32. Внутренние структуры данных. Двухуровневая система доступа к данным. Отношения каталогов.
- •33. Методы доступа к данным. Бинарные деревья.
- •34. Методы доступа к данным. Многоходовые деревья.
- •35. Методы доступа к данным. Сбалансированные деревья. Структура, правила следования. Основные свойства.
- •36. Операция вставки элемента в в-дерево. Проблема переполнения, методы решения. Пример.
- •37. Операция удаления элемента из в-дерева. Проблема антипереполнения. Методы решения. Пример
- •42. Индекс на основе битовых карт. Основные свойства.
- •43. Индекс на основе битовых карт. Структура листового блока. Операция добавления элемента.
- •44. Индекс на основе битовых карт. Операция обновления элемента. Блокировка записей.
- •45. Методы доступа к данным. Основные операции выполнения sql-выражения.
- •46. Методы доступа к данным. Типы соединений таблиц.
42. Индекс на основе битовых карт. Основные свойства.
Индексы на основе битовых карт (bitmapped indexes) разработаны для ответов на запросы, которые затрагивают столбцы с небольшим числом возможных значений, каждое из которых потенциально соответствует большому числу строк. Число возможных значений для столбца называется кардинальностью (cardinality). В отличие от иерархических индексов, хранящих указатели на строки, используя идентификаторы строк (rowids), индекс на основе битовых карт хранит для каждого возможного значения столбца битовую карту. Основные свойства:
Низкая кардинальность значений колонок. В зависимости от объема данных, процент уникальных значений равный 1%, является хорошим показателем для использования BITMAP индекса
Возможность хранения NULL-значений в рамках одно колоночного индекса. В отличии от B+дерева
BITMAP-индекс
№ строки
№ сотрудника
Фамилия
Пол
Пол/М
Пол/Ж
1
107
Петрова
Ж
0
1
2
108
Иванова
Ж
0
1
3
109
Петров
М
1
0
4
110
Иванов
М
1
0
5
111
Кузнецов
М
1
0
Может быть функциональным
|
|
|
Составной BITMAP-индекс | |||||
№ строки |
№ сотрудника |
Фамилия |
Пол/М |
Пол/Ж |
Город/ Москва |
Город/ Уфа |
Город/ Рязань |
Город/ Иркутск |
1 |
107 |
Петрова |
0 |
1 |
1 |
0 |
0 |
0 |
2 |
108 |
Иванова |
0 |
1 |
0 |
1 |
0 |
0 |
3 |
109 |
Петров |
1 |
0 |
1 |
0 |
0 |
0 |
4 |
110 |
Иванов |
1 |
0 |
0 |
0 |
1 |
0 |
5 |
111 |
Кузнецов |
1 |
0 |
0 |
1 |
0 |
0 |
Индексы на основе битовых карт по двум столбцам таблицы можно эффективно комбинировать, используя булевы операторы AND и OR. Это позволяет использовать их в запросах с множественными условиями, затрагивающими индексированные данным индексом столбцы таблицы. Это дает то преимущество, что вы можете отвечать на очень разнообразные запросы с помощью всего нескольких одностолбцовых индексов на основе битовых карт. Например, предположим, что у нас есть таблица сотрудников, которая содержит имя сотрудника, пол и город (Москва, Уфа, Рязань, Иркутск, и т. п.). Мы хотим получить информацию о женщинах сотрудниках в городе Москва ( SELECT * FROM employee WHERE sex = ‘Ж’ AND city = ‘Москва’)
Структура листового блока. В индексе на основе битовых карт каждая запись состоит из набора флагов, байта блокировки и (в данном случае) четырех строк данных. Эти четыре строки, на самом деле:
row#0[8013] flag: -----, lock: 0
col 0; len 2; (2): c1 03
col 1; len 6; (6): 01 00 01 82 00 00
col 2; len 6; (6): 01 00 01 83 00 07
col 3; len 3; (3): 00 с2 44
проиндексированное значение,
2 строки идентификаторов строк задают непрерывную часть таблицы
поток битов говорит, какие строки в этом диапазоне идентификаторов строк содержат соответствующие значение
Операция обновления выполняется через удаление и последующую вставку:
Удаляется старое значение из части битовой карты
Добавляется новое значение части битовой карты
Как минимум 2 части битовой карты вовлечены в процесс каждого обновления
Когда bitmap индексы обновляются:
Должно быть достаточно места в блоке для старых и новых значений
В противном случае блок делится
Что приводит к длинным рядам промежуточных блоков
Когда bitmap индекс обновляется, устанавливается блокировка на запись листового блока Обновляемая запись в листовом блоке может содержать битовую карту, которая охватывает несколько строк в других блоках. Ни одна другая транзакция не может обновлять строку, вовлеченную в процесс обновления другой строкой до завершения транзакции
Когда bitmap индекс обновляется:
Удаляемая строка остается до завершения транзакции
Новая строка записывается в свободное пространство листового блока
Если нет свободного места в текущем блоке, используется новый блок
Элементы в листовых блоках упорядочены
Если обновляется последняя битовая карта в блоке, блок делится
Промежуточные блоки указывают на начало дочерних или листовых блоков
Если изменения касаются конца битовой карты, битовая карта может быть скопирована в промежуточный блок
Пример деления листовых блоков: 8 уникальных значений – разделены на 3000 строк
Выводы
Индекс на основе битовых карт создается достаточно быстро и занимает мало места
Размер и BITMAP индекса существенно зависит от распределения данных
Стоимостной оптимизатор обычно выбирает Bitmap индекс, если можно использовать несколько таких индексов
Операции вставки и удаления столбцов, входящих в состав Bitmap индексов, могут вызывать существенные конфликты и блокировки