
- •II. Реляционная модель
- •III. Функциональная зависимость
- •(Шифр поставщика*, Щифр изделия*) Цена
- •IV. Нормализация отношений
- •A) Приведение к первой Нормальной Форме
- •B) Приведение ко второй Нормальной Форме
- •C) Приведение к третьей Нормальной Форме
- •D) Приведение к нормальной форме Бойса-Кодда
- •E) Приведение к IV нормальной форме
E) Приведение к IV нормальной форме
Для иллюстрации алгоритма рассмотрим отношение Проекты (Номер проекта*.,Код сотрудника*,Задание сотрудника*)
Сотрудники отношения Проекты могут участвовать в нескольких проектах, разные проекты могут содержать одинаковые задания. Предполагается, что каждый сотрудник, участвующий в некотором проекте, выполняет все задания по этому проекту. Отношение находится в НФБК
Проекты | ||
Номер проекта* |
Код сотрудника* |
Задание сотрудника* |
П1 |
С5 |
з1 |
П1 |
С5 |
з2 |
П1 |
С5 |
з3 |
П4 |
С2 |
з1 |
П4 |
С2 |
з2 |
П4 |
С3 |
з1 |
П4 |
С3 |
з2 |
П4 |
С5 |
з1 |
П4 |
С5 |
з2 |
П7 |
С6 |
з1 |
Недостатки отношения Проект:
при подключении / отстранении от проекта некоторых сотрудников приходится добавлять / исключать из отношения столько кортежей, сколько заданий имеется в проекте;
хранение в кортежах повторяющихся значений кодов сотрудников;
перечисление всех заданий по каждому проекту для каждого сотрудника исполнителя этого проекта
В отношении Проекты существуют следующие многозначные зависимости.
Номер проекта |
|
Код сотрудника |
Номер проекта |
|
Задание сотрудника |
Теорема Фейгина:
ОтношениеR(A,B,C) можно спроецировать
без потерь в отношенияR1
(A,B) иR2
(A,C) в том
и только том случае, когда существует
зависимость А В / С (А В
и А
С).
Под проецированием без потерь понимается такой способ декомпозиции отношения, при котором исходное отношение полностью и без избыточности восстанавливается путём естественного соединения полученных отношений.
ОпределениеIV Нормальной
Формы: ОтношениеRнаходится в четвёртой нормальной форме
в том и только в том случае, когда
существует многозначная зависимость
А В, а все остальные атрибутыRфункционально зависит от А.
Отношение Проекты можно представить в виде двух отношений в IVНФ.
Проекты-сотрудники (Номерпроекта*, Кодсотрудника*)
Проекты- задания (Номер проекта*, Задание сотрудника*)
Проекты -сотрудники
Номер проекта* |
Код сотрудника* |
П1 |
С5 |
П4 |
С2 |
П4 |
С3 |
П4 |
С5 |
П7 |
С6 |
|
|
Проекты-задания | |
Номер проекта* |
Задание сотрудника* |
П1 |
з1 |
П1 |
з2 |
П1 |
з3 |
П4 |
з1 |
П4 |
з2 |
П7 |
з1 |
Дублирование кодов сотрудников устранено.
Ещё один пример. При рассмотрении алгоритма Бойса-Кодда в отношении R! были определены только простые, функциональные связи. Если ввести следующие многозначные зависимости:
CT– каждый предмет
могут вести несколько преподавателей;
C,SG– студент по
конкретной дисциплине может иметь
несколько оценок.
В этом случае, процесс нормализации отношения называется приведением к IVНФ. В целом алгоритм аналогичен алгоритму Бойса-Кодда:
Ключ исходного отношения (Iшаг) определяется точно также.
IIШаг иIIIшаг алгоритма
Бойса-Кодда применяются вначале к
сложным функциональным связям; если
они выделены из отношения, дальнейшая
декомпозиция идёт согласно алгоритму
Бойса-Кодда.
Схематическое изображение алгоритма:
:
R 1(C, H, T, R, S, G) C
→→T H,R → C H,T
→ R H,S → R C,S
→→ G
R2
(C,S,G) C,S
→→G
R3 (C,T,H,R,S) C → T H,R → C H,T
→ R H,S
→ R
В НФБК
R5 (C,H,R,S) H,R → C H,S→ R
R4 (C,T) C→→
T
Утрата
связи H,T
R
R
5(H,R,C) H,R → C
R6
(H,S,R) H,S→ R
В НФБК
В НФБК В НФБК
Ключ HS
Рассмотрим
множество сложных связейCT;C,SG
Определим ту, которая не содержит ключа исходного отношения. В данном случае обе. Следовательно, выделим ту, в которой атрибут не является подмножеством ключа ни в одной из функциональных связей.
Эта
связьCSG:
Из исходного отношения выделены элементы, входящие в указанную связь. После декомпозиции анализ будет повторён для второй сложной связи. Очевидно, что алгоритм нормализации полностью совпадает с тем, что было описано раньше. Это связанно с тем, что сложные связи не могут быть определенны на других функциональных связях, кроме уже введённых.
ОПЕРАЦИИ НАД ОТНОШЕНИЯМИ.
Операция проекции
Позволяет выбрать из отношения необходимые домены и задать порядок, в котором их надо расположить.
T = R (список атрибутов)
Отношение, полученное в результате проецирования не должно содержать повторяющихся кортежей. Следовательно, в проекции отношения и результирующем не может содержаться меньше кортежей, чем в исходном отношении.
Операция проекции не задает порядка, в котором следуют кортежи.
Товар = Поставка (№ Пост, Товар)
Договор = Поставка (Товар, № Договора)
Поставщики = Поставка (№Пост)
Перечислить товары, поступающие от всех поставщиков.
Перечислить товары, поступающие по всем договорам.
Привести список поставщиков.
Поставка
-
№ пост
Товар
№ договора
1
Шерсть
1
2
Шерсть
2
2
Шелк
1
Товар Договор
-
№ пост
Товар
Товар
№ договора
1
Шерсть
Шерсть
1
2
Шерсть
Шерсть
2
2
Шелк
Шелк
1
Поставщики
-
№ поставщика
1
2
Операция выборки
Выполняется над одним соотношением.
T = R [условие выборки]
Для значений атрибутов отношения Rформируются условия выборки следующего вида: АтрибутQзначение атрибута,
Где Q= {=, ≠,<,>,≥ ,≤}.
Эти условия могут связываться вместе с помощью логических операций и в общее условие выборки.
Результирующее отношение содержит такие кортежи из R, которые удовлетворяют заданному условию.
Дать сведения о поставках шелка: ПоставкаШ=Поставка(Товар=”Шелк”)
Операция соединения
Позволяет совместить кортежи из двух отношений в одном отношении. Операция соединения эквивалентна объединению операций произведения и ограничения.
R*S = (RS)[M1{Q(=)}M2],
Где М1 и М2 – ролевые атрибуты.
В качестве условия Qберется только равенство.
В результирующем отношении сохраняются только те кортежи, которые имеют одни и те же значения ролевых атрибутов, и общие должны не повторяться.
Атрибуты имеют общую область определения.
Пример 1:
-
Товар 1
Поставщик
Код товара
Наименование
Код поставщика
Имя
01
Шерсть
01
П1
02
Шёлк
02
П2
Приведем пример операции произведения. Операция произведения сводится к декартову произведению кортежей исходных отношений независимо от наличия ролевых атрибутов.
Возможные поставки=Товар1Поставщик
-
Возможные поставки
Код товара
Наименование
Код поставщика
Имя
01
Шерсть
01
П1
01
Шерсть
02
П2
02
Шёлк
01
П1
02
Шёлк
02
П2
Пример 2: Традиционная ситуация
ПоставкаТ |
|
Товар1 | ||||||
КП |
Код товара |
Количество |
|
КТ |
Наименование |
| ||
01 |
01 |
100 |
01 |
Шерсть |
| |||
02 |
02 |
200 |
02 |
Шёлк |
|
Поставки 2 = ПоставкаТ*Товар1
Поставки3 = Поставки2*Поставщики
Поставки 2
-
КП
Код товара
Наименование
Количество
01
01
Шерсть
100
02
02
Шелк
200
Пример 3: Исключительная ситуация
Операция соединения – операция обратная операции проекции. В некоторых случаях
при выполнении соединения получается отношение содержащее больше кортежей чем в исходном отношении. Такая ситуация называется ловушкой связей.
Поставка1 = Товар*Договор
Поставка1
-
№ поставщика
Товар
№ договора
1
Шерсть
1
1
Шерсть
2
2
Шерсть
1
2
Шерсть
2
2
Шёлк
1
Операция деления
T = R[M1÷M2]S
Операция деления может быть выполнена только над двумя отношениями синонимами, имеющими ролевые атрибуты.
Операция выполняется в 2 этапа:
Построение образов кортежей делителя по делимому;
im(делителя) = {(значения атрибутов кортежа делимого без ролевого атрибута),(….)}
Для каждого кортежа делителя просматриваются все кортежи делимого, в случае совпадения значений ролевых атрибутов, остальные атрибуты кортежа делимого будут составлять образ кортежа делителя.
Определение пересечения образов кортежей делителя, полученных в результате выполнения 1-го шага.
Дать список фирм, поставляющих товар 02 и 03.
-
Фирмы
Товар
КоФ
КоТ
КоТ
Ф1
Т1
Т2
Ф1
Т2
Т3
Ф1
Т3
Ф2
Т1
Ф2
Т2
Ф3
Т2
Ф3
Т3
Ф4
Т3
Фирма 23 = Фирма[КоТ÷ КоТ ]Товар
Этап Iim(Т2) = {(Ф1),(Ф2),(Ф3)}
im(Т3) = {(Ф1),(Ф3),(Ф4)}
Этап IIim(Т2)im(Т3) ={(Ф1),(Ф3)}
-
Фирма 23
КоФ
Ф1
Ф3
ПЯТАЯ НОРМАЛЬНАЯ ФОРМА
Результатом нормализации всех предыдущих схем отношений были два новых отношения. Иногда это сделать не удаётся, либо получаемые отношения заведомо имеют нежелательные свойства. В этом случае выполняют декомпозицию исходного отношения на отношения, количество которых превышают два.
Сотрудники-Отделы-Проекты
Код Сотрудника |
Код Отдела |
Номер Проекта |
С01 |
01 |
П36 |
С02 |
02 |
П04 |
С03 |
03 |
П04 |
С04 |
02 |
П19 |
С05 |
04 |
П01 |
С05 |
04 |
П04 |
С06 |
03 |
П07 |
С08 |
05 |
П13 |
С09 |
05 |
П14 |
С09 |
06 |
П15 |
Один сотрудник может работать в нескольких отделах, причем в каждом отделе он может принимать участие в нескольких проектах.
В одном отделе могут работать несколько сотрудников, но каждый проект выполняет только один сотрудник.
Функциональных и многозначных зависимостей между атрибутами не существует.
Исходя из структуры отношения Сотрудники-Отделы-Проекты, можно заключить, что оно находится в 4НФ. Тем не менее в отношении могут быть аномалии, связанные с возможностью повторения значений атрибутов в нескольких кортежах. Например, то что сотрудник может работать в нескольких отделах, при увольнении сотрудника требуется отыскание и последующее удаление из исходной таблицы нескольких записей.
Введем определение зависимости соединения. ОтношениеR(X,Y…,Z) удовлетворяетзависимости соединения, которую обозначим как *(X,Y…,Z), в том и только в том случае, еслиRвосстанавливается без потерь путем соединения своих проекций на подмножествоX,Y…,Z. Зависимость соединения является обобщением функциональной или многозначной зависимостей.
Определение пятой нормальной формы. Отношение Rнаходится в 5НФ(или нормальной форме проекции- соединенияPJ/NF) в том и только том случае, когда любая зависимость соединения вRследует из существования некоторого возможного ключа вR.
Образуем новые отношения из составных атрибутов отношения Сотрудники-Отделы-Проекты
СО={Код
Сотрудника, Код Отдела}
СП={Код Сотрудника, Номер Проекта}
ОП={Код Отдела, Номер Проекта}
Покажем, что если отношение Сотрудники-Отделы-Проекты спроецировать на отношения СО, СП и ОП, то соединение этих проекций даст исходное отношение. В этом случае можно утверждать, что в нашем отношении существовала зависимость соединения *(СО, СП,ОП).
СО
Код Сотрудника |
Код Отдела |
С01 |
01 |
С02 |
02 |
С03 |
03 |
С04 |
02 |
С05 |
04 |
С06 |
03 |
С08 |
05 |
С09 |
05 |
С09 |
06 |
ОП
Код Отдела |
Номер Проекта |
01 |
П36 |
02 |
П04 |
03 |
П04 |
02 |
П19 |
04 |
П01 |
04 |
П04 |
03 |
П07 |
05 |
П13 |
05 |
П14 |
06 |
П15 |
СП
Код Сотрудника |
Номер Проекта |
С01 |
П36 |
С02 |
П04 |
С03 |
П04 |
С04 |
П19 |
С05 |
П01 |
С05 |
П04 |
С06 |
П07 |
С08 |
П13 |
С09 |
П14 |
С09 |
П15 |
Ранее мы выполняли соединение двух проекций и сразу получали искомый результат. Для восстановления отношения из трех(или нескольких) проекций надо получить все попарные соединения отношений (так как информация о том, какое из них “лучше” отсутствует), над которыми затем выполнить операцию пересечения множеств. Можно проверить, так ли это.
Существуют и другие способы восстановления исходного отношения из его проекций. Так, для восстановления отношения Сотрудники-Отделы-Проекты можно соединить отношения Сотрудники-Отделы и Отделы-Проекты по атрибуту Код Отдела, после чего полученное отношение соединить с отношением Сотрудники-Проекты по составному атрибуту(Код Сотрудника, Номер Проекта).
R1=СО*ОП
R1
Код Сотрудника |
Код Отдела |
Номер Проекта |
С01 |
01 |
П36 |
С02 |
02 |
П04 |
С02 |
02 |
П19 |
С03 |
03 |
П04 |
С03 |
03 |
П07 |
С04 |
02 |
П04 |
С04 |
02 |
П19 |
С05 |
04 |
П01 |
С05 |
04 |
П04 |
С06 |
03 |
П04 |
С06 |
03 |
П07 |
С08 |
05 |
П13 |
С08 |
05 |
П14 |
С09 |
05 |
П13 |
С09 |
05 |
П14 |
С09 |
06 |
П15 |
Сотрудники-Отделы-Проекты=R1*СП
Сотрудники-Отделы-Проекты
Код Сотрудника |
Код Отдела |
Номер Проекта |
С01 |
01 |
П36 |
С02 |
02 |
П04 |
С03 |
03 |
П04 |
С04 |
02 |
П19 |
С05 |
04 |
П01 |
С05 |
04 |
П04 |
С06 |
03 |
П07 |
С08 |
05 |
П13 |
С09 |
05 |
П14 |
С09 |
06 |
П15 |
Замечание
Отношения Сотрудники-Отделы, Сотрудники-Проекты и Отделы-Проекты находятся в 5НФ. Эта форма является последней из известных. Условия ее получения довольно нетривиальны и поэтому она почти не используется на практике. Более того, она имеет определенные недостатки!
Предположим необходимо узнать, где и какие проекты исполняет сотрудник с кодом 02. Для этого в отношении Сотрудники-Отделы найдем, что сотрудник с кодом 02…