数据仓库设计--- 如何设计一个星型模型(示列)

本文介绍了如何设计一个星型模型数据仓库,以满足统计分行和贷款管理人员的合同数量及贷款总额的需求。通过将Branch和LoanManager作为维度,LoanContract的contractNo和amount作为度量,结合时间维度(季度和周)构建了事实表Fact。同时,提供了SQL查询示例来展示如何获取统计目标的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据仓库设计— 如何设计一个星型模型(示列)

  1. 现有关系型数据库中的表如下
Branch(branchNo, branchName, 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. 统计目标如下
1.分行或贷款管理人员的 “合同数量”
2.分行或贷款管理人员的 “贷款总额”
  1. 设计思路
    星型模式都必须有一个中心,而中心事实表包含“度量”和“与其他事实表的关系(维度主键)”。
    针对上面的统计目标,Branch 和 LoanManager 将成为维度,而 LoanContract(contractNo) 和 LoanContract(amount) 将成为度量。常见的附加维度是时间,通常是周或季度。

  2. 设计的模型如下

//维度表
DimBranch ( branchNo, branchName )   //分行表
DimLoanManager ( empNo )             //贷款管理人员表
DimQuarter ( year, qNo )  -- qNo in (1,2,3,4)       //季度表
DimWeek ( year, weekNo )  -- weekNo in (0..53), depending on business rules  //周表

//事实表    描述一件事情(什么时间 在什么地点 什么人 做了什么事),一般情况是这个星型模型中数据量最大的表
//描述为:  在某年、某季度、某周 在某分行 某贷款管理人员 签了一份 价格为多少 的贷款合同
Fact( year, qNo, weekNo, empNo, branchNo, amount, contractNo )
  1. 查询sql(示列)
//分行或贷款管理人员的 “合同数量”
select 
    d.branchName, m.numContracts
from (select count(*) numContracts, branchNo from Fact group by branchNo) m 
    left join DimBranch d on m.branchNo = d.branchNo

//分行或贷款管理人员的 “贷款总额”
select 
    d.branchName, m.sumLoans
from (select sum(amount) sumLoans, branchNo from Fact group by branchNo) m 
    left join DimBranch d on m.branchNo = d.branchNo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值