Нормализация в основном заключается в разработке схемы базы данных таким образом, чтобы избежать дублирования и избыточности данных. Если некоторый фрагмент данных дублируется в нескольких местах в базе данных, существует риск его обновления в одном месте, но не в другом, что приводит к повреждению данных.
Существует ряд уровней нормализации от 1. нормальной формы до 5. нормальной формы. Каждая нормальная форма описывает, как избавиться от какой-то конкретной проблемы, обычно связанной с избыточностью.
Некоторые типичные ошибки нормализации:
(1) Наличие более одного значения в ячейке. Пример:
UserId | Car
---------------------
1 | Toyota
2 | Ford,Cadillac
Здесь столбец «Автомобиль» (который является строкой) имеет несколько значений. Это оскорбляет первую нормальную форму, которая говорит, что каждая ячейка должна иметь только одно значение. Мы можем решить эту проблему, выделив отдельный ряд для каждой машины:
UserId | Car
---------------------
1 | Toyota
2 | Ford
2 | Cadillac
Проблема наличия нескольких значений в одной ячейке заключается в том, что сложно обновлять, сложно запрашивать, и вы не можете применять индексы, ограничения и так далее.
(2) Наличие избыточных неключевых данных (т. Е. Данных, излишне повторяемых в нескольких строках). Пример:
UserId | UserName | Car
-----------------------
1 | John | Toyota
2 | Sue | Ford
2 | Sue | Cadillac
Этот дизайн является проблемой, потому что имя повторяется для каждого столбца, даже если имя всегда определяется UserId. Это делает теоретически возможным изменить имя Сью в одной строке, а не в другой, что приводит к повреждению данных. Проблема решается путем разделения таблицы на две части и создания отношения первичный ключ / внешний ключ:
UserId(FK) | Car UserId(PK) | UserName
--------------------- -----------------
1 | Toyota 1 | John
2 | Ford 2 | Sue
2 | Cadillac
Теперь может показаться, что у нас все еще есть избыточные данные, потому что идентификаторы UserId повторяются; Однако ограничение PK / FK гарантирует, что значения не могут быть обновлены независимо, поэтому целостность безопасна.
Это важно? Да, это очень важно. Имея базу данных с ошибками нормализации, вы рискуете получить неверные или поврежденные данные в базу данных. Поскольку данные «живут вечно», очень трудно избавиться от поврежденных данных, когда они впервые вошли в базу данных.
Не бойтесь нормализации . Официальные технические определения уровней нормализации довольно тупые. Это звучит так, будто нормализация - сложный математический процесс. Однако нормализация - это просто здравый смысл, и вы обнаружите, что если вы разрабатываете схему базы данных с использованием здравого смысла, она обычно полностью нормализуется.
Существует множество заблуждений относительно нормализации:
некоторые считают, что нормализованные базы данных работают медленнее, а денормализация повышает производительность. Это верно только в очень особых случаях. Обычно нормализованная база данных также самая быстрая.
иногда нормализация описывается как процесс постепенного проектирования, и вы должны решить, "когда остановиться". Но на самом деле уровни нормализации просто описывают различные конкретные проблемы. Во-первых, проблемы, решаемые обычными формами выше 3-й NF, довольно редкие, поэтому есть вероятность, что ваша схема уже находится в 5NF.
Применимо ли это к чему-либо вне баз данных? Не напрямую, нет. Принципы нормализации довольно специфичны для реляционных баз данных. Однако общая основная тема - у вас не должно быть дубликатов данных, если разные экземпляры могут быть не синхронизированы - может применяться широко. Это в основном принцип DRY .