
- •1. Понятие базы данных и банка данных.
- •1.1 Основные определения.
- •1.2 Составляющие банка данных.
- •1.3 Цели использования банков данных.
- •1.4 Трехуровневая архитектура базы данных.
- •1.5 Основные функции субд.
- •1.5.1 Управление данными во внешней памяти.
- •1.5.2 Управление оперативной памятью.
- •1.5.3 Управление транзакциями
- •1.5.4 Журнализация
- •1.5.5. Поддержка языков бд
- •2. Модели данных.
- •2.1 Ранние модели данных.
- •2.1.1 Иерархическая модель данных.
- •2.1.2 Сетевая модель данных.
- •2.2 Реляционная модель данных.
- •2.4 Объектная модель данных.
- •2.5 Нереляционные субд.
- •3. Реляционная модель данных.
- •3.1 Структура и основные понятия реляционной модели данных.
- •3.2 Правила Кодда для реляционных субд.
- •3.3 Реляционная алгебра и реляционное исчисление.
- •3.3.1 Реляционная алгебра.
- •3.3.2 Реляционное исчисление.
- •4. Проектирование баз данных.
- •4.1 Проектирование при помощи нормализации.
- •4.1.1 Первая нормальная форма.
- •4.1.2 Вторая нормальная форма.
- •4.1.3 Третья нормальная форма и нормальная форма Бойса-Кодда.
- •4.1.4 Четвертая нормальная форма.
- •4.1.5 Пятая нормальная форма.
- •4.2 Модель «сущность-связь».
- •4.2.1 Появление и развитие метода. Современное состояние.
- •4.2.2 Метод Баркера.
- •4.2.3 Метод idef1x.
- •4.2.4 Получение схемы базы данных из модели «сущность-связь».
- •4.3 Денормализация базы данных.
- •5. Язык sql.
- •5.1 Появление и развитие языка.
- •5.2 Современная структура языка.
- •5.3 Язык определения данных.
- •5.4 Язык манипулирования данными.
- •5.4.1 Запросы insert, update, delete.
- •5.4.2 Запрос select.
- •6. Управление транзакциями.
- •6.1 Понятие транзакции. Основные свойства транзакций.
- •7.2 Восстановление.
- •6.3 Параллельность.
- •6.3.1 Проблемы параллельных транзакций и уровни изолированности.
- •6.3.2 Блокировки данных.
- •6.4 Поддержка транзакции в языке sql и библиотеках ado.Net.
- •Рекомендуемая литература
2.1 Ранние модели данных.
К ранним моделям данных принято относить иерархическую и сетевую модели. СУБД, реализующие их, появились первыми и заложили основы технологий баз данных. При этом, хотя многие из этих СУБД уже сошли со сцены, некоторые до сих пор существуют и используются.
Прежде, чем рассматривать особенности организации данных в ранних моделях, выделим некоторые общие черты.
Главное, что отличает ранние модели данных и СУБД, их реализующие – это их «вырастание» из практики. Сначала появлялись СУБД, реализующие то или иное решение, а потом опыт обобщался, и формулировались положения соответствующей модели данных. Этим они отличаются от реляционных СУБД, разработке которых предшествовало появление собственно теории реляционных баз данных. Как следствие, в основе иерархических и сетевых СУБД не лежит строгий и формальный математический аппарат, а модели данных имеют скорее описательный характер.
Второй общей для ранних моделей данных чертой является организация доступа к данным на уровне отдельных записей. В отличие от реляционной модели, которая, как мы увидим далее, оперирует множествами записей, иерархическая и сетевая модели предполагают операции с отдельными записями – поиск конкретной записи, переходы к следующей/предыдущей записям и так далее. Соответственно, и языки для работы с данными в реляционных СУБД – декларативный SQL, а в иерархических и сетевых – императивные алгоритмические языки (хотя впоследствии поддержка SQL в такие СУБД была добавлена).
Наконец, третьей характерной чертой является слаборазвитая (по сравнению с реляционными БД) система ограничений целостности.
2.1.1 Иерархическая модель данных.
Иерархическая модель является первой и появилась вместе с наиболее известной СУБД, ее реализующей – системой IMS (Information Management System) разработки компании IBM. Эта СУБД была выпущена в 1968 году и существует и развивается до сих пор.
Как понятно из названия модели, данные в ней организуются в виде иерархии. Данная организация достаточно типична и часто встречается в реальной жизни, так что воплощение ее в СУБД вполне объяснимо. Основными понятиями данной модели являются база данных, сегмент и поле.
Поле – это минимальная единица данных, которая представляет собой неделимое целое. То есть, например, если нам нужно хранить в поле адрес, то выделить в нем элементы (например, регион, город, улицу) и получать доступ к ним средствами СУБД невозможно, это нужно реализовывать на уровне прикладной программы.
Набор полей образует сегмент (или запись). Необходимо различать тип сегмента, как описание его структуры и экземпляры сегмента, собственно хранящие данные. В сегменте должен быть определен ключ – поле или набор полей, значение которого может однозначно идентифицировать конкретный экземпляр сегмента.
Сегменты образуют между собой связи типа «родитель-потомок». При этом у сегмента может быть произвольное количество потомков, но только один родитель. Конечно, непосредственно связываются между собой экземпляры сегментов. Экземпляры сегмента-потомка, подчиненные одному сегменту-родителю называются близнецами.
В вершине иерархии стоит сегмент, не имеющий родителя – корневой сегмент. Все сегменты в совокупности образуют древовидную структуру, которая и является базой данных. Схема базы данных – это набор таких деревьев.
В качестве примера иерархической базы данных вполне можно привести, скажем, структуру вуза. Корневым сегментом будет собственно вуз, ему будут подчинены учебные факультеты и различные подразделения, факультетам, в свою очередь, будут подчинены кафедры и деканы. У кафедры подчиненными сегментами будут заведующий кафедрой, преподаватели и специальности. Специальностям будут подчинены группы, а уже группам – студенты. Вариант такой схемы приведен на рисунке … .
Рисунок
2.1 Пример иерархической организации
данных.
Как уже было сказано ранее, ранние СУБД предполагали операции с данными на уровне отдельных записей. В иерархических СУБД типичные операции представляли собой следующее:
найти указанное дерево (например, Вятский государственный университет);
перейти от одного дерева к другому;
перейти от экземпляра одного типа записи к экземпляру другого типа записи внутри дерева (например, перейти от вуза к факультету);
перейти от одной записи к другой в порядке обхода иерархии;
вставить новую запись в указанную позицию;
удалить текущую запись.
В иерархических СУБД поддерживаются ограничения целостности одного типа – между родителем и потомком. Любой экземпляр типа записи потомка должен иметь родителя.
Хотя иерархические структуры и часто встречаются в реальности, далеко не любую предметную область можно выразить в виде одной иерархии, так что приходилось либо мириться с недостаточно точным отображением предметной области, либо создавать несколько деревьев, которые моделируют разные аспекты взаимосвязей сущностей в предметной области. В последнем случае неизбежно возникало дублирование данных (одни и те же данные имелись в разных деревьях), что приводило к росту размеров БД и усложнению процедур обработки данных.