对于每种情况,事实表的注意事项是什么? 维度中的更改如何影响事实表以及它们如何在事实表中处理?为数据仓库选择SCD类型时,您需要考虑哪些事项?
0
A
回答
2
答案的最简单部分是关于事实表。没有更改,无论维度类型如何。这是因为事实和维度之间的关系是维度的替代关键。
对于维度,您需要确定哪些列可以更改,以及是否需要知道其以前的值。
如果没有列可以更改,那么SCD0通常是最合适的。你可能会用它来表示日历,也许这里的数据是不变的,除非我们恢复到中世纪的教皇而不是原子钟:)
有时你不在乎以前的值,只有当前的值无论事实的年龄如何,价值都很重要。这里的一个例子可能是客户的电话号码。我说“可能”,因为这个意义取决于商业规则。这些是SCD1维度。
如果我们关心之前的历史,我们需要在SCD2和SCD3之间做出选择。
每次维度数据更改时,SCD2都会创建一个新行。业务关键保持不变,但与新时间段有关的事实将具有新的行替代关键。一个例子可能是客户地址,其中客户始终由业务密钥C12345标识,但事实表指向ID 13,987和2465,表示该客户转移房屋,城镇等时的地址变化。
SCD3在当前行中保持“前一个”值。如果我们需要知道的是一个字段的当前值及其以前的值,那么每次该值发生更改时,我们不需要创建一个新行。更新SCD3维度需要将“当前”值转换为“先前”值,然后将新值写入“当前”值。
现在,术语会变得有点混乱,因为维度实际上可以将所有这些类型合并为一个。考虑理论上的银行账户尺寸:
- ID(代理键)
- 数(业务键)
- 帐户名称(SCD1,根据业务规则)
- 期初余额(SCD0)
- 授权签字人(SCD2,我们希望记录谁在某个时间点被授权)
- 客户关系经理(SCD3,我想要当前和以前的)
SCD类型告诉我在这些列中的任何一列发生变化时需要更新哪些内容。
- SCD0:该值永远不会改变,不需要更新。
- SCD1:更新商业密钥的所有行。
- SCD2:创建一个新的行每当这个值改变
- SCD3:更新所有以前和当前值业务键
金博尔进一步定义SCD4-6,但这些都是更常用。我不会深入细节,这个答案已经够长:)
最后,还有基数的问题需要考虑。如果您的事实一次可能与多个维度行相关,那么您可能需要一个Bridge表来处理关系。
总结:
- 事实表包含外键维度表的
- 尺寸行是通过代理键确定
- 有可能是给定的业务重点多维度行,取决于历史要求。
相关问题
- 1. 在为30 TB数据选择Graph DB时需要考虑哪些因素
- 2. NSUserDefaults与CFPreferences,需要考虑的事项
- 3. 当需要记录时,您会考虑哪种设计模式?
- 4. 实施IDisposable时需要考虑哪些风险?
- 5. 编码时我需要考虑哪些安全问题?
- 6. 在开发IMAP客户端时需要考虑哪些RFC?
- 7. 在开发SMTP客户端时需要考虑哪些RFC?
- 8. 使用HTML5shiv时需要考虑哪些问题?
- 9. 在开发POP3客户端时需要考虑哪些RFC?
- 10. 从数据库中加载海量数据 - 考虑哪些?
- 11. 更改Java文件的编码时需要考虑的事项
- 12. 实施共享内存时需要考虑的事项
- 13. 制作网站时需要考虑的事项?
- 14. 在Rails中使用会话时需要考虑的事项
- 15. 构建框架时需要考虑的事项
- 16. 当从rails 1.x移植到rails 2时,需要考虑哪些主要事项2.x
- 17. 为安卓游戏制作图片需要考虑哪些分辨率参考?
- 18. 需要考虑w/microsoft technologies的事情?
- 19. Apache Shiro需要哪些数据库表?
- 20. 开始构建数据访问层。需要考虑的事情?
- 21. 您在设计tinyurl网站时需要考虑什么?
- 22. 在GeneXus KBs中选择.NET或Java生成器时需要考虑哪些优势?
- 23. 选择数据库类型
- 24. 选择合适的jQuery AJAX超时长度时应考虑哪些因素?
- 25. 要查找哪些SQL数据类型?
- 26. C++:数据类型,要使用哪些?
- 27. 哪些数据类型我必须为布尔类型字段选择?
- 28. 迁移到早期版本的C#时需要考虑哪些因素?
- 29. 在编写HTTP代理时,我需要考虑哪些安全问题?
- 30. 移动网络 - 需要考虑的事项?