数据仓库中的代理键



我理解DWH环境中代理键的一般概念。但有两个方面我不明白,也找不到相关信息:

  1. 代理键在整个DWH中是唯一的,还是在一维中是唯一的?
  2. 如果我有一个具有层次结构的维度,该层次结构是否会影响代理键的生成?

1)代理键对于一行是唯一的——它被用作行中所有单元格之间关系的公共句柄。由于数据的存储方式不同,对于推断行中单元格之间的关系,代理键并不是严格必需的。但是,如果您的行表示实体(表)中的一个可计数标识(一行),如果您的数据库是规范化的,就会出现这种情况,那么引用一个代理键(通常是主键)比在主键中保留对所有参与者的引用更容易。例如,在一个紧凑列上维护索引要比在整行上维护索引容易。

在事实表中,代理键有另一个应用。由于数据通常来自多个源,因此您可能会遇到复合主键的问题(使用多个组合列来唯一地标识每一行),以及重复业务键的问题(取自各种源系统的键)。因为代理键用于查找,所以它的紧凑性很重要。使用递增的整数或固定长度的散列,并将源中的业务键保存在单独的列中。

2)这个问题很难回答,因为我不知道你用什么软件来管理你的维度和层次。这对事情影响很大。在典型的非规范化Kimball体系结构中,在维度表中,代理键用于引用维度表中的唯一行。在具有多个层次结构的维度表中,这一点的含义可能有点令人困惑。代理键只有在具有最高基数(成员数)的层次结构中才是真正唯一的,因为这将决定维度表中有多少行。因此,实践是,键对维度表是唯一的,并且恰好是其中的一个层次结构-具有最多成员数的那个。如果在其中添加层次结构的版本控制(缓慢更改维度),则代理键的确切含义可能具有欺骗性。

注释/Rant:我通常觉得在一个维度表中使用多个层次结构的想法非常可怕。的确,它减少了事实表中的维度引用数量,但也有缺点。维度表的非规范化有几个后果(丑陋的重复)。其中之一是在连接维度表时存在重复计数的风险。这通常由所使用的软件包修复(或掩盖),检查值是否相同,然后将它们相加并减少计数,如果是的话。但这是计数异常和求和错误的常见来源,只能由真正肮脏的黑客来处理。

yes,代理键对于一行是唯一的-它被用作行中所有单元格之间关系的公共句柄。由于数据的存储方式不同,对于推断行中单元格之间的关系,代理键并不是严格必需的。但是,如果您的行表示实体(表)中的一个可计数标识(一行),如果您的数据库是规范化的,就会出现这种情况,那么引用一个代理键(通常是主键)比在主键中保留对所有参与者的引用更容易。例如,在一个紧凑列上维护索引要比在整行上维护索引容易。

相关内容

  • 没有找到相关文章

最新更新