Лекция 10. Первые нормальные формы

advertisement
Лекция 10. Первые нормальные формы
В лекции рассматриваются первые три нормальные формы и дается
уточнение третьей нормальной формы. Приводятся примеры отношений,
несоответствующих нормальным формам, и демонстрируются способы их
нормализации.
Цель: ввести определения первых трех нормальных форм и обосновать
необходимость их применения.
Процесс нормализации
Процесс нормализации основывается на концепции нормальных форм.
Говорят, что отношение находится в определенной нормальной форме, если
оно удовлетворяет заданному набору условий.
На рис. 10.1 показано несколько нормальных форм, которые
определены к настоящему времени. Первые три были описаны Э. Коддом,
следующую формулу вывели Р. Бойс и Э. Кодд (НФБК – нормальная форма
Бойса-Кодда), а четвёртую и пятую нормальные формы определил Р. Фейгин.
Отношения в 1НФ
Отношения во 2НФ
Отношения в 3НФ
Отношения в НФБК
Отношения в 4НФ
Отношения в 5НФ
Рис. 10.1. Уровни нормализации
1
Из рис. 10.1 видно, что отношение в некоторой нормальной форме
предусматривает приведение его к предыдущей нормальной форме.
Понятия первых нормальных форм основано на функциональных
зависимостях (ФЗ) и процессе декомпозиции. Поэтому прежде всего
требуется дать определение функциональных зависимостей, рассмотреть
правила их вывода, а также возможность и необходимость декомпозиции
некоторых отношений.
Понятие функциональной зависимости
Пусть R – это отношение. С одной стороны, оно имеет конкретное
(постоянное) значение в данный момент времени. С другой стороны, это
переменная, которая в каждый момент времени может принять некоторое
новое значение.
Понятие ФЗ можно применить и к первому, и ко второму случаю.
Однако мы будем рассматривать только второй случай, т.к. он больше
соответствует реальности.
Определение функциональной зависимости. Пусть R – переменная
отношения. X и Y – произвольные подмножества множества атрибутов R.
Тогда Y функционально зависит от X, что в символическом виде
записывается как X → Y (читается как «X функционально определяет Y»)
тогда и только тогда, когда для любого допустимого значения R каждое
значение X связано точно с одним значением Y.
Здесь X называют детерминантом ФЗ, а Y – зависимой частью ФЗ.
Пример: Пусть R – это отношение Students. X – код студента, а Y –
множество всех атрибутов студента. Тогда X → Y, т.к. X представляет собой
первичный ключ, который уникально идентифицирует запись в таблице
Students.
Такое утверждение будет верно и для более общего случая: если X –
это потенциальный ключ, то множество всех атрибутов R всегда
функционально зависит от X.
Однако следует иметь в виду, что если в R имеется ФЗ, левая часть
которой не включает потенциальный ключ, то R обладает избыточностью,
что затрудняет обеспечение целостности данных и занимает лишние ресурсы
системы.
2
Если ни один атрибут не может быть опущен из левой части, то такая
функциональная
зависимость
называется
неприводимой
(точнее,
неприводимой слева).
Пример:
{StudentID, FirstName, LastName, MiddleName} → {BirthDate} –
приводимая ФЗ.
{StudentID} → {BirthDate} – неприводимая ФЗ.
Множество функциональных зависимостей называется неприводимым
тогда и только тогда, когда оно обладает всеми тремя перечисленными ниже
свойствами:
1. Зависимая часть каждой функциональной зависимости содержит
только один атрибут.
2. Детерминант каждой функциональной зависимости является
неприводимым.
3. Ни одна функциональная зависимость из множества не может быть
удалена без потери информации о связях.
Рассмотрение множества неприводимых ФЗ важно для нормализации
отношений.
Выделяют два вида ФЗ:
1. Тривиальные ФЗ – это ФЗ, в которых правая часть (Y) является
подмножеством левой части (X). С практической точки зрения они не
представляют значительного интереса, однако с точки зрения формальной
теории зависимостей необходимо учитывать их наличие.
2. Нетривиальные ФЗ. Они действительно являются ограничениями
целостности данных, поэтому в дальнейшем мы будем рассматривать именно
нетривиальные ФЗ.
Для определения того в какой нормальной форме находится
отношение, требуется найти все ФЗ. Существуют три правила Армстронга
(шведский математик), позволяющие из начального множества ФЗ вывести
возможные ФЗ.
Пусть A, B, C – это подмножества множества атрибутов отношения R,
AB – объединение этих подмножеств.
3
1. Правило рефлексивности. Если множество B является
подмножеством множества А, то А → В. (По сути, это определение
тривиальной зависимости.)
2. Правило дополнения. Если А → B, то АС → ВС.
3. Правило транзитивности. Если А → B и B→C, то А → С.
Каждое из этих правил может быть доказано на основе определения
ФЗ.
Однако в целях упрощения получения всех ФЗ можно вывести еще
несколько дополнительных правил (пусть D – это еще одно произвольное
подмножество множества атрибутов R):
4. Правило самоопределения. А → А.
5. Правило декомпозиции. Если А → ВС, то А → B и A → C.
6. Правило объединения. Если А → В и А → С, то А → ВС.
7. Правило композиции. Если А → B и С → D, то АС → BD.
8. Теорема всеобщего объединения. Если А→ B и C → D, то А( С – В )
→ BD.
Название теоремы указывает на то, что некоторые из перечисленных
выше правил могут быть выведены как частные случаи этой теоремы.
Однако следует иметь в виду, что эти правила не обеспечивают чёткого
алгоритма получения всех ФЗ. Более того, такого алгоритма не существует.
Единственный путь – это перебор всех вариантов.
Декомпозиция без потерь
Существенным аспектом процедуры нормализации является
декомпозиция – разбиение отношения на производные. При этом такое
разбиение не должно повлечь за собой потерю информации. Если отношение
разбито на два без потерь, то это разбиение можно назвать обратимым, т.е.
можно произвести обратное соединение.
Пример: рассмотрим отношение Students:
StudentID
1
2
4
LastName
Казаков
Васильев
Шишкина
FirstName MiddleName GroupID
BirthDate
Петр
Владимирович
1
1.1.1992
Иван
Аркадьевич
2
23.09.1990
Дарья
Сергеевна
1
12.5.1991
4
1-й вариант декомпозиции. Разобьем Students на два следующих
отношения:
StudentID
1
2
4
LastName
Казаков
Васильев
Шишкина
FirstName MiddleName GroupID
Петр
Владимирович
1
Иван
Аркадьевич
2
Дарья
Сергеевна
1
GroupID
BirthDate
1
1.1.1992
2
23.09.1990
При таком варианте разбиения некоторая информация утрачивается:
невозможно определить верную дату рождения (BirthDate) каждого студента.
2-й вариант декомпозиции. Разобьем Students на два следующих
отношения:
StudentID
1
2
4
LastName
Казаков
Васильев
Шишкина
FirstName MiddleName GroupID
Петр
Владимирович
1
Иван
Аркадьевич
2
Дарья
Сергеевна
1
StudentID BirthDate
1
1.1.1992
2
23.09.1990
4
12.5.1991
Это декомпозиция без потерь, поскольку эти два отношения можно
объединить и получится исходное отношение Students.
Можно заметить, что процесс декомпозиции фактически представляет
собой операции проекции, т.к. каждое полученное при декомпозиции
отношение состоит из подмножества полей исходного отношения.
Чтобы гарантировать, что после декомпозиции обратное соединение
отношений даст исходное, воспользуемся теоремой Хита.
5
Теорема Хита
Пусть R{А, B, С} – это отношение, где А, B и C – множества атрибутов
этого отношения. Если R удовлетворяет функциональной зависимости
А→ B, то R равна соединению ее проекций по атрибутам {А, В} и {А, С}.
Первая, вторая и третья нормальные формы
Первая нормальная форма (1НФ). Отношение находится в 1НФ
тогда и только тогда, когда все используемые домены содержат только
скалярные значения, т.е. значения всех полей отношения должны быть
неделимы.
Пусть дано следующее отношение Students:
StudentID
1
2
4
Name
Казаков Петр Владимирович
Васильев Иван Аркадьевич
Шишкина Дарья Сергеевна
Поле Name содержит одновременно фамилию, имя и отчество. Это
поле можно разделить на три, тогда получим отношение в 1НФ:
StudentID
LastName
1
Казаков
2
Васильев
4
Шишкина
FirstName
Петр
Иван
Дарья
MiddleName
Владимирович
Аркадьевич
Сергеевна
Следует иметь в виду, что значения полей должны быть логически
неделимы, т.к. фамилия состоит из отдельных букв, но такое деление не
будет иметь смысла для отношения Students.
Вторая нормальная форма (2НФ). Отношение находится во 2НФ
тогда и только тогда, когда оно находится в 1НФ и каждый неключевой
атрибут неприводимо зависит от первичного ключа.
Рассмотрим следующее отношение:
6
StudentID
1
2
4
2
LastName
Казаков
Васильев
Шишкина
Васильев
FirstName
Петр
Иван
Дарья
Иван
MiddleName
Владимирович
Аркадьевич
Сергеевна
Аркадьевич
Course
информатика
математика
математика
информатика
Score
5
4
5
3
Первичным ключом здесь будет {StudentID, Course}, тогда
проанализируем ФЗ этого отношения, где детерминантом является
первичный ключ, а в правой части неключевой атрибут. Рассмотрим
следующую ФЗ:
{StudentID, Course} → {LastName}
Очевидно, что она является приводимой, т.к. фамилия зависит только
от StudentID, а значит существует ФЗ: {StudentID } → {LastName}.
Следовательно данное отношение не находится во 2НФ. Произведем
декомпозицию исходного отношения на следующие два.
Students:
StudentID
LastName
1
Казаков
2
Васильев
4
Шишкина
FirstName
Петр
Иван
Дарья
MiddleName
Владимирович
Аркадьевич
Сергеевна
Scores:
StudentID
1
2
4
2
Course
информатика
математика
математика
информатика
Score
5
4
5
3
Третья нормальная форма (3НФ). Отношение находится в 3НФ тогда
и только тогда, когда оно находится во 2НФ и каждый неключевой атрибут
не является транзитивно зависимым от первичного ключа (это означает, что в
отношении отсутствуют какие-либо взаимные зависимости).
7
Рассмотрим следующее отношение Students:
StudentID
1
2
4
LastName
Казаков
Васильев
Шишкина
FirstName MiddleName GroupID Supervisor
Петр
Владимирович
1
Царев С.М.
Иван
Аркадьевич
2
Пестов Д.Н.
Дарья
Сергеевна
1
Царев С.М.
Так как существуют ФЗ: StudentID → GroupID и GroupID →
Supervisor, то атрибут Supervisor транзитивно зависит от первичного ключа
StudentID. Следовательно отношение не находится в 3НФ. Приведем
отношение к 3НФ.
Students:
StudentID
LastName
1
Казаков
2
Васильев
4
Шишкина
FirstName
Петр
Иван
Дарья
MiddleName
Владимирович
Аркадьевич
Сергеевна
GroupID
1
2
1
Groups:
GroupID
1
Царев С.М.
2
Пестов Д.Н.
Supervisor
Уточнение третьей нормальной формы – нормальная форма
Бойса-Кодда
При определении 3НФ было сделано допущение о том, что отношение
имеет только один потенциальный ключ, который и является первичным.
Если рассмотреть более общий случай, то первоначальное определение,
данное Э. Коддом для ЗНФ, оказывается не во всех случаях
удовлетворительным. В частности, оно неадекватно при выполнении
следующих условий:
1) отношение имеет два (или больше) потенциальных ключа;
2) эти потенциальные ключи являются составными;
3) они перекрываются (т.е. имеют по крайней мере один общий
атрибут).
8
Поэтому впоследствии исходное определение ЗНФ было заменено
более строгим определением Бойса-Кодда.
На практике комбинация всех трёх условий встречается редко, и для
отношений, в которых не выполняются все эти три условия, 3НФ и
нормальная форма Бойса-Кодда полностью эквивалентны.
Нормальная форма Бойса-Кодда (НФБК). Отношение находится в
нормальной форме Бойса-Кодда тогда и только тогда, когда каждая ее
нетривиальная и неприводимая слева функциональная зависимость имеет в
качестве своего детерминанта некоторый потенциальный ключ.
Рассмотрим следующее отношение:
StudentID
1
2
4
CourseID
20
20
15
TeacherID
23
12
9
Каждый кортеж означает, что некоторый студент изучает
определенную дисциплину у указанного преподавателя. При этом
существуют следующие ограничения:
1. Каждый преподаватель ведет только одну дисциплину.
2. Одну дисциплину может вести несколько преподавателей.
3. Для некоторого студента одну дисциплину ведет только один
преподаватель.
В данном отношении есть два потенциальных ключа {StudentID,
CourseID} и {StudentID, TeacherID}. Оба ключа являются составными и
они имеют общий атрибут StudentID, т.е. перекрываются. Таким образом
выполнены все три условия, которые могут привести к ситуации, когда
отношение может находиться в 3НФ, но не находится в НФБК.
Очевидно, что отношение находится в 3НФ:
 значения всех атрибутов неделимы (1НФ);
 каждый неключевой атрибут неприводимо зависит от первичного
