Организация типичной СУБД и состав ее компонентов соответствует основным функциям СУБД.
В состав БД как сложной человеко-машинной системы включаются следующие взаимосвязанные и взаимозависимые компоненты:
1. Информационная компонента – базы данных, описание баз данных (схемы), информация о пользователях, информация о предметной области и некоторая другая информация.
Словарь данных (метаинформация) - содержит информацию об объектах, их свойствах, отношениях, сведения о данных, хранимых в БД, их возможные значения, форматы. Словарь используют программисты в процессе описания прикладных программ; пользователи обращаются к словарю для организации запроса к информационной среде. Однако не все СУБД поддерживают словари данных.
2. Программные средства (обеспечение взаимодействия всех частей системы при ее функционировании) – СУБД, операционная система, прикладное программное обеспечение.
3. Языковые средства (обеспечение интерфейса пользователей с банком данных) – языки описания данных, языки манипулирования данными, языки запросов и другие языки.
4. Технические средства – универсальные ЭВМ, периферийные средства для ввода информации в базу данных, периферийные средства для отображения выводимой информации и другие.
5. Организационно-методические средства – инструкции, методические и регламентирующие материалы, предназначенные для пользователей разных категорий, взаимодействующих с банком данных. Администраторы, разработчики, прикладные программисты, пользователи.
Логически в современной СУБД можно выделить наиболее внутреннюю часть - ядро СУБД (часто его называют DataBase Engine), компилятор языка БД, подсистему поддержки времени выполнения, набор утилит. В некоторых системах эти части выделяются явно, в других - нет, но логически такое разделение можно провести во всех СУБД.
Ядро СУБД отвечает за управление данными во внешней памяти, управление буферами оперативной памяти, управление транзакциями и журнализацию. Функции этих компонентов взаимосвязаны, и для обеспечения корректной работы СУБД все эти компоненты должны взаимодействовать по тщательно продуманным и проверенным протоколам. Ядро СУБД обладает собственным интерфейсом, не доступным пользователям напрямую и используемым в программах, в подсистеме поддержки выполнения таких программ, в утилитах БД. Ядро СУБД является основной резидентной частью СУБД.
Основной функцией компилятора языка БД является компиляция операторов языка БД в некоторую выполняемую программу. Результатом компиляции является выполняемая программа, представляемая в некоторых системах в машинных кодах, но более часто в выполняемом внутреннем машинно-независимом коде. В последнем случае реальное выполнение оператора производится с привлечением подсистемы поддержки времени выполнения, представляющей собой, по сути дела, интерпретатор этого внутреннего языка.
В отдельные утилиты БД обычно выделяют такие процедуры, которые слишком накладно выполнять с использованием языка БД, например, загрузка и выгрузка БД, сбор статистики, глобальная проверка целостности БД и т.д. Утилиты программируются с использованием интерфейса ядра СУБД, а иногда даже с проникновением внутрь ядра.
Вопрос 11. Дайте определение понятиям индексирование и хеширование. Проанализируйте использование индексов для ускорения извлечения данных
Во всех существующих СУБД имеется средство, обеспечивающее оптимальный по скорости доступ к данным. Такая надстройка над данными называется индексами базы данных.
Индекс – структура данных, которая помогает СУБД быстрее обнаружить отдельные записи в файле и сократить время выполнения запросов пользователей.
Индекс— это внутренняя, т.е. скрытая от пользователя, таблица, состоящаяиз двух столбцов. Первый содержит значение поля, включенного в индекс, т.е. значение индексируемого поля, второй- указывает местоположение каждой записи таблицы с данным значениеминдексного поля, т.е. адрескаждой записи, имеющей это же значение в индексированном поле. Индекс может содержать значения как одного, так и нескольких полей. В индексной таблице производится упорядочение строк по значениям индексируемого поля. Это позволяет ускорить поиск строк с заданным значением индексного поля. Допускается не более 32 индексов на таблицу.
Индексы можно использовать двумя разными способами. Во-первых, их можно использовать для последовательного доступа к индексированному файлу в соответствии со значениями индексного поля. Во-вторых, индексы могут использоваться для прямого доступа к отдельным записям индексированного файла на основе заданного значения индексного поля.
Хранимый файл может иметь несколько индексов. Они могут использоваться как раздельно, так и совместно для более эффективного доступа к записям о поставщиках.
Индекс можно создать также на основе комбинации двух полей. Скорость выполнения запроса может сильно зависеть от последовательности выполнения просмотров по двум индексам. К тому же, бывает довольно сложно определить, какой порядок индексов приведет к более быстрому выполнению данного запроса. Индекс на основе комбинации полей может использоваться либо для отдельного индексирования по первому полю, либо по любой последовательной комбинации первых полей.
При обновлении БД индекс приводится в соответствие с обновленной базой. Индексы поддерживаются динамически. Большое число индексов может замедлить работу с БД.
Использование индексов наряду со значительным ускорением процесса выборки или извлечения данных имеет и существенный недостаток. Это замедление процесса обновления данных, т.к. при каждом добавлении новой записи в индексированный файл потребуется также добавить новый индекс в индексный файл. При выборе некоторого поля для индексирования необходимо выяснить, что более важно для данной СУБД: скорость извлечения данных или скорость обновления?
Индекс представляет собой таблицу, которая содержит ключевые значения для каждой записи в таблице данных и записанные в порядке, требуемом для пользователя. Ключевые значения определяются на основе одного или нескольких полей таблицы. Кроме того, индекс содержит уникальные ссылки на соответствующие записи в таблице. На рис.1.12 показан фрагмент таблицы CUSTOMERS, содержащей информацию о покупателях, и индекс IDX_NAME, построенный на основе поля Name таблицы CUSTOMERS. Индекс IDX_NAME содержит значения ключевого поля Name, упорядоченные в алфавитном порядке, и ссылки на соответствующие записи в таблице CUSTOMERS. Каждая таблица может иметь несколько различных индексов, каждый из которых определяет свой собственный порядок следования записей. Например, таблица AUTHORS может иметь индексы для представления данных об авторах, упорядоченные по дате рождения или по алфавиту. Таким образом, каждый индекс используется для представления одних и тех же данных, но упорядоченных различным образом. Вообще говоря, таблицы в базе данных могут и не иметь индексов. В этом случае для большой таблицы время поиска определенной записи может быть весьма значительным и использование индекса становиться необходимым. С другой стороны, не следует увлекаться созданием слишком большого количества индексов, так как это может заметно увеличить время необходимое для обновления базы данных и значительно увеличить размер файла базы данных.
Существуют средства пакетного индексирования, обращающиеся к записи через индекс. Этот процесс осуществляется в два этапа: сначала в индексной структуре находится требуемое значение атрибута и соответствующий адрес записи, а затем по этому адресу происходит обращение к памяти. Индексы можно строить как по уникальным значениям, так и не по уникальным значениям атрибутов.
На практике используются многоуровневые индексы на основе бинарных деревьев.
Альтернативным деревьям и все более популярным подходом к организации индексов является использование техники хэширования.
Хеширование – вычисление записи по значению ключа.
Два достоинства: сжимает информацию, быстрый доступ к элементам.
Для хеширования главными задачами является: 1) выбор хеш-функции, так, чтобы уменьшить число конфликтных ситуаций; 2) нахождение разрешения способа конфликтных ситуаций.
Процесс хеширования делится на три этапа: 1) вычисление хеш-адреса; 2) уточнение хеш-адреса в случае конфликтной ситуации; 3) размещение ключа в памяти.
При выборе хеш-функции необходимо учитывать: 1) сложность вычислений; 2) равномерность распределения данных; 3) не допустить скучивания значений ключей.
В целом методы бинарных деревьев и хэширования все более сближаются.
Вопрос 12. Дайте определение понятиям первичный и внешний ключи. Охарактеризуйте логические связи между отношениями в реляционной модели данных. Выделите наиболее часто используемые типы связей
Главная идея реляционной модели состоит в представлении произвольных структур данных в виде совокупности реляционных отношений - двумерных массивов типа "объекты-признаки", то есть таблиц. Таблица отражает тип объекта реального мира, а каждая ее строка – конкретный объект.
Между отношениями (таблицами) устанавливаются связи, которые делают их (таблицы) более информативными, чем они являются по отдельности. Это позволяет минимизировать избыточность данных в БД.
Связь устанавливается посредством ключей (ключевых полей), содержащих общую информацию для обоих отношений (таблиц). В межтабличных связях ключевые поля используются для ссылок из одной таблицы на определенные записи другой таблицы.
Одно или несколько полей, комбинация значений которых однозначно определяет каждую запись в таблице, называетсяпервичным ключом. По нему определяется адрес записи во внешней памяти.
Поле со ссылкой на ключевое поле из другой таблицы называется полем внешнего ключа.
Первичным ключом называется атрибут отношения, однозначно идентифицирующий каждый из его кортежей. Ключ может быть составным (сложным), т. е. состоять из нескольких атрибутов.
Внешний ключ – поле, значения которого однозначно характеризуют сущности, подставленные записями некоторой другой таблицы, то есть задают значения их первичного ключа. Значения внешнего ключа могут повторяться.