如何设计星型模式

时间:2009-06-02 07:27:39

标签: sql database-design star-schema

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

例如,

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

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)

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

  1. 2008年的贷款总额。
  2. 贷款类型超过10贷款类型,贷款类型和合同数量
  3. 创建星型模式时,我应该从哪里开始?

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

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

    但我仍然有另一个问题,我们应该选择哪些措施? 在选择措施时,我应该问自己什么问题?

1 个答案:

答案 0 :(得分:8)

星型模式的设计始终由客户的业务需求驱动。有什么问题要问?答案应该如何细化?

在您的示例中,有趣的问题可能是“按分支或贷款经理合同的数量”或“按分支或贷款经理管理的贷款总额”。在这种情况下,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 )

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

  1. 维度:year,衡量:Sum(LoanContract.amount)
  2. 维度:loanType,衡量:Count(LoanContract)
  3. 将这两者放在同一个星型模式中没有多大意义,因为它们既没有共享维度也没有措施。