ключа (2НФ);
 все неключевые атрибуты нетранзитивно зависят от потенциального
ключа (3НФ).
9
Однако, в данном отношении существует ФЗ TeacherID → CourseID и
TeacherID при этом не является потенциальным ключом, следовательно
отношение не находится в НФБК.
Если произвести декомпозицию этого отношения на два: {StudentID,
CourseID} и {CourseID, TeacherID}, то потеряем информацию о том, какой
именно преподаватель ведет дисциплину для конкретного студента. Это
объясняется тем, что исходное отношение является атомарным, т.е. его
нельзя разбить на две независимые проекции.
Таким образом, в процессе нормализации не всегда есть смысл
стремиться к атомарным отношениям, но, тем не менее, для основных
объектов базы данных рекомендуется добиваться атомарности.
Если отношение находится только в 1НФ, но не находится во 2НФ и
3НФ, то можно говорить об избыточности информации. Избыточность не
только увеличивает объём и трудоёмкость заполнения базы данных, но и
может привести к аномалиям обновления. Аномалии могут приводить к
трудностям при вставке, обновлении и удалении, а главное к искажению или
потере информации.
Краткие итоги. Рассмотрены первая, вторая, третья нормальные
формы и нормальная форма Бойса-Кодда. На примерах разобран процесс
приведения отношения в заданную нормальную форму.
10
Download