Тема 2 Технология баз данных

Определение базы данных (БД):

База данных – это совокупность связанных структурированных данных, содержащих сведения об общей предметной области, предназначенных для многократного многоцелевого использования и длительного хранения вместе с программами для управления этими данными.

Предметная область рассматривается как некоторая совокупность реальных объектов предметной области и связей между ними.

Каждый реальный объект предметной области заменяется своей моделью. Модель реального объекта отличается от самого объекта тем, что вместо бесконечного набора свойств, его описывающих, обладает конечным определенным набором свойств. Отбор только необходимых свойств (атрибутов) производится в процессе моделирования специалистом в предметной области. Модель реального объекта предметной области называется сущностью.

Каждой сущности (ее экземпляру) в БД соответствует запись о ней, состоящая из последовательности атрибутовэтой сущности.

Например, в БД организации требуется хранить сведения об ее сотрудниках. К признакам (атрибутам) сущностей, которые будут актуальны для этой БД, можно отнести следующие: личный номер, имя сотрудника, его должность, стаж работы и т. д. Предметная область может включать не только физические объекты, но и сведения о процессах и абстракциях.

Между сущностями должны быть связи разного рода.

Создание базы данных, поддержание ее в актуальном состоянии и обеспечение эффективного доступа пользователей и приложений к содержащейся в БД информации осуществляется с помощью специального программного обеспечения - систем управления базами данных (СУБД).

Основные функции СУБД

Непосредственное управление данными во внешней памяти

Эта функция включает обеспечение необходимых структур внешней памяти как для хранения данных, непосредственно входящих в БД, так и для служебных целей. В некоторых реализациях СУБД активно используются возможности существующих файловых систем, в других работа производится автономно вплоть до уровня устройств внешней памяти. Но в развитых СУБД пользователи не обязаны знать, использует ли СУБД файловую систему, и если использует, то как организованы файлы. СУБД поддерживает собственную систему именования объектов БД.

Управление буферами оперативной памяти

СУБД работают с БД значительного размера, обычно существенно больше доступного объема оперативной памяти. Если при обращении к элементу данных будет производиться обмен с внешней памятью, то вся система будет работать со скоростью устройства внешней памяти. Практически единственным способом реального увеличения этой скорости является буферизация данных в оперативной памяти. Если операционная система производит общесистемную буферизацию (как в случае ОС UNIX), этого для целей СУБД недостаточно, В развитых СУБД поддерживается собственный набор буферов оперативной памяти с собственной дисциплиной.

Существует отдельное направление СУБД, которое ориентировано на постоянное присутствие в оперативной памяти всей БД. Это направление основывается на предположении, что в будущем объем оперативной памяти компьютеров будет настолько велик, что позволит обходиться без буферизации.

Управление транзакциями

Транзакция - это последовательность операций над БД, рассматриваемых СУБД как единое целое. Либо транзакция успешно выполняется, и СУБД фиксирует изменения БД, произведенные этой транзакцией, либо неуспешно и эти изменения никак не отражаются на БД.

Понятие транзакции необходимо для поддержания логической целостности БД. Поддержание механизма транзакций является обязательным условием даже однопользовательских СУБД. Поддержка транзакций еще более важна в многопользовательских СУБД. Каждая транзакция начинается при целостном состоянии БД и оставляет это состояние целостным после своего завершения.

Журнализация

Одним из основных требований к СУБД является надежность хранения данных во внешней памяти. Под надежностью хранения понимается то, что СУБД должна быть в состоянии восстановить последнее согласованное состояние БД после любого аппаратного или программного сбоя. Обычно рассматриваются два возможных вида аппаратных сбоев: мягкие сбои, которые можно трактовать как внезапную остановку работы компьютера (например, аварийное выключение питания), и жесткие сбои, характеризуемые потерей информации на носителях внешней памяти.

