2013-10-10 3 views
2

в моей модели данных для хранения я получил следующие соотношения:Таблица фактов - выберите отдельный?

root_tbl - 1: N - entry_tbl - п: 1 - action_tbl

Есть еще несколько таблиц, но это охватывает основы. Хорошо, поэтому в основном один идентификатор из корневой таблицы содержит несколько наборов данных в таблице ввода.

Пример данных:

root_tbl: 

ID_root ; Country ; FK_User ; FK_Product 
     1 ;  UK ;  23 ;  31 
     2 ;  NL ;  42 ;  01 


entry_tbl: 

ID_entry ; FK_root ; FK_Action ; Duration 
     1 ;  1 ;  42 ; 200ms 
     2 ;  1 ;  10 ; 94ms 
     3 ;  1 ;   9 ; 300ms 
     4 ;  2 ;  10 ; 322ms 
     5 ;  2 ;  30 ; 100ms 

До сих пор так хорошо ... с этой моделью данных это довольно легко ответить на такие вещи, как, сколько записей есть «Великобритания» в стране с акции «10» и так далее , Теперь я хотел бы поместить эти данные в таблицу фактов, но моя проблема связана с этими тремя таблицами. Например, я бы использовал записи entry_tbl как факт, чем мне пришлось бы делать отдельный идентификатор в каждом случае, когда я буду считать страну, пользователя или продукт.

Тот факт, таблица будет выглядеть более или менее, как это (только представьте строки, как внешние ключи):

fact_tbl: 

ID ; FK_Action ; Duration ; Country ; User ; Product 
1 ;  42 ; 200ms ;  UK ; 23 ;  31 
1 ;  10 ;  94ms ;  UK ; 23 ;  31 
1 ;   9 ; 300ms ;  UK ; 23 ;  31 
2 ;  10 ; 322ms ;  NL ; 42 ;  01 
2 ;  30 ; 100ms ;  NL ; 42 ;  01 

Это означает, что у меня будет много избыточных данных.

Есть ли какие-либо способы решения этих проблем? Таблица фактов будет содержать строки ~ 300 - 500 м.

Надеюсь, вы поняли мою точку зрения. Если что-то не понятно, не стесняйтесь спрашивать

приветов Томас

ответ

3

Ну это обычно выполнять агрегацию на таблице фактов, в этом случае особые бы спорными.

Здесь вам нужно использовать count (distinct) для подсчета количества идентификаторов, но для этого необходим хранилище данных. Аналогично, вам может потребоваться выполнить Sum (продолжительность) или счетчик (отдельный пользователь) или счет (отдельный продукт).

Я не думаю, что у вас есть проблемы с дизайном, вы просто должны убедиться, что у вас достаточно доступной памяти для вашей группы с помощью операций, чтобы работать как можно дальше без дисковой сортировки. Контролируйте большие запросы через V $ SQL_WORKAREA_ACTIVE, следите за советами консультантов по SGA и PGA, и при необходимости отрегулируйте выделение памяти.

+0

Я задал свой вопрос ... Надеюсь, это даст лучший обзор! – user2428207

+0

Хорошо, так в основном, что вы говорите, так это то, что денормализованная таблица фактов является общей? – user2428207

+1

Я бы так не описал это - таблица фактов представляет собой набор показателей (факты) с соответствующей классификацией (размеры). То, что у вас есть, похоже на «вырожденное измерение», если для него нет отдельной таблицы измерений, но подсчет показателей в схеме звезд почти всегда будет требовать отдельного, если вы не подсчитываете количество фактов. Для этого в вашей модели вам придется денормализовать ее как одну строку на один идентификатор, поэтому один столбец будет содержать продолжительность для каждого возможного действия. Это было бы скорее подходом к датмарту - одинаково действительным, но не столь расширяемым. –

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