powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нормализация vs Денормализация данных for Performance tuning
24 сообщений из 24, страница 1 из 1
Нормализация vs Денормализация данных for Performance tuning
    #37704015
DamirI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток!

Уважаемые архитекторы, проектировщики баз данных, поделитесь опытом, по какому принципу, личных соображений, исходите при выборе нормализации данных? Меньше редудантных данных обеспечивает компактное их хранение, возможно и скорость, но "усложняет" oбработку "join"-ов. Денормализация- все в "одну табличку"- зато "один" select.
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37704016
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DamirIпо какому принципу, личных соображений, исходите при выборе нормализации данных?

По принципу "не хочешь срать - не мучай жопу". Не надо тюнить перфоманс если его и так
хватает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37704019
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По умолчанию нормализуется все до формы Бойса-Кодда (данные должны хранится в одном месте)
Затем, если задача позволяет и выгода от денормализации перевешивает риски бардака в данных, проводится денормализация.
Разрабатывается регламент проверки денормализованной базы, чтобы если по какому-то недоразумению бардак затесался, то его можно было выловить. Например, по ночам выполняется хитрый запрос. Если запрос данных не вывел - все хорошо, если вывел, то результат посылается письмом ДБА)
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37704627
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Уважаемые архитекторы, проектировщики баз данных, поделитесь опытом, по какому
> принципу, личных соображений, исходите при выборе нормализации данных?

Всегда нормализуем.

Меньше
> редудантных данных обеспечивает компактное их хранение, возможно и скорость, но
> "усложняет" oбработку "join"-ов.

JOIN-ы -- не проблема для СУБД, проблема -- запросы без селективных фильтров.

10-30 join-ов в запросе -- ерунда, если запрос имеет нормальный фильтр, напр.
на 10-200 записей.

Денормализация- все в "одну табличку"- зато
> "один" select.

Дебилизм.

SERG1257 тут дал вполне адекватный взгляд на вещи.
Я добавлю ещё следующее: данные у нас защищены от ad-hoc запросов пользователей
(прямые запросы запрещены, даже на чтение, а уж тем более на изменение),
поэтому свою БД мы можем денормализировать в любое время. Но принципы такие:
-- Денормализация производится только для нужд улучшения производительности,
только в крайних случаях, когда по-другому уже не выкрутится.
-- денормализация -- это СНАЧАЛА нормализация, ПОТОМ следующий шаг. Не наоборот.
В БД ВСЕГДА остаются нормализованные данные и ТОЛЬКО ОНИ модифицируются.
Денормализованные поля проносятся при этом в (обычно дочерние) таблицы.

Пользователь естественно этого изменения данных никогда не видит.

Типичный случай денормализации -- это как я бы его назвал разнесённый
селективный ключ. Набор полей, используемый в запросе, имеющий высокую
селективность, но хранящийся в разных таблицах. Чтобы сделать по нему индекс,
поля одной таблицы копируются в другую.
Например, (КЛАСС ОБЪЕКТА, СОСТОЯНИЕ ОБЪЕКТА) хранились у нас в разных таблицах,
были сведены в одну в физической БД.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37705727
DamirI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, спасибо, за компетентные ответы.

В двух словах предысторию. Сделал шефу дизайн базы, следуя принципам нормализации. Шеф, он же хозяин фирмы, посмотрел, говорит, что хотел бы немного по-другому. Одним словом- для него редудантные данные- не проблема. И он, на самом деле предложил - все в одну табличку. Скажем есть табличка с константными значиями, например, "тип самолета". Определенный "клиент" - может иметь, множество "типов самолетов". Вместо, чтобы содзавать таблицу "релатион_клиент_то_тип_самолета", предлагает, в самой табличке "клиент" создать поле "тип самолета", и в нем типы самолетов разделенные запятой. Тип поля varchar2(200byte) (oracle-db). Понятно, что в таких полях, при не совсем правильном использованием, возможно появления "мусора". Пытался и это преподнести, на это шеф говорит, что performance в таком случае оптимальна.
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37705733
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DamirI,

Я понимаю, что решение принимает шеф. Но какое и почему должны объяснить ему Вы.
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37705795
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> В двух словах предысторию. Сделал шефу дизайн базы, следуя принципам
> нормализации. Шеф, он же хозяин фирмы, посмотрел, говорит, что хотел бы немного
> по-другому.

Если шеф смотрит в БД -- это уже мегастранно. Он не должен туда смотреть, его
должен интересовать только конечный результат.

Одним словом- для него редудантные данные- не проблема. И он, на
> самом деле предложил - все в одну табличку.


Для него -- не проблема. Это ТВОЯ проблема будет. Не его. А тебе он прикажет
"ЧТОБЫ ВСЁ БУЛО ОК" -- и всё. Ты будешь отдуваться, не он.

