2009-11-20 3 views
7

Каковы преимущества/недостатки де-нормализации базы данных корпоративных приложений, потому что это упростит письменные отчеты?Де-нормализовать данные в реальном времени ради отчетов - хорошо или плохо?

Pro - отчеты по проектированию в SSRS, вероятно, будут «проще», поскольку никакие объединения не потребуются.

Con - разработка/обслуживание приложения для обработки ненормированных данных станет более сложной из-за дублирования данных и синхронизации.

Другие?

+0

Я не рассматриваю де-нормализацию ради отчетов. Я создаю аргумент, так что мне не нужно. –

+0

Нормализация делает размещение данных в базе данных намного проще (включая затраты, такие как обеспечение уверенности в том, что все согласовано). Денормализация упрощает получение данных из базы данных. –

ответ

19

Денормализация ради отчетов плохая, m'kay.

Создание представлений или денормализованный хранилище данных является хорошим.

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

Вот почему вы хотите, чтобы нормализовать вашу базу данных

  1. Чтобы освободить коллекцию отношений от нежелательных вставки, обновления и удаления зависимостей;
  2. Чтобы уменьшить необходимость в реструктуризации коллекции отношений по мере ввода новых типов данных и, таким образом, увеличить срок службы прикладных программ;
  3. Чтобы сделать реляционную модель более информативной для пользователей;
  4. Сделать коллекцию отношений нейтральной для статистики запросов, где эти статистические данные могут изменяться с течением времени.

-E.F. Кодда, «Далее Нормализация база данных реляционной модели» с помощью wikipedia

+2

Просмотр не всегда является ответом, хотя многие рекомендуют их. Если у вас сложное соединение из-за сильно нормализованного дизайна базы данных, время выполнения для представления может стать неприемлемым. –

+2

+1 для mKay - jk, мои мысли точно –

+0

Я согласен с Irwin, представления не помогут, если проблема в производительности – ennuikiller

6

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

+0

Я согласен и добавлю: Если вы собираетесь де-нормализовать, вы также должны убедиться, что вы определите какую-либо процедуру или процесс, чтобы убедиться, что все ненормированные данные сохранены в синхронизации и обновлены. – FrustratedWithFormsDesigner

0

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

Если это дублирование синхронизации в исходном сообщении, жаль, что я не совсем понял это.

+0

На самом деле речь шла не о денормализации как раз вовремя. Но на самом деле де-нормировка структур навсегда. Это то, что меня попросили сделать. –

+0

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

+0

Я вижу. На данный момент отчеты запускаются в режиме реального времени через средство просмотра отчетов SSRS. У пользователей есть куча выпадающих списков и полей, через которые они могут изменять параметры и повторно запускать по своей прихоти. Наша текущая нормализованная модель не имеет проблем с производительностью в этом режиме реального времени. –

4

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

Если отчеты действительно не могут работать хорошо, создайте хранилище данных, которое денормализуется и заполняет его в ночном или недельном канале. Типичные отчеты, которые, как правило, нуждаются в этом, обычно не заботятся о том, являются ли данные актуальными, поскольку они обычно являются ежемесячными, ежеквартальными или годовыми отчетами, которые обрабатывают (и особенно агрегируют) большие объемы данных после факта.

2

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

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

1

Помимо решений для хранения данных и представлений, представленных в других ответах, которые в какой-то мере хороши, если вы готовы пожертвовать некоторой производительностью, чтобы получить хорошие результаты за последние секунды, но все равно хотите нормализованную базу данных, вы можете использовать в Oracle материализованный просмотр с быстрым обновлением при фиксации или на сервере Sql вы можете использовать кластерные индексы для представления.