如何设计星型模式

Posted

技术标签:

【中文标题】如何设计星型模式【英文标题】:How to design a star schema 【发布时间】:2009-06-02 07:27:39 【问题描述】:

我很困惑我应该从哪里开始设计星型模式。

例如 我在数据库中有如下表:

Branch(branchNo, bStreetAddress, bCity)
LoanManager(empNo, empName, phone, branchNo)
Customer(custNo, custName, profession, streetAddress, city, state)
Account(accNo, accType, balance, accDate, custNo)
LoanContract(contractNo, loanType, amount, loanDate, empNo, custNo)

我想设计一个数据仓库来分析负载 如:

    2008年贷款总额。 对于贷款合同超过10个的贷款类型,贷款类型和合同数量

创建星型模式时,我应该从哪里开始?

据我了解,所有星型模式都必须有一个中心,而中心事实表包含“度量”和“与其他事实表的关系”。

那么,是不是我们在设计星型架构的时候,总是从中心开始, 首先确认措施是什么?然后选择与另一个事实表的适当关系?

但是我还有一个问题,我们应该选择什么作为Measures? 在选择度量时,我应该问自己什么问题?

【问题讨论】:

【参考方案1】:

星型架构的设计始终由客户的业务需求驱动。问了哪些问题?答案应该有多细?

在您的示例中,有趣的问题可能是“分支机构或 LoanManager 的合同数量”或“分支机构或 LoanManager 管理的贷款总额”。在这种情况下,BranchLoanManager 将成为您的维度,而Count(LoanContract)Sum(LoanContract.amount) 将成为您的度量。一个常见的附加维度是时间,通常是weekquarter

回答这些问题的架构可能如下所示:

DimBranch ( branchNo )
DimLoanManager ( empNo )
DimQuarter ( year, qNo )  -- qNo in (1,2,3,4)
DimWeek ( year, weekNo )  -- weekNo in (0..53), depending on business rules

Measures ( branchNo, empNo, year, qNo, weekNo, numContracts, sumLoans )

对于您在问题中已经提出的业务问题,维度和衡量标准如下:

    尺寸:year,测量:Sum(LoanContract.amount) 尺寸:loanType,测量:Count(LoanContract)

将这两者放在同一个星型模式中没有多大意义,因为它们既不共享维度也不共享度量。

【讨论】:

以上是关于如何设计星型模式的主要内容,如果未能解决你的问题,请参考以下文章

星型模式设计的一般理解

尝试设计涉及“租赁类型”的星型模式

总和和不同计数措施(星型模式设计公案)

在星型模式表设计中包含关系有啥好处?

设计数据仓库/星型模式 - 选择事实

三个例子,让你看懂数据仓库多维数据模型的设计