Что такое нормализация базы данных простыми словами?
Прочитав множество статей, и даже пару глав книг, я так и не понял что такое нормализация. В разных книгах/статьях/видео обычно говорят что достаточно лишь 3 уровня нормализации, при этом критерии этих уровней у разных источников разные, как я понял нормализация данных нужна для устранения избыточности (повторения данных) и если идти от обратного, то данные которые повторяются/могут повторятся в будущем, то есть не уникальные в таблице, должны выноситься в отдельную сущность\таблицу и между ними должны устанавливаться связи, но в большинстве примеров остаются повторяющиеся значения в БД, авторы говорят что значения не должны повторятся и при этом оставляют повторяющиеся значения.... Я совсем запутался, please help, и заранее извините за тупой вопрос )
Есть вероятность, что авторы тоже не до конца понимают, о чём говорят.
Есть и такие.
Я тоже не исключение.
Вы ответили себе на вопрос сами.
Вам нужно пожить с этим.
Нормализация — это процесс организации данных в базе данных, включающий создание таблиц и установление отношений между ними в соответствии с правилами, которые обеспечивают защиту данных и делают базу данных более гибкой, устраняя избыточность и несогласованные зависимости.
Все дело в скорости. Полностью нормализованная база данных жутко неудобна для работы. К тому же она тормозит из за множества джойнов. Так что выбирают компромис, между удобством, скорость и бизнес логикой.
БД нужна чтобы хранить утверждения о состоянии информационной системы.
Ситуацию в которой утверждений о состоянии какой-то части системы больше чем одно мы считаем дублированием информации. (У вас эта ситуация называется "избыточность").
Если есть дублирование информации, то возможна ситуация когда утверждения могут противоречить друг другу. В этом случае БД неконсистентна и информационная система может работать некорректна.
Нормализация БД - устранение дублирования информации в БД с целью достижения консистентности, в первую очередь. Нормальные формы - это шаги которые нужно пройти на пути к консистентности (делай раз, делай два ...)
Побочным эффектом нормализации является уменьшение размера БД.
В случаях когда производительность важнее консистентности, выполняют денормализацию БД (внесение избыточности) под определённые запросы, чтобы избежать объединений таблиц (JOIN).
По сути, любые не уникальные значения это избыточность, например есть таблица описывающая машины, и есть столбец "цвет" цвета могут повторяться, следственно под него нужно создавать отдельную таблицу? получится в итоге миллион и маленькая тележка таблиц, Я правильно понимаю что все не уникальные значения нужно будет записывать в отдельные таблицы ?
Oleg, нужно будет сделать в соответствии с вашими целями. Нормализация - инструмент.
Например, вы делаете сайт в котором пользователь будет добавлять объявление о продаже машины на сайт.
Важно ли для вас чтобы в системе были точно фиксированные цвета машин? Если важно то, забиваете все цвета в отдельную таблицу, объявления в другую, вешаете вторичный ключ. На форме простая выпадашка с цветами - при сохранении вставка идет в одну таблицу.
Или вы хотите чтобы пользователь мог добавлять цвета и консистентность тоже хотите. Тогда делаете отдельную форму добавления цветов (и тогда для вас есть отдельный котёл в аду) или ставите на форму объявления более сложный контрол где можно и цвет выбрать и добавить. Тут у вас уже 2 вставки в базу: вставить новый цвет, вставить объявление.
Или другая ситуация, приходит
Начальник (Н) и говорит: у нас 100500К пользователей, медленно создается объявление
Ты спрашиваешь (Т): а важно чтобы можно было свой цвет вставить?"
Н: да, важно, они такие прикольные цвета создают, только форма из-за этого долго грузится, и список цветов долго листать.
Тут вы закатываете рукава, на форме меняете выпадашку на текстбокс, переносите цвет текстом в таблицу с объявлениями а таблицу с цветами удаляете.
Еще раз, нормализация инструмент. Сначала цель - потом инструмент.
К сожалению цель не всегда очевидна, а в начале карьеры вообще непонятно как использовать инструменты. Поэтому у вас либо есть наставник, который укажет на ошибки, либо сделаете как получится а потом с горящей задницей будете быстро переделывать, когда система встанет.