Теорема Хита
Декомпозиция без потерь
Существенным аспектом процедуры нормализации является декомпозиция – разбиение отношения на производные. При этом такое разбиение не должно повлечь за собой потерю информации. Если отношение разбито на два без потерь, то это разбиение можно назвать обратимым, т.е. можно произвести обратное соединение.
Пример: рассмотрим отношение Students:
StudentID | LastName | FirstName | MiddleName | GroupID | BirthDate |
Казаков | Петр | Владимирович | 1.1.1992 | ||
Васильев | Иван | Аркадьевич | 23.09.1990 | ||
Шишкина | Дарья | Сергеевна | 12.5.1991 |
1-й вариант декомпозиции. Разобьем Students на два следующих отношения:
StudentID | LastName | FirstName | MiddleName | GroupID |
Казаков | Петр | Владимирович | ||
Васильев | Иван | Аркадьевич | ||
Шишкина | Дарья | Сергеевна |
GroupID | BirthDate |
1.1.1992 | |
23.09.1990 |
При таком варианте разбиения некоторая информация утрачивается: невозможно определить верную дату рождения (BirthDate) каждого студента.
2-й вариант декомпозиции. Разобьем Students на два следующих отношения:
|
|
StudentID | LastName | FirstName | MiddleName | GroupID |
Казаков | Петр | Владимирович | ||
Васильев | Иван | Аркадьевич | ||
Шишкина | Дарья | Сергеевна |
StudentID | BirthDate |
1.1.1992 | |
23.09.1990 | |
12.5.1991 |
Это декомпозиция без потерь, поскольку эти два отношения можно объединить и получится исходное отношение Students.
Можно заметить, что процесс декомпозиции фактически представляет собой операции проекции, т.к. каждое полученное при декомпозиции отношение состоит из подмножества полей исходного отношения.
Чтобы гарантировать, что после декомпозиции обратное соединение отношений даст исходное, воспользуемся теоремой Хита.
Пусть R { А, B, С } – это отношение, где А, B и C – множества атрибутов этого отношения. Если R удовлетворяет функциональной зависимости
А→ B, то R равна соединению ее проекций по атрибутам { А, В } и { А, С }.
Первая нормальная форма (1НФ). Отношение находится в 1НФ тогда и только тогда, когда все используемые домены содержат только скалярные значения, т.е. значения всех полей отношения должны быть неделимы.
Пусть дано следующее отношение Students:
StudentID | Name |
Казаков Петр Владимирович | |
Васильев Иван Аркадьевич | |
Шишкина Дарья Сергеевна |
Поле Name содержит одновременно фамилию, имя и отчество. Это поле можно разделить на три, тогда получим отношение в 1НФ:
StudentID | LastName | FirstName | MiddleName |
Казаков | Петр | Владимирович | |
Васильев | Иван | Аркадьевич | |
Шишкина | Дарья | Сергеевна |
Следует иметь в виду, что значения полей должны быть логически неделимы, т.к. фамилия состоит из отдельных букв, но такое деление не будет иметь смысла для отношения Students.
|
|
Вторая нормальная форма (2НФ). Отношение находится во 2НФ тогда и только тогда, когда оно находится в 1НФ и каждый неключевой атрибут неприводимо зависит от первичного ключа.
Рассмотрим следующее отношение:
StudentID | LastName | FirstName | MiddleName | Course | Score |
Казаков | Петр | Владимирович | информатика | ||
Васильев | Иван | Аркадьевич | математика | ||
Шишкина | Дарья | Сергеевна | математика | ||
Васильев | Иван | Аркадьевич | информатика |
Первичным ключом здесь будет { StudentID, Course }, тогда проанализируем ФЗ этого отношения, где детерминантом является первичный ключ, а в правой части неключевой атрибут. Рассмотрим следующую ФЗ:
{ StudentID, Course } → { LastName }
Очевидно, что она является приводимой, т.к. фамилия зависит только от StudentID, а значит существует ФЗ: { StudentID } → { LastName }.
Следовательно данное отношение не находится во 2НФ. Произведем декомпозицию исходного отношения на следующие два.
Students:
StudentID | LastName | FirstName | MiddleName |
Казаков | Петр | Владимирович | |
Васильев | Иван | Аркадьевич | |
Шишкина | Дарья | Сергеевна |
Scores:
StudentID | Course | Score |
информатика | ||
математика | ||
математика | ||
информатика |
Третья нормальная форма (3НФ). Отношение находится в 3НФ тогда и только тогда, когда оно находится во 2НФ и каждый неключевой атрибут не является транзитивно зависимым от первичного ключа (это означает, что в отношении отсутствуют какие-либо взаимные зависимости).
Рассмотрим следующее отношение Students:
StudentID | LastName | FirstName | MiddleName | GroupID | Supervisor |
Казаков | Петр | Владимирович | Царев С.М. | ||
Васильев | Иван | Аркадьевич | Пестов Д.Н. | ||
Шишкина | Дарья | Сергеевна | Царев С.М. |
Так как существуют ФЗ: StudentID → GroupID и GroupID → Supervisor, то атрибут Supervisor транзитивно зависит от первичного ключа StudentID. Следовательно отношение не находится в 3НФ. Приведем отношение к 3НФ.
Students:
StudentID | LastName | FirstName | MiddleName | GroupID |
Казаков | Петр | Владимирович | ||
Васильев | Иван | Аркадьевич | ||
Шишкина | Дарья | Сергеевна |
Groups:
GroupID | Supervisor |
Царев С.М. | |
Пестов Д.Н. |