- •Определение базы данных, отличие бд от других информац. Систем
- •Категории бд, физич и логический уровни
- •Ограничение целостности на данные
- •Неизбыточность и непротиворечивость данных
- •Защита от программных и аппаратных сбоев
- •Принцип независимых данных. Технологическая основа его реализации.
- •Системы управления базой данных субд и её структура
- •Последовательность обработки данных в субд при выполнении запроса
- •Языковые средства работы с бд
- •Элементы данных. Определение свойства и примеры
- •Характеристика типов связей. Избыточная связь. Правила склейки
- •Древовидные модели данных, определение и примеры
- •Зависимость данных от структуры
- •Сетевые модели данных. Преобразование сложных сетевых моделей к простым сетевым и древовидным
- •Общие данные, данные пересечения, изолированные данные
- •Определение реляционной модели данных
- •Преобразование древовидной и сетевой схемы бд к реляционному виду. Преимущество реляционных бд .
- •Бинарные базисные операции реляционной алгебры и их эквиваленты в sql
- •Унарные базисные операции ра и их эквиваленты в sql
- •Дополнительный набор операций ра и их выражение через базисный набор.
- •Свойства операций ра и формальная оптимизация запросов.
- •Аномалии представления данных
- •Определение функциональной зависимости (фз) и её свойства
- •Правила для фз. Замыкание множества (фз). Первичный ключ
- •Декомпозиция отношений и свойства декомпозиций.
- •Вторая нормальная форма. Правила построения и преимущества.
- •Третья нормальная форма. Правила и построения преимущества.
- •Синтез схемы бд. Проблемы обобщенного ключа
- •Факторы, влияющие на выбор физической организации бд
- •Классификация методов доступа
- •Структура данных в индексно-последовательный метод доступа. Преимущества и недостатки при операциях.
- •Отведенное свободное пространство и область переполнения
- •Методы хеширования.
- •Обработка переполнений в методах хеширования.
- •Определение и структура в-дерева. Поиск и в-дереве
- •Дополнение записи в в-дерево.
- •Удаление записи в в-дереве.
- •Мультисписок: структура и поиск записи.
- •Инвертированный файл: структура и поиск записей.
-
Определение и структура в-дерева. Поиск и в-дереве
Б-дерево – иерархическая структура индексированного файла, состоящая из узлов- блоков фиксированной длины.
Физической организация Б-дерева – мультисписочная структура страниц внешней памяти, то есть каждому узлу дерева соответствует блок внешней памяти (страница).
Свойства Б-дерева
Сбалансированность – длина любых двух путей от корня до листьев совпадает.
Ветвистость дерева – у каждого узла дерева большое число узлов-потомков.
Значения ключей в записях Б-дерева левосторонне упорядочены.
Структура:
<ключ> <ссылка на основной файл> <ссылка на блок потомок>
Каждый узел содержит хотя бы один ключ. Ключи в каждом узле упорядочены. Корень содержит от 1 до 2t-1 ключей. Любой другой узел содержит от t-1 до 2t-1 ключей (t >= 2 – параметр дерева). У листьев потомков нет. Глубина всех листьев одинакова.
Поиск в Б-дереве: Если ключ содержится в корне, он найден. Иначе определяем интервал и идём к соответствующему потомку. Повторять, пока не найден результат или не дошли до листа. Если лист, то не найдено.
-
Дополнение записи в в-дерево.
Процедурой поиска (сверху вниз) определяем лист и место в листе.
Если лист заполнен (т.е. в нем 2t-1 ключей) – разбиваем его на 2 листа по t-1, а средний элемент перемещается в родительский узел. Если он тоже полон – снова разбить.
И так далее до корня идем от целевого листа вверх (если разбивается корень – то появляется новый корень, и глубина дерева увеличивается).
Найденный лист объявляется текущим боком, а новую запись наполняем пустым указателем на потомок. На примере – добавление ключа 15.
-
Удаление записи в в-дереве.
Находим узел, содержащий ключ. Пусть этот узел — x. Если x – лист, удаляем оттуда ключ.
Если в узле x осталось не меньше t-1 ключей – останавливаемся. Пример – удаление ключа 9 из листа.
Иначе смотрим на количество ключей в следующем, а потом в предыдущем узле.
Если следующий узел есть, и в нём не менее t ключей, мы добавляем в x ключ-разделитель между ним и следующим узлом, а на его место ставим первый ключ следующего узла, после чего останавливаемся.
Если это не так, но есть предыдущий узел, и в нём не менее t ключей, мы добавляем в x ключ-разделитель между ним и предыдущим узлом, а на его место ставим последний ключ предыдущего узла, после чего останавливаемся.
Если снова нет – объединяем узел x со следующим или предыдущим узлом, и в объединённый узел перемещаем ключ, разделяющий два узла. При этом в родительском узле может остаться только t-2 ключей.
Тогда, если этот родительский узел – не корень, мы выполняем аналогичную процедуру с ним.
Если мы в результате дошли до корня, и в нём осталось от 1 до t-1 ключей, делать ничего не надо, потому что корень может иметь и меньше t-1 ключей.
Если же в корне не осталось ни одного ключа, исключаем корневой узел, а его единственный потомок делаем новым корнем дерева.