- •Белорусский государственный университет модели данных и субд Учебное пособие
- •Введение
- •Раздел 5 посвящен семантическим или инфологическим моделям, используемым в современных программных системах поддержки проектирования, называемых case-системами (Computer Aided Software Engineering).
- •Раздел 10 посвящен вопросам распределенной обработки данных, здесь рассматриваются проектирование распределенных систем обработки данных, уделяется большое внимание фрагментации данных.
- •1. Основные понятия и определения теории баз данных.
- •1.1. Причины возникновения систем баз данных.
- •1.3. Системы управления базами данных.
- •2. Классификация моделей данных.
- •2.1. Моделирование данных.
- •2.2. Иерархическая модель.
- •2.3. Сетевая модель.
- •2.4. Реляционная модель.
- •2.5. Объектно-ориентированная модель.
- •2.6. Объектно-реляционная модель.
- •2.7. Многомерная модель.
- •3. Реляционная алгебра и реляционное исчисление.
- •3.1. Реляционная алгебра.
- •3.2. Реляционное исчисление.
- •4. Проектирование реляционных баз данных на основе нормализации.
- •4.1. Нормализация отношений, цели нормализации.
- •4.2. Структура функциональных зависимостей.
- •4.2.1. Функциональные зависимости и их свойства.
- •4.2.2. Ключи схем отношений.
- •4.2.3. Полные и неполные функциональные зависимости.
- •4.2.4. Покрытие множеств зависимостей.
- •4.2.5. Декомпозиция схем отношений.
- •4.2.6. Декомпозиции, сохраняющие зависимости.
- •4.3 Нормальные формы отношений.
- •4.3.1. Первая и вторая нормальные формы схем отношений.
- •4.3.2. Третья нормальная форма схем отношений.
- •4.3.4. Четвертая нормальная форма схем отношений.
- •4.3.5. Пятая нормальная форма схем отношений.
- •5. Семантическое моделирование
- •5.1. Цели и средства семантического моделирования.
- •5.2. Метод “сущность-связь”.
- •5.3. Этапы моделирования.
- •5.4. Правила формирования отношений.
- •Формирование отношений для связи 1:1.
- •Формирование отношений для связи 1:м.
- •6. Структура субд и основные функции.
- •6.1. Типовая организация современной субд.
- •6.2. Поддержка языков бд.
- •6.3. Управление данными во внешней памяти.
- •6.4. Управление буферами оперативной памяти.
- •6.5. Управление транзакциями.
- •6.6. Журнализация и восстановление после сбоев.
- •7. Управление транзакциями.
- •7.1. Свойства транзакций. Проблемы параллельного выполнения.
- •7.2. Консервативные методы управления транзакциями.
- •7.2.1. Метод блокировки.
- •7.2.2. Метод временных отметок.
- •7.3. Оптимистические методы управления транзакциями.
- •7.4. Уровень детализации блокируемых элементов данных.
- •8. Восстановление базы данных после сбоев.
- •8.1. Основные принципы и функции восстановления.
- •8.3. Создание контрольных точек.
- •8.4. Методы восстановления.
- •9. Защита баз данных.
- •9.1. Основные понятия.
- •9.2. Компьютерные средства защиты.
- •9.3. Некомпьютерные средства защиты.
- •10. Распределенные базы данных
- •10.1. Основные концепции.
- •10.2. Функции распределенных субд.
- •10.3. Разработка распределенных реляционных баз данных.
- •10.4. Распределение данных.
- •10.5. Фрагментация.
- •10. 6. Обеспечение прозрачности в рсубд.
- •11. Введение в субд oracle.
- •11.1. Характеристика субд Oracle.
- •11.2. Объекты базы данных Oracle.
- •11.4. Архитектура базы данных Oracle.
- •11.5. Архитектура экземпляра базы данных Oracle.
- •11.6. Формирование базы данных и экземпляра Oracle.
- •12. Основы языка sql.
- •12.1. Алфавит и лексемы языка sql.
- •12.2. Типы данных языка sql.
- •12.3. Операторы языка sql.
- •12.4. Операции языка sql.
- •12.5. Функции языка sql.
- •12.6. Создание, модификация и удаление таблиц.
- •12.7. Выбор информации из базы данных.
- •13. Основы языка pl/sql.
- •13.1. Алфавит и лексемы языка.
- •13.3. Типы данных и объявление переменных.
- •13.4. Операторы.
- •13.5. Курсоры.
- •13.6. Обработка исключительных ситуаций.
- •13.7. Триггеры базы данных.
- •13.8. Хранимые процедуры и функции.
- •13.9. Пакеты.
- •13.10. Объекты.
- •Литература
4.2.4. Покрытие множеств зависимостей.
Пусть F1 и F2 – множества функциональных зависимостей на множестве атрибутов U. Говорят, что F1 и F2 эквивалентны, если F1+=F2+. В этом случае говорят также, что F1 покрывает F2 (и F2 покрывает F1). Легко проверить, являются ли F1 и F2 эквивалентными. Для этого не обязательно строить замыкания F1+ и F2+. Достаточно для каждой зависимости (X—>Y)F1 проверить, содержится ли эта зависимость в F2+. Для этого проверяется, содержится ли Y в X+F2, (индекс внизу означает, что замыкание строится относительно набора функций F2); в свою очередь для каждой зависимости (V—>W)F2 проверяется, содержится ли она в F1+. Если эти условия выполняются, то F1 и F2 эквивалентны, в противном случае – неэквивалентны.
Заметим, что когда от заданных зависимостей переходим к полным, то получаем набор функций, эквивалентный исходному.
Кроме того, всегда можно перейти к набору функций, эквивалентному исходному и такому, что в правой части находится только один атрибут.
Говорят, что множество зависимостей F является минимальным покрытием или элементарным функциональным базисом структуры функциональных зависимостей, если:
правая часть каждой зависимости из F содержит единственный атрибут;
ни для какой зависимости Х>Y в F множество F\(X>Y) не эквивалентно F;
все зависимости набора F полные.
В литературе, при определении функционального базиса иногда не требуют выполнения условий 1) и 3), а функциональный базис, удовлетворяющий 3), называют элементарным.
Заметим, что одному набору функций F может соответствовать несколько элементарных функциональных базисов.
Пример.
Для схемы R=({А1, А2, А3, A4},
F={A1,A2>A3; АЗ—>А4; А1—>А4; АЗ,А4>А1; А1,А4>А2; А2—>А1; A3>А1; А4>А1}) функциональными базисами являются, например, следующие множества функций:
F1 = {А1—>А2; А2>A3; АЗ>А4; А4—>А1},
F2 = {Al> A2; А1—>АЗ; А1—>А4; А2—>А1; АЗ>А1; А4>А1}.
Легко видеть, что F1+=F2+=F+и при этом F1 и F2 удовлетворяют приведенным выше трем условиям.
4.2.5. Декомпозиция схем отношений.
Декомпозицией схемы отношения R=(U, F) называется замена ее совокупностью ={R1, R2, ..., Rk), где Ri=(Ui), i=l, 2, ..., k, такой, что UlU2…Uk=U. При этом не требуется, чтобы Ui были непересекающимися. Ri будем называть подсхемами отношения R.
Соединение без потерь.
Пусть задана схема отношения R=(U, F) и ее декомпозиция =(R1, R2, …, Rk). Говорят, что эта декомпозиция обладает свойством соединения без потерь относительно F, если каждое отношение R для R, удовлетворяющее F, может быть представлено в виде:
R=R1(R) ><R2(R) ><… Rk(R),
то есть R является естественным соединением его проекций на все Ri. Ясно, что свойство соединения без потерь весьма желательно, поскольку в этом случае может быть восстановлено исходное отношение.
Рассмотрим основные свойства отображения проекция-соединение.
Если =(R1, R2, ..., Rk), обозначим через M отображение, которое определяется соотношением M(R)=R1(R) ><R2(R) ><…Rk(R). Таким образом, условие соединения без потерь относительно F может быть выражено следующим образом: для всех R, удовлетворяющих F, R=M(R).
Для любой декомпозиции выполняются следующие условия:
а) R M(R);
б) если S=M(R), то Ri(S)=Ri;
в) M(M(R))=M(R).
Свойство а) означает, что декомпозиция представляет, вообще говоря, некоторое большее по количеству кортежей отношение, чем исходное отношение, и если не выполнено условие соединения без потерь, то мы можем получить кортежи, которых нет в исходном отношении, что естественно нарушает адекватность базы данных.
Для проверки свойства соединения без потерь можно использовать следующий алгоритм.
Пусть заданы схема отношения R = ({А1, А2, ..., An}, F) и декомпозиция =(R1, R2, ..., Rk), Ri=(Ui), i=1, 2, ..., k.
Строим таблицу с n столбцами и k строками, столбец j соответствует атрибуту Aj, а строка i – схеме отношения Ri. На пересечении строки i и столбца j поместим символ Aj, если AjUi. B противном случае поместим туда символ *.
Просматриваем каждую из зависимостей Х>Y. Рассматривая зависимость Х—>У, изменяем строки, которые совпадают по всем столбцам, соответствующим атрибутам из X. При обнаружении двух таких строк отождествляем их символы в столбцах, соответствующих атрибутам из Y. Если при этом один из символов в одной из строк равен Aj, а символ другой строки в этом же столбце равен *, то заменяем * на Aj. Повторяем просмотр зависимостей до тех пор пока: либо некоторая строка станет равной А1, А2, ..., Аn; либо больше изменений в таблице провести нельзя. В первом случае декомпозиция обладает свойством соединения без потерь. Во втором – нет.
Примеры.
Пусть для схемы R=({А1, А2, А3, А4, А5}, {А1>А2; А2>A3; АЗ,А4>А5; А2>А4}) получена декомпозиция = (Rl, R2, R3), где
R1=({А1, А2}), R2=({А2, АЗ, А4}), R3=({АЗ, А4, А5}).
Требуется проверить, обладает ли она свойством соединения без потерь. Построим следующие таблицы:
1-я (начальная таблица):
A1 |
A2 |
* |
* |
* |
* |
A2 |
A3 |
A4 |
* |
* |
* |
A3 |
A4 |
A5 |
2-я таблица:
A1 |
A2 |
A3 |
A4 |
* |
* |
A2 |
A3 |
A4 |
A5 |
* |
* |
A3 |
A4 |
A5 |
3-я таблица:
A1 |
A2 |
A3 |
A4 |
A5 |
* |
A2 |
A3 |
A4 |
A5 |
* |
* |
A3 |
A4 |
A5 |
В последней таблице первая строка представляет собой все Aj, следовательно, декомпозиция обладает свойством соединения без потерь.
Теперь пусть для схемы
R=({А1, А2, А3, А4, А5}, {A1>A2; A2>A3; A3,A5>A4}), получена декомпозиция = (Rl, R2), где R1 = ({A1, A2}); R2 = ({A2, A3, A4, A5}). Построим следующие таблицы:
1-я таблица:
A1 |
A2 |
* |
* |
* |
* |
A2 |
A3 |
A4 |
A5 |
2-я таблица:
A1 |
A2 |
A3 |
* |
* |
* |
A2 |
A3 |
A4 |
A5 |
Больше никаких изменений в таблице сделать нельзя и строку, содержащую только Аi, мы не получили, значит, декомпозиция в этом случае не обладает свойством соединения без потерь.
Справедливо следующее утверждение.
Если =(R1(U1), R2(U2)) – декомпозиция R=(U, F), то обладает свойством соединения без потерь относительно F тогда и только тогда, когда ((U1U2)>U1\U2)F+ или ((UlU2)—>U2\Ul)F+.
Это утверждение дает довольно простой способ проверки свойства соединения без потерь при декомпозиции на две подсхемы.
