- •Белорусский государственный университет модели данных и субд Учебное пособие
- •Введение
- •Раздел 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.2.1. Функциональные зависимости и их свойства.
Пусть R=(U) – схема отношения, U={Al, A2, ..., Аn} – множество атрибутов, X, YU. Говорят, что Х функционально определяет Y или, что Y функционально зависит от X, и обозначают это Х—>Y, если в любом отношении R, являющемся текущим значением схемы R, не могут содержаться два кортежа, компоненты которых совпадают по всем атрибутам, принадлежащим множеству X, но не совпадают хотя по одному атрибуту, принадлежащему множеству Y.
Функциональные зависимости возникают различным образом, например, если R содержит описание набора объектов и А1, А2, ..., An – атрибуты этого типа объектов, а Х – множество атрибутов, образующих его ключ, то можно утверждать, что Х—>Y для любого Y{A1, А2, ..., An}. Это следует из того, что кортежи R представляют объекты, а объекты однозначно идентифицируются значениями атрибутов ключа, следовательно, два кортежа, совпадающие по атрибутам, принадлежащим X, должны представлять один и тот же объект и поэтому являются одним и тем же кортежем.
Следует отметить, что функциональные зависимости являются утверждениями обо всех отношениях, которые могут быть значениями схемы R, то есть функциональная зависимость это свойство схемы, а не конкретного экземпляра отношения. Следовательно, невозможно, анализируя конкретное текущее значение R, определить, какие зависимости имеют место для R, в лучшем случае можно утверждать о некоторых зависимостях, что они не имеют места в схеме R. Единственный способ определения функциональных зависимостей для схемы отношения заключается в том, чтобы проанализировать семантику атрибутов. В этом смысле зависимости являются фактически высказываниями о предметной области, они не могут быть доказаны формальными средствами проектирования схем баз данных, хотя, как будет показано ниже, можно выводить новые (не заданные явно при описании схемы) зависимости из уже заданных.
Пусть задано множество атрибутов U={А1, А2, ..., Аn} и некоторое множество функциональных зависимостей F, записанных в виде пар подмножеств (X, Y), X, YU, таких, что X—>Y; соответствующую схему отношения будем записывать в виде R=(U, F). Говорят, что зависимость A—>B логически следует из F, если для каждого экземпляра отношения R со схемой R, удовлетворяющего зависимостям F, удовлетворяется также зависимость A—>B. Например, легко показать, что если X—>Y и Y—>Z, то X>Z.
Пусть F+ обозначает замыкание F, то есть множество всех функциональных зависимостей, которые логически следуют из F (включая, естественно, само F); F при этом называют системой образующих структуры функциональных зависимостей. Если F+=F, то F называют замкнутым множеством зависимостей. Теперь рассмотрим задачу поиска зависимостей логически следующих из заданного набора F.
Как показал Армстронг, совокупность всех пар (X, Y), таких, что X,YU и X—>Y, образует структуру функциональных зависимостей отношения R, которая характеризуется следующим набором аксиом, называемых аксиомами Армстронга.:
а1) если XY, то X—>Y (рефлексивность);
а2) если X>Y и WZ, то XW>YZ (продолжение);
аЗ) если X—>Y и Y—>Z, то X—> Z (транзитивность).
Легко видеть, что аксиомы а2) и аЗ) могут быть объединены в одну аксиому:
а4) если X—>Y и YW—> Z, то XW—>Z (псевдотранзитивность).
Полезны также следующие свойства, вытекающие из а1)-а3):
а5) если X—>Y и X>Z, то X—>YZ (аддитивность);
а6) если X>Y и Z Y, то X—>Z (декомпозиция).
Аксиомы Армстронга можно рассматривать как правила вывода, позволяющие выводить функциональные зависимости, логически следующие из заданного набора зависимостей.
Аксиомы Армстронга являются надежными и полными, иными словами, если зависимость X—>Y выведена из F по этим аксиомам, то она выполняется в любом отношении, в котором выполняются все зависимости из F, и наоборот, если некоторая зависимость X>Y не выводится из F по аксиомам Армстронга, то можно построить экземпляр отношения, для которого выполняются все зависимости из F и не выполняется зависимость X—>Y.
Пусть задана схема отношения R=(U, F), XU, замыканием множества атрибутов Х относительно набора зависимостей F называется множество всех таких атрибутов AiU, что зависимость X—>Ai выводится из F по аксиомам Армстронга; замыкание Х обозначают Х+.
Таким образом, Х+ – максимальное по включению подмножество множества U, функционально зависимое от Х при заданном наборе функций F.
Ясно, что зависимость (X—>Y)F, тогда и только тогда, когда Х+Y.
Отметим следующие свойства замыканий:
X+X;
XY X+Y+;
(X+)+=X+.
Аналогичные свойства имеют и замыкания наборов функций.
Вычисление F+ довольно трудоемкая задача, поскольку F+ может быть довольно большим, даже если F мало, и может содержать порядка 2n элементов, где n – количество атрибутов в отношении. Фактически вычисление F+ сводится к вычислению замыканий подмножеств атрибутов.
Аксиомы Армстронга не являются достаточно удобными для непосредственного применения при вычислении замыканий подмножеств атрибутов, обычно используется описанный ниже алгоритм, его правильность легко обосновывается теми же аксиомами Армстронга. Этот алгоритм требует времени пропорционально длине всех выписанных зависимостей из набора F.
Пусть задана схема R=(U, F) и XU, требуется вычислить Х+.
Шаг 1: положить Х(0):=Х, i:=0;
Шаг 2: определить Х(i+1) – множество всех таких атрибутов уU\X(i) , что существует некоторая зависимость V—>WF, такая что Х(i)V и yW;
Шаг 3: если Х(i+1)=, то Х(i)=Х+ и конец работы, иначе X(i+1):=Х(i)X(i+1), i:=i+l и перейти к шагу 2.
Поскольку множество атрибутов U конечно, то алгоритм всегда заканчивает работу за конечное число итераций.
Пример.
Пусть R=(U, F) – схема отношения, где U={A1, A2, …, А7},
F={А1,А4—>А2; А2—>A3; АЗ—>А4; А4,А7>А5; А5>А6;
А6—>А7}, множество Х={АЗ, А5}.
Требуется вычислить Х+.
Выпишем последовательность действий для каждого этапа.
Х(0) = (АЗ, А5);
X(1)= {А4, А6}, Х(1)= {АЗ, А4, А5, А6};
Х(2)={А7}, Х(2)={АЗ, А4, A5, А6, А7};
X(3)=, следовательно, Х+= Х(2)={АЗ, А4, А5, А6, А7}.
