Нормализация базы данных
Схемой базы данных называется структура связей между полями и таблицами.
Определение:
Нормализацией схемы базы данных называется процедура, производимая над базой данных с целью удаления в ней избыточности.
Нормализация несет с собой немало преимуществ. Очевидно, что в нормализованной базе данных уменьшается вероятность возникновения ошибок, она занимает меньше места на жестком диске и т.д.
Для того, чтобы лучше уяснить приведенное определение нормализации, рассмотрим следующий пример. Ниже показана таблица, в которой указаны фамилии сотрудников и их профессии:
Таблица 3. Пример избыточности в таблицах базы данных
Профессия |
Сотрудник |
"Инженер" |
Гусев И.К. |
"Инженер" |
Иванов П.В. |
"Рабочий" |
Иванов К.Л. |
"Рабочий" |
Дружков П.К. |
"Рабочий" |
Фомичев В.М. |
Эта таблица избыточна - для каждого из сотрудников повторяются одинаковые названия профессий. Т.е. схема такой базы данных не нормализована. Для небольшой базы данных это не критично, но в больших по объёму базах данных это скажется на размере базы и, в конечном счёте, на скорости доступа. Для нормализации необходимо разбить эту таблицу на две - для профессий (см. табл. 4) и для фамилий сотрудников (см. табл. 5).
Таблица 4. Таблица профессий
Профессия |
Первичный ключ |
"Инженер" |
1 |
"Рабочий" |
2 |
Таблица 5. Таблица сотрудников
Профессия (внешний ключ) |
Сотрудник |
1 |
Гусев И.К. |
1 |
Иванов П.В. |
2 |
Иванов К.Л. |
2 |
Дружков П.К. |
2 |
Фомичев В.М. |
Теперь каждый тип профессии обозначен уникальным числом, и строка в базе данных присутствует только в единственном экземпляре: в таблице профессий. Размер поля "профессия" уменьшился, так как строка занимает больше памяти, чем число.
Замечание
В теории баз данных говорится о том, что схема базы данных должна быть полностью нормализована. При работе с полностью нормализованными базами данных необходимо применять весьма сложные SQL-запросы, что приводит к обратному эффекту - замедлению работы базы данных. Поэтому иногда для упрощения запросов даже прибегают к обратной процедуре - денормализации.