2017-01-10 2 views
0

У меня есть таблица фактов, определенная в зерне порядка/линии. Каждый заказ относится к определенной вертикали, и каждая вертикаль имеет пользовательские атрибуты для описания своих данных. Я хочу, чтобы пользователи могли запрашивать все заказы независимо от вертикали, но при запросе данных, определенных по вертикали, можно фильтровать по вертикальным конкретным атрибутам.Таблица основных/пользовательских фактов

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

Таблица фактов будет содержать VerticalKey FK. Они являются Dims я планирую сделать:

  1. DimVertical (супертипом/ядро)

    • VerticalKey (Auto Increment)
    • OrderId (альтернативный ключ)
  2. DimVertical-Car (подтип/обычай)

    • VerticalKey (Идентификатор ключа от DimVertical.VerticalKey)
    • CustomAttributeABC
    • CustomAttributeDEF
    • CustomAttributeGHI
  3. DimVertical-Motorcyle (подтип/заказ)

    • VerticalKey (Ключ от DimVertical.VerticalKey)
    • CustomAttribute123
    • CustomAttribute456

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

Это похоже на хороший подход? Во-вторых, если это прекрасный подход, скажем, «OrderType» является атрибутом супер-типа, чтобы он мог перейти в измерение DimVertical, это плохо? Я сомневаюсь в этой причине, я знаю, что вы не должны иметь размер заголовка, который является чем-то вроде этого, но я не знаю, как еще поддерживать «пользовательский» способ поиска заголовка заказа.

Заранее благодарен!

ответ

0

В theory есть три возможно отображение иерархии классов в реляционной схеме:

  • таблица в иерархии классов

  • таблица на подкласс

  • таблица на класс бетона

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

наилучшим подходом является простая схема образца с нетривиальными данными; вы быстро увидите, если запросы доступа выполняются и просты в создании.

Из моего опыта Оффен используемый подход в хранилищах данных является таблицы на иерархию классов (т.е. всех subsclasses реализованы в одной таблице), потому что

  • доступ осуществляется эффективной (без соединения) и
  • недостаток возможной несогласованности (т. Е. Вы можете хранить атрибуты автомобиля в записи мотоцикла) находится в хранилище данных не является критическим, поскольку консистенция обычно выполняется с clening ETL-заданий, а не базы данных.