- •1 Основные понятия и определения
- •1.1Информационные системы и банки данных
- •1.2Назначение и основные компоненты банка данных
- •1.3Трех уровневая архитектура абстракций базы данных.
- •1.4Физическая и логическая независимость данных
- •1.5Администратор базы данных
- •1.6Системы управления базами данных
- •1.7Схема обмена данными при работе с базой данных
- •1.8Локальные информационные системы
- •1.9Информационные системы в сетях
- •2Модели данных концептуального уровня
- •2.1Иерархическая модель данных
- •2.2Сетевая модель
- •2.3Реляционная модель
- •2.4Постреляционная модель
- •2.5Многомерная модель
- •2.6Объектно-ориентированная модель
- •3Физические модели баз данных
- •3.1Файловые структуры, используемые в базах данных
- •3.2 Хешированные файлы
- •3.2.1Стратегия разрешения коллизий с областью переполнения
- •3.2.2Организация стратегии свободного замещения
- •3.3Индексные файлы
- •3.3.1Файлы с плотным индексом, или индексно-прямые файлы
- •3.3.2Файлы с неплотным индексом, или индексно-последовательные файлы
- •3.3.3Организация индексов в виде b-tree (в-деревьев)
- •3.4Моделирование отношений «один-ко-многим» на файловых структурах
- •3.5Инвертированные списки
- •3.6Модели бесфайловой организации данных
- •4Реляционная модель данных
- •4.1Основные определения
- •4.2Соглашения об отношениях в реляционных системах
- •4.3Классы отношений
- •4.3.1Классы отношений с точки зрения способов создания и хранения
- •4.3.2Классификация отношений с точки зрения их содержания
- •4.4Операции реляционной алгебры
- •4.4.1Основные понятия
- •4.4.2Базовые теоретико-множественные операции
- •4.4.3Специальные операции реляционной алгебры
- •4.4.4Связи между отношениями (таблицами)
- •4.5Реляционное исчисление
- •4.6Язык запросов по образцу qbe
- •4.7Структурированный язык запросов sql
- •4.7.1История развития sql
- •4.7.2Общая характеристика языка
- •4.7.3Структура sql
- •4.7.4Оператор выбора select
- •4.7.5Применение агрегатных функций и группировки
- •4.7.6Раздел order by и ключевое слово top
- •4.7.7Вложенные запросы
- •4.7.8Внутренние и внешние объединения
- •4.7.9Перекрестные запросы
- •4.7.10Операторы манипулирования данными
- •4.7.11Запросы на создание таблиц
- •4.7.12Использование языка определения данных
- •4.8Правила Кодда (требования к реляционным бд)
- •5Проектирование баз данных
- •5.1Этапы проектирования бд
- •5.2Проблемы проектирования реляционных баз данных
- •5.3Нормализация отношений
- •5.4Метод сущность-связь
- •5.5Средства автоматизации проектирования
- •5.5.1Основные определения
- •5.5.2Модели жизненного цикла
- •5.5.3Модели структурного проектирования
- •5.5.4Объектно-ориентированные модели
- •5.5.5 Классификация case-средств
- •6Защита информации в базах данных
- •6.1Общие подходы к обеспечению безопасности данных
- •6.2Назначение и проверка полномочий, проверка подлинности
- •6.3Средства защиты базы данных
- •7Базы данных в сетях
- •7.1Организация базы данных в локальной сети
- •7.2Модели архитектуры клиент-сервер
- •7.3Управление распределенными данными
- •8История развития баз данных
3.5Инвертированные списки
До сих пор рассматривались структуры данных, которые использовались для ускорения доступа по первичному ключу. Однако достаточно часто в базах данных требуется проводить операции доступа по вторичным ключам. Вторичным ключом является набор атрибутов, которому соответствует набор искомых записей. Это означает, что существует множество записей, имеющих одинаковые значения вторичного ключа.
Для обеспечения доступа по вторичным ключам используются структуры, называемые инвертированными списками, которые послужили основой организации – индексных файлов для доступа по вторичным ключам.
Инвертированный список в общем случае – это двухуровневая индексная структура. Здесь на первом уровне находится файл или часть файла, в которой упорядоченно расположены значения вторичных ключей. Каждая запись с вторичным ключом имеет ссылку на номер первого блока в цепочке блоков, содержащих номера записей с заданным значением вторичного ключа. На втором уровне находится цепочка блоков, содержащих номера записей, имеющих одно и то же значение вторичного ключа. При этом блоки второго уровня упорядочены по значениям вторичного ключа. И наконец, на третьем уровне находится собственно основной файл.
Механизм доступа к записям по вторичному ключу при подобной организации состоит в следующем:
на первом шаге в области первого уровня ищут заданное значение вторичного ключа;
на втором шаге по ссылке считывают блоки второго уровня, содержащие номера записей с заданным значением вторичного ключа;
на третьем шаге прямым доступом считывают из основного файла содержимое всех записей с заданным значением вторичного ключа.
На рис. 5.6 представлен пример инвертированного списка, составленного для вторичного ключа Шифр группы. Для более наглядного представления ограничим размер блока пятью записями.
Для одного основного файла может быть создано несколько инвертированных списков по разным вторичным ключам. Организация вторичных списков позволяет ускорить поиск записей с заданным значением вторичного ключа.
Рассмотрим модификацию основного файла. При модификации основного файла происходит следующее:
изменяется запись основного файла;
исключается старая ссылка на предыдущее значение вторичного ключа;
добавляется новая ссылка на новое значение вторичного ключа.
Два последних шага выполняются для всех вторичных ключей, по которым созданы инвертированные списки. Такой процесс требует гораздо больше временных затрат, чем просто изменение содержимого записи основного файла без поддержки всех инвертированных списков.
1 уровень |
|
II уровень |
|
|
|||
|
Номер блока |
|
Блок 1 |
|
Номер записи |
Фамилия |
Шифр группы |
|
1 |
|
1 |
|
1 |
Арнаутов А. |
АИ41 |
|
2 |
|
3 |
|
2 |
Васильев А. |
АИ42 |
|
|
|
4 |
|
3 |
Баландин М. |
АИ41 |
|
|
|
6 |
|
4 |
Бережной К. |
АИ41 |
|
|
|
10 |
|
5 |
Гармашов Р. |
АИ42 |
|
|
|
|
|
6 |
Духанин А. |
АИ41 |
|
|
|
Блок 2 |
|
7 |
Трухачев А. |
АИ42 |
|
|
|
2 |
|
8 |
Кротков А. |
АИ42 |
|
|
|
5 |
|
9 |
Старых И. |
АИ42 |
|
|
|
7 |
|
10 |
Попова А. |
АИ41 |
|
|
|
8 |
|
|
|
|
|
|
|
9 |
|
|
|
|
Рис 5.6. Построение инвертированного списка по шифру группы
Поэтому не следует безусловно утверждать, что введение индексных файлов (в том числе и инвертированных списков) всегда ускоряет обработку информации в базе данных. Если база данных постоянно изменяется, дополняется, модифицируется содержимое записей, то наличие большого количества инвертированных списков или индексных файлов по вторичным ключам может резко замедлить процесс обработки информации.
Можно придерживаться следующей позиции: если база данных достаточно стабильна и ее содержимое практически не меняется, то построение вторичных индексов действительно может ускорить процесс обработки информации.

Ключ
АИ41
АИ42