Корректность операций над отношениями -Аномалии при работе с реляционной БД -Нормализация схемы РБД -Ациклические БД Аномалии - нарушения целостности БД Рассмотрим аномалии на примере отношения R0 = СОТРУДНИКИ (Код, Долж, Оклад, Отдел, Тел, Проект, Задание) Составной ключ отношения - атрибуты (Код, Проект): каждый сотрудник может участвовать в нескольких проектах и по каждому проекту иметь задание В этом отношении имеется избыточность: сведения о сотруднике повторяются столько раз, сколько заданий он имеет Код 1 1 2 2 3 3 Долж Инж -"Инж -"Лаб -“- Сотрудники Оклад Отдел Тел 2000 15 15-11 -"-"-"2500 15 15-11 -“-“-“1500 20 20-02 -“-“-“- Проект Задание А А1 С С3 А А2 В В25 Д Д1 С С1 Виды аномалий • Аномалия вставки записи • Аномалия удаления записи • Аномалия изменения (обновления) записи при добавлении нового сотрудника, который пока не участвует ни в одном проекте, ключ имеет неопределенное значение при удалении записи об уволенном сотруднике нужно удалить несколько записей, причем теряются данные о работе, которую он выполнял при изменении оклада сотрудника нужно изменить не одну, а несколько записей, чтобы они не противоречили друг другу ЭТИ АНОМАЛИИ ВЫЗВАНЫ ИЗБЫТОЧНОСТЬЮ БД Нормальные формы отношений Нормальная форма Форма представления схемы реляционной БД на каком-либо шаге последовательного улучшения исходной модели. 1НФ Отношение находится в первой нормальной форме, если домены для каждого его атрибута являются атомарными фамилия Имя адрес город Улица- дом Астров Сергей Пенза Мира-25 Петров Иван Пенза Кирова-3 Каменка Ленина-2 Никольск Горная-1 Алексей Пример не нормализованной таблицы : множественные значения доменов для атрибутов Имя, Адрес Виды нормальных форм 1НФ 2 НФ 3НФ БКНФ 4НФ 5НФ Свойства нормальных форм каждая следующая нормальная форма улучшает свойства предыдущей при переходе к следующей нормальной форме свойства предыдущих нормальных форм сохраняются Классическая методика нормализации схемы РБД Декомпозиция: следует разбить исходную таблицу на две или более связанных таблиц, удовлетворяющих требованиям следующей нормальной формы фамилия Имя город Астров Петров Сергей код фамилия Имя Улица- дом 1 Астров Сергей Мира-25 2 Петров Иван 3 Петров Алексей адрес Пенза Кирова-3 Иван Каменка Ленина-2 Алексей Никольск Горная-1 код город Улица- дом 1 Пенза Мира-25 1 Пенза Кирова-3 2 Каменка Ленина-2 3 Никольск Горная-1 Функциональные зависимости атрибутов Функциональная зависимость в отношении R атрибут Y функционально зависит от атрибута X в том и только в том случае, если каждому значению X соответствует в точности одно значение Y: X Y X функционально определяет Y Полная функциональная зависимость функциональная зависимость X -> Y называется полной, если атрибут Y не зависит функционально от любого точного подмножества X (точным подмножеством множества X называется любое его подмножество, не совпадающее с X) Транзитивная функциональная зависимость функциональная зависимость X->Y называется транзитивной, если существует такой атрибут Z, что имеются функциональные зависимости X->Z и Z->Y Ключи, независимые атрибуты Возможный ключ атомарный или составной атрибут, значения которого полностью функционально определяют значения всех остальных атрибутов отношения Неключевой атрибут любой атрибут отношения, не входящий в состав первичного ключа Взаимно независимые атрибуты два или более атрибутов, ни один из которых не зависит функционально от других атрибутов Пример определения ФЗ Сотрудники Таб. номер 1 1 2 2 3 3 Долж Оклад Отдел Тел Проект Задание Инж Инж Инж Инж Лаб Лаб 2000 2 000 2500 2500 1500 1500 15 15 15 15 20 20 15-11 15-11 15-11 15-11 20-02 20-12 А С А В Д С А1 С3 А2 В25 Д1 С1 Первичный ключ: НОМЕР, ПРОЕКТ Функциональные зависимости: Номер -> Долж неполные ФЗ (зависят от части ключа) Номер -> ОКЛАД Номер -> ОТДЕЛ Номер -> ТЕЛ неполная и транзитивная зависимость Тел -> Отдел 2НФ и 3 НФ Вторая нормальная форма отношение R находится во второй нормальной форме в том и только в том случае, когда находится в 1NF и каждый неключевой атрибут полностью функционально зависит от первичного ключа Третья нормальная форма отношение R находится в третьей нормальной форме в том и только в том случае, если находится в 2NF и каждый неключевой атрибут не транзитивно зависит от первичного ключа Пример нормализации до 2 НФ Правило: атрибуты из каждой неполной ФЗ соберем в одну таблицу, определяющий атрибут станет ключом Исходные ФЗ: Номер -> ДОЛЖ -> ОКЛАД -> ОТДЕЛ -> ТЕЛ ТЕЛ ->Отдел Получим: R2 = (НОМЕР, ДОЛЖ, ОКЛАД, ОТДЕЛ, ТЕЛ) R3 = (ТЕЛ, ОТДЕЛ) Остальные атрибуты исходной таблицы связаны полной ФЗ: R4 = (НОМЕР, ПРОЕКТ, ЗАДАНИЕ) Проверка: 1) нет ли потерянных атрибутов? 2) Можно ли с помощью операции соединения восстановить исходную таблицу? 3) требования 2НФ выполнены? (отсутствуют неполные ФЗ неключевых атрибутов от ключа) Нормализация до 3 НФ R2 = (НОМЕР, ДОЛЖ, ОКЛАД, ОТДЕЛ, ТЕЛ) Имеет транзитивную зависимость НОМЕР -> ТЕЛ -> Отдел, так как существуют также HОМЕР -> Тел и Тел -> Отдел То есть избыточность сохранилась. При изменении номера телефона отдела придется менять его значение у всех сотрудников, при удалении данных о последнем сотруднике исчезнет информация о номере телефона и отделе. Вместе с тем у нас есть R3 = (ТЕЛ, ОТДЕЛ) , поэтому можно удалить атрибут Отдел из R2 R4 (НОМЕР, ДОЛЖ, ОКЛАД, Тел) Первичный ключ: НОМЕР Функциональные зависимости полные: НОМЕР -> ДОЛЖ НОМЕР -> ОКЛАД HОМЕР -> ОТДЕЛ R3 = (ТЕЛ, ОТДЕЛ ) Первичный ключ: Тел Функциональная зависимость: ОТДЕЛ <-> ТЕЛ Считая, что в отделе один телефон, имеем взаимно однозначную ФЗ ОТДЕЛ ТЕЛ Каждое из отношений находится в 3НФ и свободно от отмеченных аномалий НФ Бойса - Кодда Детерминант детерминантом называется любой атрибут, от которого полностью функционально зависит некоторый другой атрибут Нормальная форма Бойса Кодда отношение R находится в нормальной форме Бойса-Кодда (BCNF) в том и только в том случае, если каждый детерминант является возможным ключом Замечание: если в отношении имеется только один возможный ключ (являющийся первичным ключом), то это определение становится эквивалентным определению третьей нормальной формы Пример БКНФ Рассмотрим R5 = (НОМЕР, ДОЛЖ, ОКЛАД, ТЕЛ, Пасп) Детерминанты: Пасп и Номер , Они же - возможные ключи, поэтому R5 в БКНФ Рассмотрим R6 = (КодЗадачи, Номер, Проект, Задание) Возможные ключи: КодЗадачи и (Номер, Проект) детерминант: КодЗадачи, так как имеются ФЗ: КодЗадачи (Проект, Задание) – список всех задач КодЗадачи (Номер) – распределение задач по сотрудникам Если первичный ключ (Номер, проект), то схема находится в 3NF, однако из-за зависимости части ключа от детерминанта могут быть аномалии: если задача не выдана сотруднику, то ее нельзя записать в БД, если сотрудник уволен, задача пропала, тк ключ станет неопределен Отношение не находится в БКНФ! Пример БКНФ (продолжение) Разделим отношение на 2 части: R6 = (КодЗадачи, Номер, Проект, Задание) R7=(КодЗадачи, Проект, Задание) R8=(КодЗадачи, Номер) Оба полученных отношения находятся в 3НФ и БКНФ Многозначные функциональные зависимости • Если отношение R(A,B,C) можно получить путем натурального соединения отношений R1(A,B) * R2(A,C), то в R имеется многозначная ФЗ: A B и AC (они всегда встречаются парами) Четвертая нормальная форма отношение R находится в четвертой нормальной форме (4NF) в том и только в том случае, если в случае существования многозначной зависимости A ->> B все остальные атрибуты R функционально зависят от A Иногда возможна декомпозиция не на 2, а на большее число отношений, каждое из которых обладает лучшими свойствами. В таких случаях применяют пятую НФ, но эти случаи очень редки и на практике 5NF не используется Пример многозначной ФЗ • • • • • • • • • • • Дано : Х(Завод, Изделие, Деталь, ПланИзд) Требуется нормализовать Х Выделим ФЗ: Завод, Изделие ->ПланИзд 3НФ: Х1 (Завод, Изделие, ПланИзд) Х2 (Завод, Изделие, Деталь) В Х1 двухатрибутный ключ и 1 атрибут, поэтому многозначной зависимости нет (надо min 3 атрибута) В Х2 есть МФЗ: Изделие Завод (перечень изготовителей каждого изделия), Изделие Деталь (список деталей для каждого изделия) Нужно разделить Х2 на 2 отношения: Х21(Завод, Изделие) и Х22(Изделие, Деталь) Х21 полностью содержится в Х1, поэтому Ответ: Х= Х1 * Х22 Ациклические базы данных • • • • • • Имеются отношения S1, S2, .. Sk Граф соединений: Вершины: имена S1, S2, .. Sk Связь Si-Sj – для отношений с общими атрибутами Аij – вес дуги (общие атрибуты) А-путь содержит атрибут А к каждом из отношений на пути • Ациклическая БД имеет граф соединений, который можно превратить дерево при сохранении всех А-путей для любой пары отношений с общим атрибутом А Пример циклической и ациклической схемы Х1(А,Б) А Х2(А,В) Ациклическая схема А Я1(А,О) А Х3(А,Д,Е) А Я2(А,З) О Циклическая схема З Я3(О,З,Т) Аномалии в циклических БД • Некорректные ответы на запросы, так как результат можно вычислить разным способом и ответы будут разными Приведение к ацикличности: • Добавление нового отношения с атрибутами, входящими в цикл • Добавление новых атрибутов, переименование атрибутов, разделение атрибутов. • Примеры: см. Мишенин с.94-98