sql - 代理与自然主键,*特别*在数据仓库中。这有争议吗?
问题描述
代理与自然主键在数据仓库领域是否普遍存在争议?需要明确的是-无论如何,自然键都会在那里。我所说的代理键是指源系统中不存在的键,但它们是作为数据仓库的 ETL 的一部分创建的。
是否依赖源系统自然键作为主键,还是将代理键分配为 ETL 的一部分是否存在争议?
我的(有限的)理解一直是,在操作系统中——根据情况/人的不同,它可以采用任何一种方式,但在数据仓库设置中——代理键是主键的无争议规范。
准确,还是比这更有争议?
解决方案
对于几乎任何实际的数据仓库解决方案,自然键几乎都是必不可少的(业务键或域键实际上是比自然键更好的术语)。问题是是否以及何时使用代理键以及,而不是代替其他键。管理代理键会增加很多复杂性和一些重大开销,所以最好的答案是“它取决于......”。
如果您的仓库基于 HDFS 等分布式一次性写入技术,那么代理可能毫无意义。如果您正在使用一些历史数据捕获机制,例如 Microsoft 的临时表或 Oracle 的闪回,那么您可能会发现不需要代理。如果您采用基于 5NF 或 6NF 的时间建模方法,那么您通常也不需要代理,但您可能希望将它们用于某些表。
如果您使用像 Data Vault 或 Kimball 的方法这样的模板,那么您可能会想要使用代理,因为这就是它在某人的书中所说的。
推荐阅读
- google-cloud-platform - 使用 Google MQL 从分布中绘制多个百分位数
- android - 如何使用协程将数据从存储库传递到 ViewModel
- python - 使用python创建文件夹和子文件夹时出错
- ruby-on-rails - 登录状态未在应用之间共享
- python - 如何检查文件中的所有文件夹和文件中的子文件夹是否存在特定字符串
- reactjs - 输入元素标签在点击按钮时更新状态
- awk - 有没有办法使用 grep 将字符串括在双引号之间?字符串可以是任何东西,但应该用引号括起来
- azure - Azure API 首选:return=minimal header
- moodle - Moodle消息不能发送“<”符号?
- javascript - 这是对 requestAnimationFrame 的正确使用吗?