Скажем есть табличка с константными
> значиями, например, "тип самолета". Определенный "клиент" - может иметь,
> множество "типов самолетов". Вместо, чтобы содзавать таблицу
> "релатион_клиент_то_тип_самолета", предлагает, в самой табличке "клиент" создать
> поле "тип самолета", и в нем типы самолетов разделенные запятой. Тип поля


нарушение 1 НФ, ты не сможешь обрабатывать эти данные на SQL-е.
Очень грубая ошибка проектированич БДю

> varchar2(200byte) (oracle-db). Понятно, что в таких полях, при не совсем
> правильном использованием, возможно появления "мусора".

Дело даже не в этом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37705821
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DamirIв самой табличке "клиент" создать поле "тип самолета", и в нем типы самолетов разделенные запятой. Тип поля varchar2(200byte) (oracle-db). Понятно, что в таких полях, при не совсем правильном использованием, возможно появления "мусора". Пытался и это преподнести, на это шеф говорит, что performance в таком случае оптимальна.
Оптимальна? Он забавный...
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37705896
DamirI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

>Если шеф смотрит в БД -- это уже мегастранно.
>Он не должен туда смотреть, его должен интересовать только конечный результат.

Как ни странно это не звучит, сейчас он смотрит в БД. Он, в принципе, как коллеги рассказывали, лично написал ранние версии продукта. Короче, последние пару лет, пара горе-архитекторов, с него так сказать денежки поимели, сделали ему "гавняшку". Их недавно уволили.


>нарушение 1 НФ, ты не сможешь обрабатывать эти данные на SQL-е.
>Очень грубая ошибка проектированич БДю

референтных свойств, подобных "тип самолета", и привязанных к таблице "клиент", около 15 штук. Количество "join"-ов, при создании объекта в конечном приложении- возрастает до 20. С DBA-никами разговаривал на эту тему, нормализированный вариант им был по душе. Но, сами референтные свойства никакаким образом не обратываются на уровне БД (никаких селектов не нашел). Эти свойства обрабытаваются лишь на уровне приложения.

>Для него -- не проблема. Это ТВОЯ проблема будет. Не его. А тебе он прикажет
>"ЧТОБЫ ВСЁ БУЛО ОК" -- и всё. Ты будешь отдуваться, не он.

MasterZiv, я Тебя павильно понимаю, что в данном случае лучше постараться еще и еще раз обьяснить шефу, что нормализированный вариант, будет одназначно лучше, даже при наличии множества референтных свойств, подобных "тип самолета" (ок.15)? И что "join"-ы особой проблемы на скорость предоставления данных не будут влиять?

(Hardware: топ - собственный дата-центр. Software: Oracle 10)
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37705904
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭти свойства обрабытаваются лишь на уровне приложения.
Ну разве что так...
Т.е. понимаем, что хранить свойства объекта через запятую в строку - это задница. Но берем и прикрываем эту задницу дырявым тазиком, перенося работу с этой дурацкой строкой на клиент. Это и есть наследие тех архитекторов, которое теперь никто не хочет переделывать?

Задница как была, так и осталась голая. Но по документам - прикрыта. Все довольны =)
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37705909
DamirI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon,

>наследие тех архитекторов

имеется ввиду следующее: продуктивно используется версия продукта, написанная несколько лет назад, где "тип_самолета" используется как поле. Пару лет назад, горе-арихтекторы "продали", так сказать, шефу идею про jpa. Существующую базу, даже особо не смотрели. Короче, актуальная разработка- просто "монстр"- никакой нормализации нет, performance на нуле. Шеф недавно устроил "разгоняйки",-"полетели головы". Tекущаю задача: то как озвучил выше
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37705922
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DamirI,

денормализацию стоит использовать только уже на очень больших объемах данных - мы начали где-то после 15гиг на одной табличке - доставить оборудования -> денег не выделяли
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706042
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Я понимаю, что решение принимает шеф. Но какое и почему должны объяснить ему Вы.

Если за вас решение принимает шеф, надо увольняться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706053
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Как ни странно это не звучит, сейчас он смотрит в БД. Он, в принципе, как
> коллеги рассказывали, лично написал ранние версии продукта. Короче, последние
> пару лет, пара горе-архитекторов, с него так сказать денежки поимели, сделали
> ему "гавняшку". Их недавно уволили.
>

Если товарищь предлагает делать такое:
"Вместо, чтобы содзавать таблицу "релатион_клиент_то_тип_самолета", предлагает,
в самой табличке "клиент" создать поле "тип самолета", и в нем типы самолетов
разделенные запятой. Тип поля varchar2(200byte) (oracle-db)."

то он нифига не смыслит в базах данных однозначно, а соответственно слушать его
бессмысленно (в этом вопросе)

>
> >нарушение 1 НФ, ты не сможешь обрабатывать эти данные на SQL-е.
> >Очень грубая ошибка проектированич БДю
>
> референтных свойств, подобных "тип самолета", и привязанных к таблице "клиент",
> около 15 штук. Количество "join"-ов, при создании объекта в конечном приложении-
> возрастает до 20. С DBA-никами разговаривал на эту тему, нормализированный

