事实表设计建议

时间:2012-02-28 10:41:32

标签: sql sql-server data-modeling data-warehouse

为了简单起见,我有一个交易系统,可以在医生和病人之间记录即时消息。在医生和患者之间的每次会话结束时,医生填写结果表格,该表格存储在DimOutcome表中,如下所示:

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

我正在寻找设计跟踪消息的事实表的最佳方法。需要考虑的一件事是,有时聊天会话可能无法接听(即非接触时间),然后可以跟进。

设计FactMessage的理想方法是什么,考虑到我需要跟踪每个聊天会话的DimOutcome。

我想我需要为整个会话创建一个事实和另一个事实,这是唯一的方法吗?我还想跟踪每条消息和总会话之间的时间量吗?

1 个答案:

答案 0 :(得分:2)

  

将跟踪消息的事实表

首先,要注意在事实表中通常有数据,可以是聚合的,测量的事实。维度用于过滤事实表中的数据。在数据仓库中,其他一切都没有多大意义。也许标准化的数据库模型会更好地满足您的需求。

  

有时需要考虑的一件事是   聊天会话无法回答

例如,那将是一个维度,即DimSession,保持所有会话的属性,如状态,即未答复。请注意,会话的其他属性(如参与者)可能在维度DimDoctor和DimPatient中。

你还说,你想跟踪“DimOutcome”。这有两种可能性。首先,将此信息保存在“会话”维度中。因此,您可以根据不同的结果过滤事实表。 另一种可能性是您的事实表中的每个结果都有列。这样你就可以获得每个结果的会话数量。这至少可以衡量。 您需要考虑的是事实表的粒度。每个会话或每天有一个条目吗?如果您在事实表中包含结果列,则每个会话一个条目可能不是最佳选择,因为您还可以通过按DimSession进行过滤并在事实表上执行COUNT(*)来获取此信息。

  

我想我需要为消息和另一个创建一个事实   对于整个会议,这是唯一的方法吗?

我认为这整个数据仓库的东西不是你想要的。标准化的数据结构可以更好地满足您的需求。

如果您想了解更多信息,可以谷歌寻找星型模式或雪花模式,如果您想了解数据仓库通常是如何实现的。

一个非常缩短的星型模式...

A very shortened star schema structure