Sql server 预订系统的事实表/加载解决方案是什么类型? 背景
我正在使用SQL Server 2012和SSIS设计一个数据仓库。源系统处理酒店预订。保留分为两个表,标题和标题行项目。事实表将位于行项目级别,包含来自标题的一些数据 问题 我面临的挑战是,预订(及其行项目)可能会随着时间的推移而改变 例如:Sql server 预订系统的事实表/加载解决方案是什么类型? 背景,sql-server,ssis,sql-server-2012,data-warehouse,business-intelligence,Sql Server,Ssis,Sql Server 2012,Data Warehouse,Business Intelligence,我正在使用SQL Server 2012和SSIS设计一个数据仓库。源系统处理酒店预订。保留分为两个表,标题和标题行项目。事实表将位于行项目级别,包含来自标题的一些数据 问题 我面临的挑战是,预订(及其行项目)可能会随着时间的推移而改变 例如: 预订已创建 房间将添加到预订中(作为标题行项目) 客户到达并将食物/饮料添加到他们的预订中(更多行项目) 将付款添加到预订中(作为行项目) 随后可能会取消房间并从预订中删除(删除行项目) 房间中的人数可能会发生变化,从而影响该行项目 预订状态在其生命周
- 预订已创建
- 房间将添加到预订中(作为标题行项目)
- 客户到达并将食物/饮料添加到他们的预订中(更多行项目)
- 将付款添加到预订中(作为行项目)
- 随后可能会取消房间并从预订中删除(删除行项目)
- 房间中的人数可能会发生变化,从而影响该行项目
- 预订状态在其生命周期的某一点从“临时”更改为“已确认”
如果源代码行和事实之间的比例为1:1,并且在事实中存储了源系统预订代码(没有与之相反的维度建模规则),那么我建议您采用两步加载过程 <>删除/插入基于预订日期的最后X天预订(或任何你认为是主要事实日期),
你只需要考虑这对未来的发展有什么限制,也就是说,当你得到额外的源系统来添加时,你需要保持1:1的事实来保持你的负载过程的一致性。 我从未在数据加载过程中更新过事实记录,但总是删除/插入某个数据域(即,该域可能会拖20天或源系统预订代码)。这实际上与更新相同,但也会考虑删除
关于审计源代码中的更改,我建议您将其写入一个完全不同的表,而不是主要事实,因为它的目的是审计,而不是分析 在源中标识已更改记录(用于数据加载和审核)的要求意味着您需要在源中创建触发器和日志表,或者在可能的情况下启用本机SQL Server CDC 无论如何都要避免使用SSIS查找组件,因为它完全无效,并且肯定无法在4500万行上运行 坚持“插入/删除数据部分”的方法,因为它使SSIS能够插入/删除数据部分(并且无法有效地更新或查找) 在回答后续问题时: