Естественно, организация типичной СУБД и состав ее компонентов соответствует рассмотренному нами набору функций. Напомним, что мы выделили следующие основные функции СУБД:
l управление данными во внешней памяти;
l управление буферами оперативной памяти;
l управление транзакциями;
l журнализация и восстановление БД после сбоев;
l поддержание языков БД.
Логически в современной реляционной СУБД можно выделить наиболее внутреннюю часть - ядро СУБД (часто его называют Data Base Engine), компилятор языка БД (обычно SQL), подсистему поддержки времени выполнения, набор утилит. В некоторых системах эти части выделяются явно, в других - нет, но логически такое разделение можно провести во всех СУБД.
Ядро СУБД отвечает за управление данными во внешней памяти, управление буферами оперативной памяти, управление транзакциями и журнализацию. Соответственно, можно выделить такие компоненты ядра (по крайней мере, логически, хотя в некоторых системах эти компоненты выделяются явно), как менеджер данных, менеджер буферов, менеджер транзакций и менеджер журнала. Как можно было понять из первой части этой лекции, функции этих компонентов взаимосвязаны, и для обеспечения корректной работы СУБД все эти компоненты должны взаимодействовать по тщательно продуманным и проверенным протоколам. Ядро СУБД обладает собственным интерфейсом, не доступным пользователям напрямую и используемым в программах, производимых компилятором SQL (или в подсистеме поддержки выполнения таких программ) и утилитах БД. Ядро СУБД является основной резидентной частью СУБД. При использовании архитектуры "клиент-сервер" ядро является основной составляющей серверной части системы.
Основной функцией компилятора языка БД является компиляция операторов языка БД в некоторую выполняемую программу. Основной проблемой реляционных СУБД является то, что языки этих систем (а это, как правило, SQL) являются непроцедурными, т.е. в операторе такого языка специфицируется некоторое действие над БД, но эта спецификация не является процедурой, а лишь описывает в некоторой форме условия совершения желаемого действия. Поэтому компилятор должен решить, каким образом выполнять оператор языка прежде, чем произвести программу. Применяются достаточно сложные методы оптимизации операторов, которые мы подробно рассмотрим в следующих лекциях. Результатом компиляции является выполняемая программа, представляемая в некоторых системах в машинных кодах, но более часто в выполняемом внутреннем машинно-независимом коде. В последнем случае реальное выполнение оператора производится с привлечением подсистемы поддержки времени выполнения, представляющей собой, по сути дела, интерпретатор этого внутреннего языка.
Наконец, в отдельные утилиты БД обычно выделяют такие процедуры, которые слишком накладно выполнять с использованием языка БД, например, загрузка и выгрузка БД, сбор статистики, глобальная проверка целостности БД и т.д. Утилиты программируются с использованием интерфейса ядра СУБД, а иногда даже с проникновением внутрь ядра.
Реляционная модель данных
Основу этой модели составляет набор взаимосвязанных таблиц, в которых хранятся данные.Основные теоретические идеи реляционной модели были изложены в работах по теории отношений Чарльза Содерса Пирса и Эрнста Шредера, а также американского математика Эдгара Кодда. В работах Пирса и Шредера было доказано, что множество отношений замкнуто относительно некоторых специальных операций, совместно образующих абстрактную алгебру. В дальнейшем это важнейшее свойство отношений было использовано в реляционной модели для разработки языка манипулирования данными. В 1970 году появилась статья Эдгара Кодда о представлении данных, организованных в виде двумерных таблиц, называемых отношениями. В этой работе впервые введены основные понятия и ограничения реляционной модели как основы хранения данных, а также показана возможность обработки данных с помощью традиционных операций над множествами.
Одним из основных преимуществ реляционной модели является ее однородность. Все данные рассматриваются как хранимые в таблицах, в которых каждая строка имеет один и тот же формат. Каждая строка в таблице представляет некоторый объект реального мира или соотношение между объектами.
Основные понятия реляционной модели данных
Реляционный термин | Описание | ||
Отношение | Таблица — совокупность объектов реального мира, которые характеризуются общими свойствами и характеристиками (поля таблицы) | ||
Заголовок отношения | Заголовок таблицы — названия полей (столбцов) таблицы | ||
Тело отношения | Тело таблицы — совокупность значений для всех объектов реального мира, которая представима в виде записей таблицы (строки таблицы) | ||
Схема отношения | Строка заголовков столбцов таблицы (заголовок таблицы) | ||
Атрибут отношения | Наименование столбца таблицы (поле таблицы) | ||
Кортеж отношения | Строка таблицы (запись) — однозначное представление объекта реального мира, созданное с использованием значений полей таблицы | ||
Домен | Множество допустимых значений атрибута | ||
Значение атрибута | Значение поля в записи | ||
Первичный ключ | Один или несколько атрибутов, который уникальным (единственным) образом определяет значение кортежа (значение строки таблицы) | ||
Внешний ключ | Атрибут таблицы, значения которого соответствуют значениям первичного ключа в другой связанной таблице. Внешний ключ может состоять как из одного, так и из нескольких атрибутов (составной внешний ключ). Если число атрибутов внешнего ключа меньше, чем количество атрибутов соответствующего первичного ключа, то он называется усеченным (частичным) внешним ключом | ||
Степень(арность) отношения | Количество столбцов таблицы | ||
Мощность отношения | Количество строк таблицы (количество кортежей) | ||
Тип данных | Тип значений элементов таблицы | ||
Базовое отношение | Отношение, которое содержит один или несколько столбцов, характеризующих свойства объекта, а также первичный ключ | ||
Производное отношение | Используется для обеспечения связей между другими таблицами, может не содержать первичного ключа; если первичный ключ задан, то он состоит из внешних ключей, которые связаны с первичными ключами базового отношения | ||