博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代理键--surrogate keys
阅读量:5948 次
发布时间:2019-06-19

本文共 727 字,大约阅读时间需要 2 分钟。

  hot3.png

代理键的用途

代理键是不具有业务含义的键,在维度建模领域里,通常代替自然键作为维度表的主键。代理键用于维度表和事实表的连接。

使用代理键有以下这些优势

  1. 整合不同业务系统的数据时,可能存在自然键重复的问题,使用代理键可以解决这个问题
  2. 使用代理键可以处理缓慢变化维(Type 2 SCD),维护历史信息记录。使用Type 2 SCD时,通常会增加一行来记录数据的变化,如果还是沿用原先的自然键,则与事实表关联的时候会出错,这个时候就需要用代理键来处理。代理键作为维度表的主键,用来在数据仓库内部中的维度表和事实表建立关联。
  3. 使用代理键可以提升性能。和自然键相比,代理键占用的存储空间小,是整型的,可以减小事实表中记录的长度。这样,同样的IO就可以读取更多的事实表记录。另外,整型字段作为外键连接的效率也很高
  4. 使用代理键可以处理一些特殊情况。举个例子,对于商店来说某些顾客是未知的,在顾客的维度表中需要增加一条未知的记录来避免在事实表中出现空的顾客表外键。

 代理键的实现

  • 数据库的自增字段,基本理念是在数据库服务器中维护一个计数器,将当前值写入一个隐藏的系统表来维护一致性,并用于赋值一个新建的数据行。每创建一行,计数器递增并将值作为该行的键值
  • MAX(key)+1,第一条记录从1开始,然后新行的值设置为该列的最大值加1,最大值用SQL函数MAX获得,对于大表存在性能问题
  • 全局唯一标识符(GUIDs),一种由算法生成的二进制长度为128位的数字标识符,确保在机器内部唯一

在数据仓库中应当避免使用GUID作为代理键。原因是GUID存储空间占用大,且作为索引效率低。

 

转载于:https://my.oschina.net/aubao/blog/1830273

你可能感兴趣的文章
Java8 lambda表达式10个示例
查看>>
innerHTML outerHTML innerText
查看>>
kafka安装教程
查看>>
go语言基础
查看>>
【Windows】字符串处理
查看>>
Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)
查看>>
CentOS使用chkconfig增加开机服务提示service xxx does not support chkconfig的问题解决
查看>>
微服务+:服务契约治理
查看>>
save
查看>>
Android DrawLayout + ListView 的使用(一)
查看>>
clear session on close of browser jsp
查看>>
关于吃掉物理的二次聚合无法实现的需要之旁门左道实现法
查看>>
mysql出现unblock with 'mysqladmin flush-hosts'
查看>>
oracle exp/imp命令详解
查看>>
开发安全的 API 所需要核对的清单
查看>>
Mycat源码中的单例模式
查看>>
WPF Dispatcher介绍
查看>>
fiddler展示serverIP方法
查看>>
已释放的栈内存
查看>>
Android网络之数据解析----SAX方式解析XML数据
查看>>