Транзакция - это последовательность
операций над БД, рассматриваемых СУБД
как единое целое. Либо транзакция успешно
выполняется, и СУБД фиксирует изменения
БД, произведенные этой транзакцией, во
внешней памяти, либо ни одно из этих изменений
никак не отражается на состоянии БД. Понятие
транзакции необходимо для поддержания
логической целостности БД. Поддержание
механизма транзакций является обязательным
условием даже однопользовательских СУБД
(если, конечно, такая система заслуживает
названия СУБД). Но понятие транзакции
гораздо более важно в многопользовательских
СУБД.
То свойство, что каждая транзакция
начинается при целостном состоянии БД
и оставляет это состояние целостным после
своего завершения, делает очень удобным
использование понятия транзакции как
единицы активности пользователя по отношению
к БД. При соответствующем управлении
параллельно выполняющимися транзакциями
со стороны СУБД каждый из пользователей
может в принципе ощущать себя единственным
пользователем СУБД.
Одним из основных требований
к СУБД является надежность хранения данных
во внешней памяти. Под надежностью хранения
понимается то, что СУБД должна быть в
состоянии восстановить последнее согласованное
состояние БД после любого аппаратного
или программного сбоя. Обычно рассматриваются
два возможных вида аппаратных сбоев:
так называемые мягкие сбои, которые можно
трактовать как внезапную остановку работы
компьютера (например, аварийное выключение
питания), и жесткие сбои, характеризуемые
потерей информации на носителях внешней
памяти. Примерами программных сбоев могут
быть: аварийное завершение работы СУБД
(по причине ошибки в программе или в результате
некоторого аппаратного сбоя) или аварийное
завершение пользовательской программы,
в результате чего некоторая транзакция
остается незавершенной.
Первую ситуацию можно рассматривать
как особый вид мягкого аппаратного сбоя;
при возникновении последней требуется
ликвидировать последствия только одной
транзакции. Понятно, что в любом случае
для восстановления БД нужно располагать
некоторой дополнительной информацией.
Другими словами, поддержание надежности
хранения данных в БД требует избыточности
хранения данных, причем та часть данных,
которая используется для восстановления,
должна храниться особо надежно. Наиболее
распространенным методом поддержания
такой избыточной информации является
ведение журнала изменений БД. Журнал
- это особая часть БД, недоступная пользователям
СУБД и поддерживаемая с особой тщательностью
(иногда поддерживаются две копии журнала,
располагаемые на разных физических дисках),
в которую поступают записи обо всех изменениях
основной части БД. В разных СУБД изменения
БД журнализуются на разных уровнях: иногда
запись в журнале соответствует некоторой
логической операции изменения БД (например,
операции удаления строки из таблицы реляционной
БД), иногда - минимальной внутренней операции
модификации страницы внешней памяти;
в некоторых системах одновременно используются
оба подхода. Во всех случаях придерживаются
стратегии "упреждающей" записи в
журнал (так называемого протокола Write
Ahead Log - WAL). Эта стратегия заключается в
том, что запись об изменении любого объекта
БД должна попасть во внешнюю память журнала
раньше, чем измененный объект попадет
во внешнюю память основной части БД. Если
в СУБД корректно соблюдается протокол
WAL, то с помощью журнала можно решить все
проблемы восстановления БД после любого
сбоя.
Для работы с базами данных
используются специальные языки, в целом
называемые языками баз данных. В современных
СУБД обычно поддерживается единый интегрированный
язык, содержащий все необходимые средства
для работы с БД, начиная от ее создания,
и обеспечивающий базовый пользовательский
интерфейс с базами данных.
Стандартным языком наиболее
распространенных в настоящее время реляционных
СУБД является язык SQL (Structured Query Language).
Прежде всего, язык SQL сочетает средства
SDL и DML, т.е. позволяет определять схему
реляционной БД и манипулировать данными.
При этом именование объектов БД (для реляционной
БД - именование таблиц и их столбцов) поддерживается
на языковом уровне в том смысле, что компилятор
языка SQL производит преобразование имен
объектов в их внутренние идентификаторы
на основании специально поддерживаемых
служебных таблиц-каталогов. Внутренняя
часть СУБД (ядро) вообще не работает с
именами таблиц и их столбцов. Наконец,
авторизация доступа к объектам БД производится
также на основе специального набора операторов
SQL.
Идея состоит в том, что для
выполнения операторов SQL разного вида
пользователь должен обладать различными
полномочиями. Пользователь, создавший
таблицу БД, обладает полным набором полномочий
для работы с этой таблицей. В число этих
полномочий входит полномочие на передачу
всех или части полномочий другим пользователям,
включая полномочие на передачу полномочий.
Полномочия пользователей описываются
в специальных таблицах-каталогах, контроль
полномочий поддерживается на языковом
уровне.
Модели описания баз данных
Известны три типа моделей
описания баз данных – иерархическая,
сетевая и реляционная, основное различие
между которыми состоит в характере описания
взаимосвязей и взаимодействия между
объектами и атрибутами базы данных.13
- Иерархическая модель предполагает
использование для описания базы данных
древовидных структур, состоящих из определенного
числа уровней. «Дерево» представляет
собой иерархию элементов, называемых
узлами. Под элементами понимается список,
совокупность, набор атрибутов, элементов,
описывающих объекты.
Принципы иерархии:
- иерархия всегда начинается
с корневой вершины (или главного узла);
- исходный узел, из которого
строится дерево, называется корневым
узлом или просто корнем, причем одно дерево
может иметь только один корень;
- узел может содержать один или
несколько атрибутов, описывающих находящийся
в нем объект;
- порожденные узлы могут встраиваться
в «дерево» как в горизонтальном направлении,
так и в вертикальном;
- доступ к порожденным узлам
возможен только через исходный узел,
поэтому существует только один путь доступа
к каждому узлу.
Рис. 2. Иерархическая модель
данных.
Достоинством модели является
простота ее построения, легкость понимания
сути принципа иерархии, наличие промышленных
СУБД, поддерживающих данную модель. Недостатком
является сложность операций по включению
в иерархию информации о новых объектах
базы данных и удалению устаревшей информации.
- Сетевая модель описывает элементарные
данные и отношения между ними в
виде ориентированной сети. Это такие
отношения между объектами, когда каждый
порожденный элемент имеет более одного
исходного и может быть связан с любым
другим элементом структуры. Сетевые структуры могут быть
многоуровневыми и иметь разную степень
сложности. Схема, в которой присутствует
хотя бы одна связь «многие ко многим» и которая требует для
своей реализации использования сложных
методов, является сложной схемой.
Рис. 3. Сетевая модель данных.
База данных, описываемая сетевой
моделью, состоит из областей, каждая из
которых состоит из записей, а последние,
в свою очередь, состоят из полей. Недостатком
сетевой модели является ее сложность,
возможность потери независимости данных
при реорганизации базы данных. При появлении
новых пользователей, новых приложений
и новых видов запросов происходит рост
базы данных, что может привести к нарушению
логического представления данных.
- Реляционная модель имеет в
своей основе понятие «отношения», и ее
данные формируются в виде таблиц. Отношение
– это двумерная таблица, имеющая свое
название, в которой минимальным объектом
действий, сохраняющим ее структуру, является
строка таблицы (кортеж), состоящая из
ячеек таблицы – полей.
К числу достоинств реляционной
модели относятся: простота построения,
доступность понимания, возможность эксплуатации
базы данных без знания методов и способов
ее построения, независимость данных,
гибкость структуры и другие. Недостатками
модели являются: низкая производительность
по сравнению с иерархической и сетевой
моделями, сложность программного
обеспечения, избыточность.
Рис. 4. Реляционная модель данных.
Реляционные базы данных. Основные понятия
Основными понятиями реляционных
баз данных являются тип данных, домен,
атрибут, кортеж, первичный ключ и отношение.
Тип данных
Понятие тип данных в реляционной
модели данных полностью адекватно понятию
типа данных в языках программирования.
Обычно в современных реляционных БД допускается
хранение символьных, числовых данных,
битовых строк, специализированных числовых
данных (таких как "деньги"), а также
специальных "темпоральных" данных
(дата, время, временной интервал). Достаточно
активно развивается подход к расширению
возможностей реляционных систем абстрактными
типами данных.
Домен
Понятие домена более специфично
для баз данных, хотя и имеет некоторые
аналогии с подтипами в некоторых языках
программирования. В самом общем виде
домен определяется заданием некоторого
базового типа данных, к которому относятся
элементы домена, и произвольного логического
выражения, применяемого к элементу типа
данных. Если вычисление этого логического
выражения дает результат "истина",
то элемент данных является элементом
домена.
Наиболее правильной интуитивной
трактовкой понятия домена является понимание
домена как допустимого потенциального
множества значений данного типа. Следует отметить также семантическую
нагрузку понятия домена: данные считаются
сравнимыми только в том случае, когда
они относятся к одному домену.
Схема отношения, схема базы
данных
Схема отношения - это именованное
множество пар {имя атрибута, имя домена
(или типа, если понятие домена не поддерживается)}.
Степень или "арность" схемы отношения
- мощность этого множества. Если все атрибуты
одного отношения определены на разных
доменах, осмысленно использовать для
именования атрибутов имена соответствующих
доменов (не забывая, конечно, о том, что
это является всего лишь удобным способом
именования и не устраняет различия между
понятиями домена и атрибута).
Схема БД (в структурном смысле)
- это набор именованных схем отношений.
Кортеж, отношение
Кортеж, соответствующий данной
схеме отношения, - это множество пар {имя
атрибута, значение}, которое содержит
одно вхождение каждого имени атрибута,
принадлежащего схеме отношения. "Значение"
является допустимым значением домена
данного атрибута (или типа данных, если
понятие домена не поддерживается). Так
степень или "арность" кортежа, т.е.
число элементов в нем, совпадает с "арностью"
соответствующей схемы отношения. Иначе
говоря, кортеж - это набор именованных
значений заданного типа.
Отношение - это множество кортежей,
соответствующих одной схеме отношения.
Схему отношения называют заголовком
отношения, а отношение как набор кортежей
- телом отношения.
Обычным житейским представлением
отношения является таблица, заголовком
которой является схема отношения, а строками
- кортежи отношения-экземпляра; в этом
случае имена атрибутов именуют столбцы
этой таблицы. Поэтому иногда говорят
"столбец таблицы", имея в виду "атрибут
отношения".
Реляционная база данных - это
набор отношений, имена которых совпадают
с именами схем отношений в схеме БД.
Фундаментальные свойства отношений
- Отсутствие кортежей-дубликатов
То свойство, что отношения
не содержат кортежей-дубликатов, следует
из определения отношения как множества
кортежей. В классической теории множеств
по определению каждое множество состоит
из различных элементов.
Из этого свойства вытекает
наличие у каждого отношения первичного
ключа - набора атрибутов, значения которых
однозначно определяют кортеж отношения.
Для каждого отношения по крайней мере
полный набор его атрибутов обладает этим
свойством. Однако при формальном определении
первичного ключа требуется обеспечение
его "минимальности", т.е. в набор
атрибутов первичного ключа не должны
входить такие атрибуты, которые можно
отбросить без ущерба для основного свойства
- однозначно определять кортеж. Понятие
первичного ключа является исключительно
важным в связи с понятием целостности
баз данных.
- Отсутствие упорядоченности
кортежей
Свойство отсутствия упорядоченности
кортежей отношения также является следствием
определения отношения-экземпляра как
множества кортежей. Отсутствие требования
к поддержанию порядка на множестве кортежей
отношения дает дополнительную гибкость
СУБД при хранении баз данных во внешней
памяти и при выполнении запросов к базе
данных. Это не противоречит тому, что
при формулировании запроса к БД, например,
на языке SQL можно потребовать сортировки
результирующей таблицы в соответствии
со значениями некоторых столбцов.
- Отсутствие упорядоченности
атрибутов
Атрибуты отношений не упорядочены,
поскольку по определению схема отношения
есть множество пар {имя атрибута, имя
домена}. Для ссылки на значение атрибута
в кортеже отношения всегда используется
имя атрибута. Это свойство теоретически
позволяет, например, модифицировать схемы
существующих отношений не только путем
добавления новых атрибутов, но и путем
удаления существующих атрибутов. Однако
в большинстве существующих систем такая
возможность не допускается, и хотя упорядоченность
набора атрибутов отношения явно не требуется,
часто в качестве неявного порядка атрибутов
используется их порядок в линейной форме
определения схемы отношения.
- Атомарность значений атрибутов
Значения всех атрибутов являются
атомарными. Это следует из определения
домена как потенциального множества
значений простого типа данных, т.е. среди
значений домена не могут содержаться
множества значений (отношения). Принято
говорить, что в реляционных базах данных
допускаются только нормализованные отношения
или отношения, представленные в первой
нормальной форме. Нормализованные отношения
составляют основу классического реляционного
подхода к организации баз данных. Они
обладают некоторыми ограничениями (не
любую информацию удобно представлять
в виде плоских таблиц), но существенно
упрощают манипулирование данными.