Когда вы должны денормализовать?

Я думаю, что мы все знакомы с нормализацией базы данных .

Мой вопрос: каковы некоторые рекомендации, которые вы используете, когда хотите денормализовать таблицы?

37 голосов | спросил Richard 14 PM000000110000005131 2011, 23:16:51

5 ответов


31

Денормализовать, когда это OLAP-операции, нормализовать, когда OLTP (из связанной статьи в разделе Denormalization)

  

Базы данных, предназначенные для онлайн-обработки транзакций (OLTP),   обычно более нормализованы, чем базы данных, предназначенные для   аналитическая обработка (OLAP). Приложения OLTP характеризуются   большой объем небольших транзакций, таких как обновление записи о продажах на   счетчик супермаркетов. Ожидается, что каждая транзакция   оставит базу данных в согласованном состоянии. Напротив, базы данных   предназначенные для операций OLAP, - это в основном базы данных «читать в основном».   Приложения OLAP имеют тенденцию извлекать накопленные исторические данные   в течение длительного периода времени. Для таких баз данных избыточные или   «денормализованные» данные могут облегчить применение бизнес-аналитики.   В частности, таблицы размеров в схеме звезд часто содержат   денормализованные данные. Денормализованные или избыточные данные должны быть   тщательно контролируется во время обработки, преобразования, загрузки (ETL)   и пользователям не разрешается просматривать данные до тех пор, пока они не будут   согласованное состояние. Нормализованной альтернативой звездной схеме является   снежинка. Во многих случаях необходимость денормализации   уменьшились, поскольку компьютеры и программное обеспечение RDBMS стали более мощными, но   поскольку объемы данных, как правило, увеличиваются вместе с оборудованием и   производительность программного обеспечения, базы данных OLAP часто по-прежнему используют денормализованные   схемы.

     

Денормализация также используется для повышения производительности на   компьютеров, как в компьютеризированных кассовых аппаратах и ​​мобильных устройствах, поскольку   они могут использовать данные только для поиска (например, поиск цен).   Денормализация может также использоваться, если для платформы нет СУБД   (например, Palm), или никаких изменений в данных и быстрых   ответ имеет решающее значение.

ответил billinkc 14 PM000000110000000531 2011, 23:49:05
17

Нормализовать, пока не будет больно, денормализовать до тех пор, пока он не будет работать (т. е. производительность становится приемлемой):)

ответил Andrei Rinea 29 MarpmThu, 29 Mar 2012 15:14:09 +04002012-03-29T15:14:09+04:0003 2012, 15:14:09
12

Одной потенциально разумной причиной применения контролируемой денормализации является то, что она позволяет применить ограничение целостности к данным, которые в противном случае были бы невозможны. Большинство СУБД SQL имеют чрезвычайно ограниченную поддержку ограничений нескольких таблиц. В SQL иногда единственный эффективный способ реализации определенных ограничений состоит в том, чтобы убедиться, что атрибуты, связанные с ограничением, все присутствуют в одной таблице - даже если нормализация будет определять, что они принадлежат отдельным таблицам.

Контролируемая денормализация означает, что механизмы реализованы для обеспечения того, что несоответствия не могут возникнуть из-за избыточных данных. Стоимость этих дополнительных контролей и риск несогласованных данных необходимо учитывать при принятии решения о целесообразности денормализации.

Еще одна распространенная причина денормализации - разрешить некоторые изменения в структурах хранения или разрешить некоторую другую физическую оптимизацию, которую не разрешала бы СУБД. Согласно принципу Независимости физических данных , СУБД должна иметь средства для конфигурирования внутренних структур хранения без необходимости изменения логического представления данных в базе данных. К сожалению, многие СУБД очень ограничивают возможности физической реализации, доступные для любой схемы базы данных. Они склонны нарушать физическую независимость базы данных, поддерживая только неоптимальную реализацию желаемой логической модели.

Это должно быть очевидно, но все равно нужно сказать: во всех случаях это только изменения в функциях физической реализации, которые могут определять характеристики производительности, такие как внутренние структуры данных, файлы, индексирование, аппаратное обеспечение и т. д. Нормализация и денормализация не имеют ничего общего с оптимизацией производительности или хранения.

ответил sqlvogel 15 AM00000010000003831 2011, 01:17:38
2

Denormalize, если вы часто обращаетесь к вычисленным данным, как это предлагается в ответах на это вопрос . Стоимость хранения и обслуживания вычисленных данных часто будет меньше затрат на повторное вычисление ее снова и снова, если ваш профиль нагрузки будет тяжелым.

ответил Nick Chammas 16 PM000000110000005431 2011, 23:25:54
2

Я обычно денормализую, чтобы я мог обеспечить целостность данных с ограничениями. Одним из примеров является недавний вопрос на этом сайте - я копирую столбец в другой таблице, чтобы я мог использовать CHECK, чтобы сравнить его с другим столбцом. Другим примером этого метода является мой пост в блоге .

Вы не можете использовать ограничения CHECK для сравнения столбцов в разных строках или в разных таблицах, если только вы не обертываете такую ​​функциональность в скалярных UDF, вызываемых с помощью ограничения CHECK. Что делать, если вам действительно нужно сравнивать столбцы в разных строках или в разных таблицах, чтобы обеспечить соблюдение бизнес-правила? Например, предположим, что вы знаете время работы врача, и вы хотите, чтобы все встречи соответствовали часам работы? Конечно, вы можете использовать триггер или хранимую процедуру для реализации этого бизнес-правила, но ни триггер, ни хранимая процедура не могут дать вам 100% гарантию того, что все ваши данные чисты - кто-то может отключить или отключить ваш триггер, введите некоторые грязные данные и снова включите или заново создайте триггер. Также кто-то может напрямую изменить вашу таблицу в обход хранимых процедур. В любом случае вы можете получить данные, нарушающие ваше бизнес-правило, не зная об этом.

Позвольте мне продемонстрировать, как реализовать это бизнес-правило, используя только ограничения FK и CHECK - это гарантирует, что все данные удовлетворяют бизнес-правилу, если все ограничения доверяют.

Еще один пример: способ принудительного исполнения что периоды времени не имеют пробелов и не перекрываются .

ответил A-K 29 MarpmThu, 29 Mar 2012 18:22:14 +04002012-03-29T18:22:14+04:0006 2012, 18:22:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132