Понятно, что в любом случае для восстановления БД нужно располагать некоторой дополнительной информацией. Другими словами, поддержание надежности хранения данных в БД требует избыточности хранения данных, причем та часть данных, которая используется для восстановления, должна храниться особо надежно. Наиболее распространенным методом поддержания такой избыточной информации является ведение журнала изменений БД.

Журнал - это особая часть БД, недоступная пользователям СУБД и поддерживаемая с особой тщательностью (иногда поддерживаются две копии журнала, располагаемые на разных физических дисках), в которую поступают записи обо всех изменениях основной части БД.

Во всех случаях придерживаются стратегии "упреждающей" записи в журнал (протокол WAL). Эта стратегия в том, что запись об изменении любого объекта БД должна попасть во внешнюю память журнала раньше, чем измененный объект попадет во внешнюю память основной части БД. Известно, что если в СУБД корректно соблюдается протокол WAL, то с помощью журнала можно решить все проблемы восстановления БД после любого сбоя.

При мягком сбое во внешней памяти основной части БД могут находиться объекты, модифицированные транзакциями, не закончившимися к моменту сбоя. При соблюдении протокола WAL во внешней памяти журнала должны гарантированно находиться записи, относящиеся к операциям модификации объектов. Целью процесса восстановления после мягкого сбоя является состояние внешней памяти основной части БД, которое возникло бы при фиксации во внешней памяти изменений всех завершившихся транзакций и которое не содержало бы никаких следов незаконченных транзакций. Для того, чтобы этого добиться, сначала производят откат незавершенных транзакций (undo), а потом повторно воспроизводят (redo) те операции завершенных транзакций, результаты которых не отображены во внешней памяти.

Для восстановления БД после жесткого сбоя используют журнал и архивную копию БД. Грубо говоря, архивная копия - это полная копия БД к моменту начала заполнения журнала. Конечно, для нормального восстановления БД после жесткого сбоя необходимо, чтобы журнал не пропал. Как уже отмечалось, к сохранности журнала во внешней памяти в СУБД предъявляются особо повышенные требования. Тогда восстановление БД состоит в том, что исходя из архивной копии по журналу воспроизводится работа всех транзакций, которые закончились к моменту сбоя.

Поддержка языков БД

Для работы с базами данных используются специальные языки, в целом называемые языками баз данных.

В современных СУБД поддерживается единый интегрированный язык, содержащий все необходимые средства для работы с БД, начиная от ее создания, и обеспечивающий базовый пользовательский интерфейс с базами данных. Стандартным языком наиболее распространенных в настоящее время реляционных СУБД является язык SQL (Structured Query Language). Перечислим основные функции реляционной СУБД, поддерживаемые на "языковом" уровне.

Прежде всего, язык SQL позволяет определять схему реляционной БД и манипулировать данными. При этом именование объектов БД (для реляционной БД - именование таблиц и их столбцов) поддерживается на языковом уровне в том смысле, что компилятор языка SQL производит преобразование имен объектов в их внутренние идентификаторы на основании специально поддерживаемых служебных таблиц-каталогов. Внутренняя часть СУБД (ядро) вообще не работает с именами таблиц и их столбцов.

Язык SQL содержит специальные средства определения ограничений целостности БД. Специальные операторы языка SQL позволяют определять представления БД, фактически являющиеся хранимыми в БД запросами с именованными столбцами.

Авторизация доступа к объектам БД производится также на основе специального набора операторов SQL.

Типовая организация современной СУБД

Естественно, организация типичной СУБД и состав ее компонентов соответствует рассмотренному нами набору функций. Напомним, что мы выделили следующие основные функции СУБД:

управление данными во внешней памяти;

управление буферами оперативной памяти;

управление транзакциями;

журнализация и восстановление БД после сбоев;

поддержание языков БД.

Логически в современной реляционной СУБД можно выделить:

наиболее внутреннюю часть – ядро СУБД (Data Base Engine),

