【问题标题】:Surrogate vs Natural Primary Keys, *SPECIFICALLY* in a Data Warehouse. Is this debated?代理与自然主键,*特别*在数据仓库中。这有争议吗?
【发布时间】:2019-12-04 01:36:51
【问题描述】:

代理与自然主键在数据仓库领域是否普遍存在争议?需要明确的是-无论如何,自然键都会在那里。我所说的代理键是指源系统中不存在的键,但它们是作为数据仓库的 ETL 的一部分创建的。

是否依赖源系统自然键作为主键,还是将代理键分配为 ETL 的一部分是否存在争议?

我的(有限的)理解一直是,在操作系统中——它可以根据情况/人而采用任何一种方式,但在数据仓库设置中——代理键是主键的无争议规范。

准确,还是比这更受争议?

【问题讨论】:

  • “Surrogate”用来表示很多东西——请解释一下。自从使用 DB 实现的应用程序启动以来,有些人将“代理”用于 DBMS 选择的任何值,但有些人将其限制为已实现应用程序的用户看不到的 DB 中的值。前者将驱动程序的 ID 称为代理,但后者将其称为非代理和自然键。考虑到仓库用户不是应用程序用户,似乎您的意思是后者。 PS你的研究表明了什么?请参阅How to Ask 和投票箭头鼠标悬停文本。
  • 在这种情况下,我的意思是代理项意味着 - 一个根本不是来自操作系统的密钥,而是在数据仓库本身中创建的。非常感谢 - 我的研究刚刚阅读(Kimball & Star Schema),它把代理作为仓库中的决定性事情。然而,一位同事讨厌使用代理人并表示这是有争议的。之后我用谷歌搜索了,但对话似乎更笼统,而不是特定于数据仓库,所以我不清楚。
  • 请通过编辑而不是 cmets 澄清。

标签: sql key primary-key warehouse


【解决方案1】:

对于几乎任何实际的数据仓库解决方案而言,自然键几乎都是必不可少的(业务键域键 确实是比自然键更好的术语)。问题是是否以及何时使用代理键以及,而不是代替其他键。管理代理键会增加很多复杂性和一些重大开销,因此最好的答案是“这取决于...”。

如果您的仓库基于 HDFS 等分布式一次性写入技术,那么代理可能毫无意义。如果您正在使用一些历史数据捕获机制,例如 Microsoft 的临时表或 Oracle 的闪回,那么您可能会发现不需要代理。如果您采用基于 5NF 或 6NF 的时间建模方法,那么您通常也不需要代理,但您可能希望将它们用于某些表。

如果您使用像 Data Vault 或 Kimball 的方法这样的模板,那么您可能会想要使用代理,因为这是某人的书中所说的。

【讨论】:

  • 是的,谢谢,我不清楚。无论如何,自然(或业务)密钥都会在那里。我的问题是是否有人讨论过是依赖这些键,还是分配额外的代理键(用作主键)作为 ETL 的一部分。
猜你喜欢
  • 1970-01-01
  • 2017-09-27
  • 2018-06-05
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多