Советы по разработке таблицы фактов - PullRequest
0 голосов
/ 28 февраля 2012

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

DimOutcome
----------
PK_OutcomeKey
OutcomeCategory1
OutcomeCategory2
OutcomeCategory3
...

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

Каким был бы идеальный способ разработки FactMessage, принимая во вниманиеучитывая, что мне нужно отслеживать DimOutcome с каждым сеансом чата.

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

1 Ответ

2 голосов
/ 28 февраля 2012

таблица фактов, которая будет отслеживать сообщения

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

Одна вещь, которую необходимо учитывать, это то, что иногда сеансы чата могут остаться без ответа

Это, например, будет в измерении, то есть DimSession, содержащем атрибуты всех сеансов, таких как статус, то есть без ответа. Обратите внимание, что другие атрибуты сеанса, как и участники, могут быть в измерениях DimDoctor и DimPatient.

Вы также сказали, что хотите отслеживать «DimOutcome». Вот две возможности. Сначала вы сохраняете эту информацию в измерении «сессия». Таким образом, вы можете отфильтровать таблицу фактов для различных результатов Другая возможность состоит в том, что у вас есть столбцы для каждого результата в вашей таблице фактов. Так что у вас есть количество сеансов на результат. Это было бы по крайней мере что-то измеримое. Здесь вы должны рассмотреть детализацию таблицы фактов. Есть ли одна запись на сеанс или в день? Одна запись на сеанс, возможно, не лучший выбор, если вы используете столбцы результатов в своей таблице фактов, поскольку эту информацию также можно получить, отфильтровав по DimSession и выполнив COUNT (*) для своей таблицы фактов.

Я думаю, мне нужно будет создать один факт для сообщений, а другой - для всего сеанса это будет единственный выход?

Я думаю, что вся эта система хранения данных - это не то, что вы ищете. Нормализованная структура данных будет лучше для ваших нужд.

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

Очень укороченная звездная схема ...

A very shortened star schema structure

...