компилятор языка БД (обычно SQL),

подсистему поддержки времени выполнения,

набор утилит.

В некоторых системах эти части выделяются явно, в других - нет, но логически такое разделение можно провести во всех СУБД.

Ядро СУБД

Ядро СУБД отвечает за управление данными во внешней памяти, управление буферами оперативной памяти, управление транзакциями и журнализацию. Соответственно, можно выделить такие компоненты ядра (по крайней мере, логически, хотя в некоторых системах эти компоненты выделяются явно), как менеджер данных, менеджер буферов, менеджер транзакций и менеджер журнала. Как можно было понять из первой части этой лекции, функции этих компонентов взаимосвязаны, и для обеспечения корректной работы СУБД все эти компоненты должны взаимодействовать по тщательно продуманным и проверенным протоколам. Ядро СУБД обладает собственным интерфейсом, не доступным пользователям напрямую и используемым в программах, производимых компилятором SQL (или в подсистеме поддержки выполнения таких программ) и утилитах БД. Ядро СУБД является основной резидентной частью СУБД. При использовании архитектуры "клиент-сервер" ядро является основной составляющей серверной части системы.

Компилятор языка БД

Основной функцией компилятора языка БД является компиляция операторов языка БД в некоторую выполняемую программу. Основной проблемой реляционных СУБД является то, что языки этих систем (а это, как правило, SQL) являются непроцедурными, т.е. в операторе такого языка специфицируется некоторое действие над БД, но эта спецификация не является процедурой, а лишь описывает в некоторой форме условия совершения желаемого действия (вспомните примеры из первой лекции). Поэтому компилятор должен решить, каким образом выполнять оператор языка прежде, чем произвести программу. Результатом компиляции является выполняемая программа.

Подсистема поддержки времени выполнения

Эта исполняемая программа представляемая в некоторых системах в машинных кодах, но более часто в выполняемом внутреннем машинно-независимом коде. В этом случае реальное выполнение каждого оператора производится с привлечением подсистемы поддержки времени выполнения, представляющей собой, по сути дела, интерпретатор этого внутреннего языка.

Утилиты

Наконец, в отдельные утилиты БД в СУБД выделяют такие процедуры, которые слишком нерационально выполнять с использованием языка БД, например, загрузка и выгрузка БД, сбор статистики, глобальная проверка целостности БД и т.д. Утилиты программируются с использованием интерфейса ядра СУБД, а иногда даже с проникновением внутрь ядра.

Лекция 3.

Модели данных

Способ отображения объектов, атрибутов и связей на структуры данных определяется моделью данных. Принято выделять следующие классические модели данных:

· иерархические,

· сетевые

· реляционные.

Соответственно, речь идет об иерархических, сетевых, реляционных СУБД.

Иерархическая модель

Иерархическая модель позволяет строить базы данных с иерархической древовидной структурой. Эта структура основана принципе подчиненности, а с точки зрения структур данных - на классическом однонаправленном ориентированном графе и определяется как дерево, образованное парными связями.

На самом верхнем уровне иерархии имеется один узел (вершина), называемый корнем. Все другие вершины, кроме корня, связываются (подчиняются) только с одной вершиной графа на более высоком (следующем) уровне иерархии.

На самом нижнем уровне иерархии имеется несколько (конечное число) вершин, у которых нет подчиненных вершин, они называются терминалами.

Все вершины связаны одинаково: у каждой есть один «начальник» и несколько «подчиненных», то есть связь «один» (начальник) ко «многим» (подчиненным). Поэтому связи не нуждаются в именовании и описании – они одинаковые. Нужно именовать и описывать лишь вершины на каждом заданном уровне.

Основное достоинство иерархической модели - простота описания и понимания иерархических структур реального мира.

Пример предметной области, идеально отвечающей по структуре подчиненности иерархической модели – система управления армией («дивизионная модель»), родовидовые отношения в живой природе, генеалогические деревья поколений др.

 

