2009-06-19 4 views
0

В моем новом хранилище данных, который построен (конечно) из базы данных OLTP, я сбросил все столбцы IDENTITY и поменял их на столбцы INT.Первичные ключи и ограничения

Каков лучшие практики в отношении следующих тем более, что склад денормализованный:

  1. Первичного ключ
    -> это теперь может быть составным ключ, потому что несколько столов собрались вместе
    -> делать я нужно следить за ключевой структурой от OLTP?

  2. Ограничение
    -> есть некоторые ограничения (NOT NULL) со значениями по умолчанию (0) для битовых столбцов

ответ

1

Для первичного ключа, рассмотреть возможность использования суррогата или альтернативный ключа; вам нужно будет обслуживать медленно меняющиеся размеры, например. если вы делаете отчет за последние 5 лет по среднему объему продаж на одного замужнего/неженатого продавца, вы захотите зарегистрировать тот факт, что кто-то не состоял в браке в течение 2 лет, а затем женился на последнем 3. Это означает, что ваш хранилище данных будет имеют две строки таблицы размеров для одного и того же человека. После структуры OLTP для этого будет сложно :)

Ограничения - это не проблема; DW массивно оптимизированы для чтения (при условии, что вы заселяетесь как пакет), а ограничения не влияют на операции чтения. Обычно вы можете обойти любые проблемы ограничения с заданием заполнения DW и обрабатывать нули и т. Д. В инструменте отчетности, если это необходимо. Гораздо важнее убедиться, что значения по умолчанию соответствуют вашей концептуальной модели данных и не задают проблем в инструментах DW-клиента.

+0

@ Джереми Так что, если мой OLTP имеет таблицу Person и поиск MaritalStatus и таблицу PersonsMaritalStatus, а потом я денормализованный его, то это будет одна таблицей на складе под названием Люди с составным ключом PersonId и MaritalStatusId , Это объясняет изменение семейного положения, как вы описываете.
Мои вопросы, то есть:
ли я использовать составной ключ или создать новый столбец (как я в OLTP
ли я использовать даже тратить один кластерный индекс по этому ключу или мне сохранить его для чего-то важного? –

+0

Ну, с трудом вы должны сделать то же самое для Zipcode или PhoneNumber или любого другого поля или комбинации полей, которые будут меняться нечасто, что вам нужно будет сообщить. Вот почему большинство решений, которые обрабатывают медленно меняющиеся размеры будут реализовывать альтернативный ключ :) –

0

Я хотел бы сказать о 2 .: Битовые столбцы -> работа в BOOL перевалы -> только 1/0 (истина/ложь) разрешены -> Constraint нормально

1

Для размерности таблицы:

  • Держите суррогатный автоинкремент (личность) ПК, за исключением размера даты (см. Ниже).
  • Уверен, что у вас есть альтернативный «естественный ключ», который позволяет медленно изменять размеры (тип 2).
  • В таблицах размеров нет разрешений, заменять их подробным «n/a, not included, unknown ..»
  • Если возможно, измените булевские флаги (1/0) на подробные «Да, Нет», чтобы сделать это отчет/бизнес-пользователей.
  • Избавьтесь от вычисленных полей и замените их значениями или, по крайней мере, сохраните вычисленное поле - зависит от db.
  • Внесите схему звезд, если сможете, обменяйтесь местом для скорости. Снежинка только если вам нужно.
  • Проверьте свои запросы, если есть функция в предложении WHERE, добавьте столбец в таблицу измерений и предварительно вычислите значения.
  • Легко даты раздела измерения, если ПК выглядит 20090619.
  • Избавьтесь от проверочных ограничений и по умолчанию, перемещение, что в соответствует фазы процесса ETL. Проверки и по умолчанию замедляют загрузку, и как только вы закончите загрузку, они не играют никакой роли.

Для факта таблицы:

  • Рассмотрите возможность суррогатной автоинкрементируемый (идентификация) PK для обеспечения легкого разделения, при использовании композитного ПК, вы можете сделать составной уникальным некластерным вместо.

  • У вас есть сценарии для ваших внешних ключей в надежном месте, это обычная практика - отбрасывать ключи перед загрузкой таблиц фактов, чтобы ускорить загрузку. Некоторые люди запускают DW с внешними ключами, которые являются «логическими только», они используют запросы «look-for-orphans» после загрузки.

ETL

  • Создай свой процесс генерации тока (ETL) на всех этапах: экстракт, чистые, соответствуют, поставить.
  • Если возможно, сохраняйте промежуточные результаты (файлы) после каждого этапа для целей аудита и отладки.
  • Документируйте ETL, и если в сценариях используется элемент управления версиями, вы можете сопоставить версии скриптов с архивными (промежуточными) файлами.
  • Имейте диаграмму линии данных, Excel лучше, чем ничего. Храните версии тоже.
+0

Хорошо написано. Мне жаль, что я не смог бы это сделать. –

Смежные вопросы