2017-09-27 160 views
1

我有一个系统,它具有4个数据库工作:星型架构设计/最佳实践

  • 帐户(存储银行账户,交易等)
  • 客户端(客户端的相关信息)
  • 信用(从第三方系统变得率)
  • 质量(而且内部计算)

我想创建4个事实表,一个事实表对于每个数据库......例如,我将拥有一个以ClientAccount,Transaction,Provider作为其维度表的Account Fact表。其他数据库我将有3个类似的事实表。

我的问题是:在数据库中包含每个相应的事实表是否有意义?即在账户数据库中创建会计事实和维度表?或者为我们的所有星型模式创建一个新的数据库更好,并将所有维度和事实表包含在他们自己的数据库中?

回答

1

除非您的数据量非常小,否则您的数据仓库应该放置在与事务数据不同的数据库中。 DW具有不同的使用模式(OLTP vs OLAP),并且通常具有不同的维护时段。

我建议在一个专用的DW数据库中创建所有的Dims and Facts。我想不出有什么好处把它们分开,它可以通过没有额外的数据库来管理/安全/审计/文档来减少DBA的开销。

至于Dimensions与Facts,来自OLTP Account表的数据将用于创建一个Dim和一个事实。 DimAccount至少是包含账号的退化维。您必须查看您的数据,以确定其他任何记录是否具体是该帐户的通用属性。 FactAccount将包含对其他尺寸的引用(DimAccountType,DimCustomer,DimLocation等)

将尺寸视为查找表/下拉列表中的值,这些值是发生任何事件之前存在的值。例如,银行可以提供检查&储蓄账户,即使他们还没有任何账户。

事实记录一个事件。创建帐户时,事实记录将引用描述该事件的所有维度,并记录与该事件相关的可测量值(如果有)。

2

不知道太多的系统,我会建议这些是表而不是事实表。 维度表表示可用于构造事实的实体或对象。帐户和客户似乎很适合这一点。我不确定什么是信用和质量,但它们也可能是尺寸。

您的事实表应代表类似交易的记录。这可能是销售,交易,电话或任何数据仓库的报告。然后这个事实表将具有到每个维度表的外键。

关于单个或多个数据库:我建议将它存储在单个数据库中。使用这种方式更容易,在查询数据时不必担心数据库链接。用于填充这些事实和维度表的ETL过程可以从这四个数据库中提取数据并将其加载到一个数据库中,然后从那里将多维数据集构建到单个数据库中。