Сетевая модель.

Каждое дерево-граф иерархической модели имеет связи только по вертикали. Если в структуре модели предметной области каждый порожденный («подчиненный») элемент может иметь более одного исходного («начальника»), то такая модель называется сетевой. В ней каждый элемент может быть связан с любым другим элементом без ограничений. Сетевая БД состоит из многих наборов записей, соответствующих экземплярам объектов предметной области, и наборов связей между ними. Связи уже разные по типу. В каждом наборе есть элементы подчиненности (запись «владелец» и запись «член» образуют набор). Можно себе представлять эту структуру как несколько деревьев, связанных по «горизонтали».

Каждую связь и вершину нужно именовать и описывать в наборах, в которые она входит. Это структура, которая гораздо более сложна для понимания и программирования.

Реляционная модель

Реляционная модель была разработана Коддом в 60-70-х годах ХХ века. С ее созданием начался новый этап в эволюции СУБД. Простота и гибкость модели привлекли внимание программистов, появилось множество сторонников. Несмотря на некоторые недостатки (ограничения), реляционная модель стала доминирующей, а реляционные СУБД стали промышленным стандартом «де-факто».

В основе модели – понятие отношения, «реляции». Отношение интерпретируется как двумерная таблица, однако в обычном смысле таблицей не является. В строках таблицы располагаются экземпляры однотипных записей (кортежи). Отношение имеет структуру – набор атрибутов, определяемых именами и типами и форматами данных.

Реляционная модель опирается на систему понятий реляционной алгебры и анализа, важнейшие из которых: отношение, кортеж, домен, поле, атрибут, ключ отношения.

Все операции над реляционной базой данных сводятся к манипуляциям с отношениями.

Значения конкретного атрибута выбираются из домена - множества всех возможных значений атрибута объекта (область определения). Имя должно быть уникальным в отношении. Поля (столбцы) расположены в отношении (таблице) в соответствии с порядком следования их имен при ее создании. В отличие от столбцов, строки отношения (кортежи) не имеют имен. Порядок следования строк в таблице не определен, а количество логически не ограничено. Так как строки не упорядочены, невозможно выбрать строку по её позиции - среди них не существует "первой" и "последней". Любое отношение имеет одно или несколько полей, значения в которых однозначно идентифицируют каждую запись. Это ключ. В отношении не должно быть экземпляров записей, имеющих одно и то же значение ключа.

Взаимосвязь таблиц в реляционной модели поддерживается первичными и внешними ключами. Первичный ключ – поле, значения которого однозначно характеризуют экземпляры сущности. Внешний ключ - это столбец, значения которого однозначно характеризуют сущности, представленные строками некоторого другого отношения, то есть задают значения их первичного ключа. Говорят, что отношение, в котором определен внешний ключ, ссылается на соответствующее отношение, в котором такой же атрибут является первичным ключом.

Помимо отношений, в БД могут храниться и другие объекты, такие как экранные формы, шаблоны отчетов и прикладные программы, работающие с информацией базы данных. Для пользователей информационной системы важно, чтобы база данных отражала предметную область однозначно и непротиворечиво. Если она обладает такими свойствами, то говорят, что БД удовлетворяет условию целостности. Чтобы добиться выполнения условия целостности, на базу данных накладываются некоторые ограничения, которые называют ограничениями целостности.

Доминирование реляционной модели в современных СУБД обусловлено рядом причин, в числе которых:

1.наличие развитой теории реляционной модели данных, которая поддержана теоретическими исследованиями в большей степени по сравнению с другими моделями;

2.наличие аппарата сведения к реляционной других моделей данных;

3.поддержка реляционной моделью специальных средств ускоренного доступа к информации;

4.возможность манипулирования данными без необходимости знания конкретной физической организации БД во внешней памяти;

5.наличие стандартизованного высокоуровневого языка запросов к базам данных.

Лекция 4.