Ты перепутал что-то, JOIN один, точнее два. От пользователя -- к типам самолётов
пользователя и потом куда уже надо с типами самолётов пользователя.

> вариант им был по душе. Но, сами референтные свойства никакаким образом не
> обратываются на уровне БД (никаких селектов не нашел). Эти свойства
> обрабытаваются лишь на уровне приложения.

Это как ?

> MasterZiv, я Тебя павильно понимаю, что в данном случае лучше постараться еще и
> еще раз обьяснить шефу, что нормализированный вариант, будет одназначно лучше,

Он не будет однозначно лучше, он будет единственно правильным.
Другого варианта нет. Да, посторайся объяснить.

Ещё раз, такие дизайны БД -- это 100% вопиющая безграмотность проектировщика.

Ты можешь убедить шефа очень просто: создай прототип такой БД, маленький,
забей немного данных тестовых. И потом попробуй решить какую-то типовую
задачку с использованием типа самолёта пользвателя, напр, список всех рейсов
самолётов типов, записанных за данным пользователем
(НА SQL, РАЗУМЕЕТСЯ).

> даже при наличии множества референтных свойств, подобных "тип самолета" (ок.15)?
> И что "join"-ы особой проблемы на скорость предоставления данных не будут влиять?

JOIN-ы вообще для СУБД не проблема, хоть 200 их будет.
А скорость -- используешь индексы -- получаешь скорость пропорциональную
логарифму от размера таблицы. Посчитай сам. Логарифм возми напр. по основанию
10, хотя бы (в реальности основание больше).


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706056
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> имеется ввиду следующее: продуктивно используется версия продукта, написанная
> несколько лет назад, где "тип_самолета" используется как поле. Пару лет назад,
> горе-арихтекторы "продали", так сказать, шефу идею про jpa. Существующую базу,

На самом деле обсуждать так какую -то БД смысла большого нет. Надо знать
постановку задачи, надо знать БД эту, структуру её.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706057
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> денормализацию стоит использовать только уже на очень больших объемах данных -
> мы начали где-то после 15гиг на одной табличке - доставить оборудования -> денег
> не выделяли

Наоборот, я бы сказал. Чем больше БД, тем актуальнее нормализованные данные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706082
DamirI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Шеф, он же хозяин фирмы, он же руководитель ИТ-подразделения.

Подготовил оба варианта(нормализ. и денормализ.). Посмотрим, как оценят за "большим" столом, DBA-ников приглашу. На днях будет известно- отпишусь))
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706111
DamirI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706442
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DamirI http://www.selikoff.net/2008/11/19/why-too-much-database-normalization-can-be-a-bad-thing/

Там же написано, "too much Database"
В тексте написано что 10 000 пользователей и т.д.

А Вас столько-же?

По-любому, начинать с денормализации, тут уже хором все говорят - дурной тон, если-же говорить по простому, по-пацански, то это быдлокодерство, никого не хотел обидеть, но если шеф будет настаивать, то уж лучше свалить от такого шефа
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706556
DamirI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11,

- количество записей в "клиент"-е -до 10^6
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37706755
DamirI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... DBA-ники меня поддерживают относительно нормализированного варианта. Думаю, все будет в ажуре.
Так, поприкалывались с DBA-ником, все поля "клиента" как одно поле BLOB-ом сохранять- жуть )))
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37707111
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> http://www.selikoff.net/2008/11/19/why-too-much-database-normalization-can-be-a-bad-thing/

Идиотская статья. В сети сейчас много идиотов, они все пишут статьи.
Точнее, конечно же, они не такие и идиоты -- деньги зарабатывают на рекламе на
своих сайтиках и бложиках.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37707138
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если данные вообще никак не обрабатываются на уровне СУБД (куском считали, куском записали) есть паллиатив в виде XML
Проблема в том, что если база стала успешной вероятность ее использования не через приложение растет.
Нарушение нормальных форм - потенциальные грабли и на них идут когда овчинка явно стоит выделки.
Шефу можете найти SQL Antipatterns: Avoiding the Pitfalls of Database Programming там грабли расписаны по пунктам.
А вообще ты попал.
...
Рейтинг: 0 / 0
Нормализация vs Денормализация данных for Performance tuning
    #37707395
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статья - троллинг. Типа почему можно перебегать дорогу в неположеном месте, на красный свет с аргументами - полицанер не видит, штраф - копейки, время дорого и т.д. выпуская самый главный аргумент - рано или поздно попадешь под машину так как правила написаны кровью.
В статье совсем не озвучена логическая необходимость нормализации. Да у вас на страже целостности триггеры, пермишены, процедуры и вооруженная охрана, но тот кто будет базу ломать (не по злобному умыслу конечно, он уже найден, сознался, расстрелян уволен) отключит триггеры, будет иметь необходимые пермишены, не запустит вашу процедуру и покажет пропуск охране.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нормализация vs Денормализация данных for Performance tuning
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]