Рассмотрим теперь основные способы нормализацииБД, т.е. устранения избыточности информации. Будем называть нормализованной такую БД, в которой избыточность информации устранена. В принципе все способы нормализациипроходят следующие этапы:
1. Создается универсальная БД, хранящая все атрибуты всех описываемых объектов и не являющаяся нормализованной.
2. Универсальная БД анализируется на предмет необходимости дробления выбранных атрибутов.
3. Выполняется декомпозиция: универсальная БД разбивается на ряд отношений, в каждом из которых дублирование данных исключено.
4. Для сформированных на предыдущем этапе отношений устанавливаются уникальные ключи, обеспечивающие однозначную идентификацию каждой записи в каждом отношении.
5. Между отношениями формируются связи, объединяющие их в законченную БД.
Рассмотрим пример декомпозиции. Пусть нам нужно создать телефонный справочник простейшего вида, содержащий только фамилии абонентов и их телефоны. Универсальная БД (этап 1) будет иметь вид, показанный на Рис. 23.4.
NAME
| PHONE
|
Иванов А.Б.
|
|
Иванов В.Г.
|
|
Петров Д.Е.
|
|
Сидоров М.В.
|
|
Рис. 27.4. Структура телефонного справочника
Избыточность универсальной БД в данном случае заключается в том, что фамилии в базе повторяются (число однофамильцев огромно). Это приводит к бессмысленному разрастанию базы. С другой стороны, очевидно, что чаще всего совпадают только фамилии, а инициалы остаются различными. Поэтому (этап 2) сначала нужно выполнить дробление атрибутовпутем выделения инициалов в отдельные поля (рис.4). Смысл дробления - в увеличении схожести записей.
NAME
| I1
| I2
| PHONE
|
Иванов
| А
| Б
|
|
Иванов
| В
| Г
|
|
Петров
| Д
| Е
|
|
Сидоров
| М
| В
|
|
Рис. 27.5. Дробление атрибутов
Теперь можно перейти к этапу 3 - декомпозиции нашей универсальной БД. В любом случае декомпозиция выполняется по следующему простому правилу: атрибут, содержащий повторяющуюся информацию, выделяется в отдельное отношение.
В данном случае атрибут NAME следует выделить в отдельную таблицу (обозначим ее Т1, а таблицу с телефонами - Т0) – Рис. 23.6.
Таблица Т1 уже является нормализованной: в ней все записи уникальны. Но как же установить соответствие между фамилией абонента и его номером? Сейчас эта связь потеряна. Очевидно, в таблице Т0 отсутствует какой-то важный атрибут.
T1
|
|
|
| T0
|
NAME
|
| I1
| I2
| PHONE
|
Иванов
|
| А
| Б
|
|
Петров
|
| В
| Г
|
|
Сидоров
|
| Д
| Е
|
|
|
| М
| В
|
|
Рис. 27.6. Разделение БД на таблицы