СУБД
2. Функции СУБД.
Можно считать, что если прикладная информационная система опирается на
некоторую систему управления данными, обладающую этими свойствами, то эта
система управления данными является системой управления базами данных
(СУБД).
Основные функции СУБД:
1. Непосредственное управление данными во внешней памяти. Эта функция
включает обеспечение необходимых структур внешней памяти как для хранения
данных, непосредственно входящих в БД, так и для служебных целей,
например, для убыстрения доступа к данным в некоторых случаях (обычно для
этого используются индексы).
2. Управление буферами оперативной памяти. СУБД обычно работают с БД
значительного размера; по крайней мере этот размер обычно существенно
больше доступного объема оперативной памяти. Понятно, что если при
обращении к любому элементу данных будет производиться обмен с внешней
памятью, то вся система будет работать со скоростью устройства внешней
памяти. Практически единственным способом реального увеличения этой
скорости является буферизация данных в оперативной памяти. Поэтому в
развитых СУБД поддерживается собственный набор буферов оперативной памяти
с собственной дисциплиной замены буферов.
3. Управление транзакциями. Транзакция - это последовательность операций
над БД, рассматриваемых СУБД как единое целое. Либо транзакция успешно
выполняется, и СУБД фиксирует (COMMIT) изменения БД, произведенные этой
транзакцией, во внешней памяти, либо ни одно из этих изменений никак не
отражается на состоянии БД. Понятие транзакции необходимо для поддержания
логической целостности БД.
4. Журнализация. Одним из основных требований к СУБД является надежность
хранения данных во внешней памяти. Под надежностью хранения понимается
то, что СУБД должна быть в состоянии восстановить последнее согласованное
состояние БД после любого аппаратного или программного сбоя. Обычно
рассматриваются два возможных вида аппаратных сбоев: так называемые
мягкие сбои, которые можно трактовать как внезапную остановку работы
компьютера (например, аварийное выключение питания), и жесткие сбои,
характеризуемые потерей информации на носителях внешней памяти.
Поддержание надежности хранения данных в БД требует избыточности хранения
данных, причем та часть данных, которая используется для восстановления,
должна храниться особо надежно. Наиболее распространенным методом
поддержания такой избыточной информации является ведение журнала
изменений БД. Журнал - это особая часть БД, недоступная пользователям
СУБД и поддерживаемая с особой тщательностью (иногда поддерживаются две
копии журнала, располагаемые на разных физических дисках), в которую
поступают записи обо всех изменениях основной части БД. Во всех случаях
придерживаются стратегии "упреждающей" записи в журнал (так называемого
протокола Write Ahead Log - WAL). Самая простая ситуация восстановления -
индивидуальный откат транзакции.
5. Поддержка языков БД. Для работы с базами данных используются специальные
языки, в целом называемые языками баз данных. В современных СУБД обычно
поддерживается единый интегрированный язык, содержащий все необходимые
средства для работы с БД, начиная от ее создания, и обеспечивающий
базовый пользовательский интерфейс с базами данных. Стандартным языком
наиболее распространенных в настоящее время реляционных СУБД является
язык SQL (Structured Query Language).
Типовая организация современной СУБД:
Логически в современной реляционной СУБД можно выделить наиболее внутреннюю
часть - ядро СУБД (часто его называют Data Base Engine), компилятор языка
БД (обычно SQL), подсистему поддержки времени выполнения, набор утилит. В
некоторых системах эти части выделяются явно, в других - нет, но логически
такое разделение можно провести во всех СУБД.
Ядро СУБД - отвечает за управление данными во внешней памяти, управление
буферами оперативной памяти, управление транзакциями и журнализацию.
Соответственно, можно выделить такие компоненты ядра (по крайней мере,
логически, хотя в некоторых системах эти компоненты выделяются явно), как
менеджер данных, менеджер буферов, менеджер транзакций и менеджер журнала.
Ядро СУБД обладает собственным интерфейсом, не доступным пользователям
напрямую и используемым в программах, производимых компилятором SQL (или в
подсистеме поддержки выполнения таких программ) и утилитах БД. Ядро СУБД
является основной резидентной частью СУБД. При использовании архитектуры
"клиент-сервер" ядро является основной составляющей серверной части
системы.
Основной функцией компилятора языка БД является компиляция операторов языка
БД в некоторую выполняемую программу.
В отдельные утилиты БД обычно выделяют такие процедуры, которые слишком
накладно выполнять с использованием языка БД, например, загрузка и выгрузка
БД, сбор статистики, глобальная проверка целостности БД и т.д. Утилиты
программируются с использованием интерфейса ядра СУБД, а иногда даже с
проникновением внутрь ядра.
3. Распределенные базы данных.
Основная задача систем управления распределенными базами данных состоит в
обеспечении средства интеграции локальных баз данных, располагающихся в
некоторых узлах вычислительной сети, с тем, чтобы пользователь, работающий
в любом узле сети, имел доступ ко всем этим базам данных как к единой базе
данных.
При этом должны обеспечиваться:
1. простота использования системы;
2. возможности автономного функционирования при нарушениях связности сети
или при административных потребностях;
3. высокая степень эффективности.
Возможны однородные и неоднородные распределенные базы данных. В однородном
случае каждая локальная база данных управляется одной и той же СУБД. В
неоднородной системе локальные базы данных могут относиться даже к разным
моделям данных. Сетевая интеграция неоднородных баз данных - это
актуальная, но очень сложная проблема. Многие решения известны на
теоретическом уровне, но пока не удается справиться с главной проблемой -
недостаточной эффективностью интегрированных систем.
Распределенная система управления базами данных.
1. Легкость использования системы достигается за счет того, что
пользователи БД (разработчики прикладных программ и конечные
пользователи) работают в среде определенного языка БД (например, SQL).
Система автоматически обнаруживает текущее местоположение упоминаемых в
запросе пользователя объектов данных; одна и та же прикладная программа,
включающая предложения SQL, может быть выполнена в разных узлах сети. При
этом в каждом узле сети на этапе компиляции запроса выбирается наиболее
оптимальный план выполнения запроса в соответствии с расположением данных
в распределенной системе.
2. Обеспечение автономности узлов сети достигается за счет того, что каждая
локальная база данных администрируется независимо от других. Возможны
автономное подключение новых пользователей, смена версии автономной части
системы и т.д. Система спроектирована таким образом, что в ней не
требуются централизованные службы именования объектов или обнаружения
тупиков. В индивидуальных узлах не требуется наличие глобального знания
об операциях, выполняющихся в других узлах сети; работа с доступными
базами данных может продолжаться при выходе из строя отдельных узлов сети
или линий связи.
3. Высокая степень эффективности системы достигается за счет:
. Выполнению запроса предшествует его компиляция.
. Возможность перемещения удаленных отношений в локальную базу данных.
4.ER - модель.
На использовании разновидностей ER-модели основано большинство современных
подходов к проектированию баз данных (главным образом, реляционных). Модель
была предложена Ченом (Chen) в 1976 г. Моделирование предметной области
базируется на использовании графических диаграмм, включающих небольшое
число разнородных компонентов. В связи с наглядностью представления
концептуальных схем баз данных ER-модели получили широкое распространение в
системах CASE, поддерживающих автоматизированное проектирование реляционных
баз данных. Основными понятиями ER-модели являются сущность, связь и
атрибут.
Сущность - это реальный или представляемый объект, информация о котором
должна сохраняться и быть доступна. В диаграммах ER-модели сущность
представляется в виде прямоугольника, содержащего имя сущности. При этом
имя сущности - это имя типа, а не некоторого конкретного экземпляра этого
типа. Для большей выразительности и лучшего понимания имя сущности может
сопровождаться примерами конкретных объектов этого типа. Каждый экземпляр
сущности должен быть отличим от любого другого экземпляра той же сущности.
Связь - это графически изображаемая ассоциация, устанавливаемая между двумя
сущностями. Эта ассоциация всегда является бинарной и может существовать
между двумя разными сущностями или между сущностью и ей же самой
(рекурсивная связь). В любой связи выделяются два конца (в соответствии с
существующей парой связываемых сущностей), на каждом из которых указывается
имя конца связи, степень конца связи (сколько экземпляров данной сущности
связывается), обязательность связи (т.е. любой ли экземпляр данной сущности
должен участвовать в данной связи). Связь представляется в виде линии,
связывающей две сущности или ведущей от сущности к ней же самой. При это в
месте "стыковки" связи с сущностью используются трех точечный вход в
прямоугольник сущности, если для этой сущности в связи могут использоваться
много (many) экземпляров сущности, и одноточечный вход, если в связи может
участвовать только один экземпляр сущности. Обязательный конец связи
изображается сплошной линией, а необязательный - прерывистой линией.
Атрибутом сущности является любая деталь, которая служит для уточнения,
идентификации, классификации, числовой характеристики или выражения
состояния сущности. Имена атрибутов заносятся в прямоугольник, изображающий
сущность, под именем сущности и изображаются малыми буквами, возможно, с
примерами.
Нормальные формы ER-схем.
В первой нормальной форме ER-схемы устраняются повторяющиеся атрибуты или
группы атрибутов, т.е. производится выявление неявных сущностей,
"замаскированных" под атрибуты.
Во второй нормальной форме устраняются атрибуты, зависящие только от части
уникального идентификатора. Эта часть уникального идентификатора определяет
отдельную сущность.
В третьей нормальной форме устраняются атрибуты, зависящие от атрибутов, не
входящих в уникальный идентификатор. Эти атрибуты являются основой
отдельной сущности.
Более сложные элементы ER-модели.
1. Подтипы и супертипы сущностей. Как в языках программирования с развитыми
типовыми системами вводится возможность наследования типа сущности,
исходя из одного или нескольких супертипов.
2. Связи "many-to-many". Иногда бывает необходимо связывать сущности таким
образом, что с обоих концов связи могут присутствовать несколько
экземпляров сущности.
3. Уточняемые степени связи. Иногда бывает полезно определить возможное
количество экземпляров сущности, участвующих в данной связи (например,
служащему разрешается участвовать не более, чем в трех проектах
одновременно). Для выражения этого семантического ограничения разрешается
указывать на конце связи ее максимальную или обязательную степень.
4. Каскадные удаления экземпляров сущностей. Некоторые связи бывают
настолько сильными (конечно, в случае связи "один-ко-многим"), что при
удалении опорного экземпляра сущности (соответствующего концу связи
"один") нужно удалить и все экземпляры сущности, соответствующие концу
связи "многие".
5. Домены. Как и в случае реляционной модели данных бывает, полезна
возможность определения потенциально допустимого множества значений
атрибута сущности (домена).
21.Переход от ER – модели к реляционной.
1. Каждая простая сущность превращается в таблицу. Простая сущность -
сущность, не являющаяся подтипом и не имеющая подтипов. Имя сущности
становится именем таблицы.
2. Каждый атрибут становится возможным столбцом с тем же именем; может
выбираться более точный формат. Столбцы, соответствующие необязательным
атрибутам, могут содержать неопределенные значения; столбцы,
соответствующие обязательным атрибутам, - не могут.
3. Компоненты уникального идентификатора сущности превращаются в первичный
ключ таблицы. Если имеется несколько возможных уникальных идентификатора,
выбирается наиболее используемый. Если в состав уникального
идентификатора входят связи, к числу столбцов первичного ключа
добавляется копия уникального идентификатора сущности, находящейся на
дальнем конце связи (этот процесс может продолжаться рекурсивно). Для
именования этих столбцов используются имена концов связей и/или имена
сущностей.
4. Связи многие-к-одному (и один-к-одному) становятся внешними ключами.
Т.е. делается копия уникального идентификатора с конца связи "один", и
соответствующие столбцы составляют внешний ключ. Необязательные связи
соответствуют столбцам, допускающим неопределенные значения; обязательные
связи - столбцам, не допускающим неопределенные значения.
5. Индексы создаются для первичного ключа (уникальный индекс), внешних
ключей и тех атрибутов, на которых предполагается в основном базировать
запросы.
6. Если в концептуальной схеме присутствовали подтипы, то возможны два
способа: все подтипы в одной таблице (а) или для каждого подтипа -
отдельная таблица (б). При применении способа (а) таблица создается для
наиболее внешнего супертипа, а для подтипов могут создаваться
представления. В таблицу добавляется, по крайней мере, один столбец,
содержащий код ТИПА; он становится частью первичного ключа. При
использовании метода (б) для каждого подтипа первого уровня (для более
нижних - представления) супертип воссоздается с помощью представления
UNION (из всех таблиц подтипов выбираются общие столбцы - столбцы
супертипа).
7. Имеется два способа работы при наличии исключающих связей: общий домен
(а) и явные внешние ключи (б). Если остающиеся внешние ключи все в одном
домене, т.е. имеют общий формат (способ (а)), то создаются два столбца:
идентификатор связи и идентификатор сущности. Столбец идентификатора
связи используется для различения связей, покрываемых дугой исключения.
Столбец идентификатора сущности используется для хранения значений
уникального идентификатора сущности на дальнем конце соответствующей
связи. Если результирующие внешние ключи не относятся к одному домену, то
для каждой связи, покрываемой дугой исключения, создаются явные столбцы
внешних ключей; все эти столбцы могут содержать неопределенные значения.
7,8.Иерархические системы.
Типичным представителем (наиболее известным и распространенным) является
Information Management System (IMS) фирмы IBM. Первая версия появилась в
1968 г. До сих пор поддерживается много баз данных, что создает
существенные проблемы с переходом, как на новую технологию БД, так и на
новую технику.
Иерархическая БД состоит из упорядоченного набора деревьев; более точно, из
упорядоченного набора нескольких экземпляров одного типа дерева. Тип дерева
состоит из одного "корневого" типа записи и упорядоченного набора из нуля
или более типов поддеревьев (каждое из которых является некоторым типом
дерева). Тип дерева в целом представляет собой иерархически организованный
набор типов записи. В IMS использовалась оригинальная и нестандартная
терминология: "сегмент" вместо "запись", а под "записью БД" понималось все
дерево сегментов.
Пример типа дерева (схемы иерархической БД):
База данных с такой схемой могла бы выглядеть следующим образом (мы
показываем один экземпляр дерева):
Все экземпляры данного типа потомка с общим экземпляром типа предка
называются близнецами. Для БД определен полный порядок обхода - сверху
вниз, слева направо.
Манипулирование данными.
1. Найти указанное дерево БД (например, отдел 310);
2. Перейти от одного дерева к другому;
3. Перейти от одной записи к другой внутри дерева (например, от отдела - к
первому сотруднику);
4. Перейти от одной записи к другой в порядке обхода иерархии;
5. Вставить новую запись в указанную позицию;
6. Удалить текущую запись.
Ограничения целостности.
Автоматически поддерживается целостность ссылок между предками и потомками.
Основное правило: никакой потомок не может существовать без своего
родителя. Заметим, что аналогичное поддержание целостности по ссылкам между
записями, не входящими в одну иерархию, не поддерживается
В иерархических системах поддерживалась некоторая форма представлений БД на
основе ограничения иерархии.
9,10.Сетевые системы.
Типичным представителем является Integrated Database Management System
(IDMS) компании Cullinet Software, Inc., предназначенная для использования
на машинах основного класса фирмы IBM под управлением большинства
операционных систем. Архитектура системы основана на предложениях Data Base
Task Group (DBTG) Комитета по языкам программирования Conference on Data
Systems Languages (CODASYL), организации, ответственной за определение
языка программирования Кобол. Отчет DBTG был опубликован в 1971 г., а в 70-
х годах появилось несколько систем, среди которых IDMS.
Сетевой подход к организации данных является расширением иерархического. В
иерархических структурах запись-потомок должна иметь в точности одного
предка; в сетевой структуре данных потомок может иметь любое число предков.
Сетевая БД состоит из набора записей и набора связей между этими записями,
а если говорить более точно, из набора экземпляров каждого типа из
заданного в схеме БД набора типов записи и набора экземпляров каждого типа
из заданного набора типов связи. Тип связи определяется для двух типов
записи: предка и потомка. Экземпляр типа связи состоит из одного экземпляра
типа записи предка и упорядоченного набора экземпляров типа записи потомка.
Для данного типа связи L с типом записи предка P и типом записи потомка C
должны выполняться следующие два условия:
1. Каждый экземпляр типа P является предком только в одном экземпляре L;
2. Каждый экземпляр C является потомком не более, чем в одном экземпляре L.
На формирование типов связи не накладываются особые ограничения; но
возможны, например, следующие ситуации:
1. Тип записи потомка в одном типе связи L1 может быть типом записи предка
в другом типе связи L2 (как в иерархии).
2. Данный тип записи P может быть типом записи предка в любом числе типов
связи.
3. Данный тип записи P может быть типом записи потомка в любом числе типов
связи.
4. Может существовать любое число типов связи с одним и тем же типом записи
предка и одним и тем же типом записи потомка; и если L1 и L2 - два типа
связи с одним и тем же типом записи предка P и одним и тем же типом
записи потомка C, то правила, по которым образуется родство, в разных
связях могут различаться.
5. Типы записи X и Y могут быть предком и потомком в одной связи и потомком
и предком - в другой.
6. Предок и потомок могут быть одного типа записи.
Пример:
Манипулирование данными.
1. Найти конкретную запись в наборе однотипных записей (инженера Сидорова);
2. Перейти от предка к первому потомку по некоторой связи (к первому
сотруднику отдела 310);
3. Перейти к следующему потомку в некоторой связи (от Сидорова к Иванову);
4. Перейти от потомка к предку по некоторой связи (найти отдел Сидорова);
5. Создать новую запись;
6. Уничтожить запись;
7. Модифицировать запись;
8. Включить в связь;
9. Исключить из связи;
10. Переставить в другую связь и т.д.
Ограничения целостности.
В принципе их поддержание не требуется, но иногда требуют целостности по
ссылкам (как в иерархической модели).
11,12.Общие понятия реляционного подхода к организации БД.
Основными понятиями реляционных баз данных являются тип данных, домен,
атрибут, кортеж, первичный ключ и отношение.
Тип данных.
Понятие тип данных в реляционной модели данных полностью адекватно понятию
типа данных в языках программирования. Обычно в современных реляционных БД
допускается хранение символьных, числовых данных, битовых строк,
специализированных числовых данных (таких как "деньги"), а также
специальных "темпоральных" данных (дата, время, временной интервал).
Достаточно активно развивается подход к расширению возможностей реляционных
систем абстрактными типами данных.
Домен.
Понятие домена более специфично для баз данных, хотя и имеет некоторые
аналогии с подтипами в некоторых языках программирования. В самом общем
виде домен определяется заданием некоторого базового типа данных, к
которому относятся элементы домена, и произвольного логического выражения,
применяемого к элементу типа данных. Если вычисление этого логического
выражения дает результат "истина", то элемент данных является элементом
домена. Наиболее правильной интуитивной трактовкой понятия домена является
понимание домена как допустимого потенциального множества значений данного
типа.
Схема отношения, схема базы данных.
Схема отношения - это именованное множество пар {имя атрибута, имя домена
(или типа, если понятие домена не поддерживается)}. Степень или "арность"
схемы отношения - мощность этого множества. Схема БД (в структурном смысле)
- это набор именованных схем отношений.
Кортеж, отношение.
Кортеж, соответствующий данной схеме отношения, - это множество пар {имя
атрибута, значение}, которое содержит одно вхождение каждого имени
атрибута, принадлежащего схеме отношения. "Значение" является допустимым
значением домена данного атрибута (или типа данных, если понятие домена не
поддерживается). Тем самым, степень или "арность" кортежа, т.е. число
элементов в нем, совпадает с "арностью" соответствующей схемы отношения.
Попросту говоря, кортеж - это набор именованных значений заданного типа.
Отношение - это множество кортежей, соответствующих одной схеме отношения.
Иногда, чтобы не путаться, говорят "отношение-схема" и "отношение-
экземпляр", иногда, схему, отношения называют заголовком отношения, а
отношение как набор кортежей - телом отношения.
Общая характеристика.
Наиболее распространенная трактовка реляционной модели данных, по-видимому,
принадлежит Дейту, который воспроизводит ее (с различными уточнениями)
практически во всех своих книгах. Согласно Дейту реляционная модель состоит
из трех частей, описывающих разные аспекты реляционного подхода:
структурной части, манипуляционной части и целостной части.
В структурной части модели фиксируется, что единственной структурой данных,
используемой в реляционных БД, является нормализованное n-арное отношение.
По сути дела, в предыдущих двух разделах этой лекции мы рассматривали
именно понятия и свойства структурной составляющей реляционной модели.
В манипуляционной части модели утверждаются два фундаментальных механизма
манипулирования реляционными БД - реляционная алгебра и реляционное
исчисление. Первый механизм базируется в основном на классической теории