web-verzus-team
@web-verzus-team
Full Stack Developer

Зачем нужна нормализация БД MySQL?

Зачем нужна нормализация БД MySQL?
Только ради устранения избыточности, дублирования данных?
Зато появляется куча дополнительных таблиц и сложные(JOIN-ы) запросы
  • Вопрос задан
  • 8263 просмотра
Решения вопроса 2
@avikb
При разработке нормализованной или денормализованной базы размер HDD играет последнюю роль.

В первую очередь нормализация данных нужна для устранения бардака и, как следствие, упрощения системы (уменьшение количества состояний системы), что приводит к существенному уменьшению ошибок.

Нормализуя данные вы перекладываете часть логики проверки данных на СУБД, такие как консистентность и (частично) корректность. То есть уже на уровне вставки/изменения данных вы не можете не заполнить обязательное к заполнению поле или изменить поле в одной таблице, но забыть (или неправильно изменить) в другой (консистентность), вы не можете в поле date внести не дату, а в в поле int не int (корректность) и вы не можете удалить запись, если есть записи, которые на неё ссылаются (консистентность).

Нормализованное состояние БД это идеальное состояние базы, денормализацию нужно делать только если без неё никак не удаётся достичь нужных результатов (при условии, что вы разбираетесь как работает СУБД, как выбираются данные, индексы, сортируются и ищутся пересечения), если для вашей системы достаточно одного сервера, то в 99% случаев денормализация данных вам совершенно не нужна и противопоказана.
Проще говоря - если вы не знаете зачем нужна нормализация, то вам однозначно она нужна.
Ответ написан
Комментировать
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
Нормализация нужна для борьбы с избыточностью. т.е. данные не дублируются и связаны только внешними ключами.
Видимо это было очень важно когда размер HDD был 10 мегабайт. Текущая практика показывает, что полностью нормализованная база работает очень медленно, т.к. обледенения данных это дорогая операция. Так же вы верно подметили относительно роста сложности запросов.
Однако в нормализации обновляемых данных есть и жирный плюс, вам не надо обновлять/удалять и вставлять, одни и те же данные в куче таблиц. Ведь это тоже сложно, держать в голове всё, что нужно обновить, что приводит к ошибкам. Также решает вопросы сложности разгуливания операций изменения данных когда операция прошла не полностью.

Поэтому оптимальность где то посередине.

Так же не забываете, что нормализованные таблицы гораздо проще проецировать на модели в языках программирования.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
dimonchik2013
@dimonchik2013
non progredi est regredi
сухо тут
поинтереснее тут 6-7я лекция

если кратко - чудесов не бывает, при JOIN память поедается только при JOIN, а без нормализции - всегда

компьютеру на кучу таблиц - пофиг, он вообще ничего кроме нулей и единиц не видит
Ответ написан
Комментировать
sivabur
@sivabur
Заблокировали просто так!
Вы сами ответили на свой вопрос.
Выиграш в размере проиграш в скорости.
Существует также денормализация.

пс: гугл вам на что)
Ответ написан
Чтобы избежать бардака в данных (аномалий), чреватого их потерей или неоднозначной трактовкой. Про нормализацию и устраняемые каждой нормальной формой аномалии кратко и наглядно написано в книге SQL Antipatterns в приложении А.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы