为了简单起见,我有一个交易系统,可以在医生和病人之间记录即时消息。在医生和患者之间的每次会话结束时,医生填写结果表格,该表格存储在DimOutcome表中,如下所示:
DimOutcome
----------
PK_OutcomeKey
OutcomeCategory1
OutcomeCategory2
OutcomeCategory3
...
我正在寻找设计跟踪消息的事实表的最佳方法。需要考虑的一件事是,有时聊天会话可能无法接听(即非接触时间),然后可以跟进。
设计FactMessage的理想方法是什么,考虑到我需要跟踪每个聊天会话的DimOutcome。
我想我需要为整个会话创建一个事实和另一个事实,这是唯一的方法吗?我还想跟踪每条消息和总会话之间的时间量吗?
答案 0 :(得分:2)
将跟踪消息的事实表
首先,要注意在事实表中通常有数据,可以是聚合的,测量的事实。维度用于过滤事实表中的数据。在数据仓库中,其他一切都没有多大意义。也许标准化的数据库模型会更好地满足您的需求。
例如,那将是一个维度,即DimSession,保持所有会话的属性,如状态,即未答复。请注意,会话的其他属性(如参与者)可能在维度DimDoctor和DimPatient中。有时需要考虑的一件事是 聊天会话无法回答
你还说,你想跟踪“DimOutcome”。这有两种可能性。首先,将此信息保存在“会话”维度中。因此,您可以根据不同的结果过滤事实表。 另一种可能性是您的事实表中的每个结果都有列。这样你就可以获得每个结果的会话数量。这至少可以衡量。 您需要考虑的是事实表的粒度。每个会话或每天有一个条目吗?如果您在事实表中包含结果列,则每个会话一个条目可能不是最佳选择,因为您还可以通过按DimSession进行过滤并在事实表上执行COUNT(*)来获取此信息。
我想我需要为消息和另一个创建一个事实 对于整个会议,这是唯一的方法吗?
我认为这整个数据仓库的东西不是你想要的。标准化的数据结构可以更好地满足您的需求。
如果您想了解更多信息,可以谷歌寻找星型模式或雪花模式,如果您想了解数据仓库通常是如何实现的。
一个非常缩短的星型模式...