楼主: innovate511

[精华] 谈模型技术之代理键使用的深入理解

[复制链接]
论坛徽章:
47
2011新春纪念徽章
日期:2011-01-04 10:24:02奥迪
日期:2013-11-09 23:09:27保时捷
日期:2013-10-15 20:14:48阿斯顿马丁
日期:2013-10-12 09:11:59三菱
日期:2013-09-14 16:45:56雪铁龙
日期:2013-08-21 12:50:25马自达
日期:2013-08-14 12:51:35ITPUB社区千里马徽章
日期:2013-06-09 10:15:34蓝锆石
日期:2013-04-12 00:10:42劳斯莱斯
日期:2013-11-09 23:09:27
31#
发表于 2010-10-20 14:51 | 只看该作者
在数据仓库领域有一个概念叫Surrogate key,中文一般翻译为“代理关键字”。代理关键字一般是指维度表中使用顺序分配的整数值作为主键,也称为“代理键”。代理关键字用于维度表和事实表的连接。
在Kimball的维度建模领域里,是强烈推荐使用代理关键字的。在维度表和事实表的每一个联接中都应该使用代理关键字,而不应该使用自然关键字或者智能关键字(Smart Keys)。数据仓库中的主键不应该是智能的,也就是说,要避免通过主键的值就可以了解一些业务信息。当然,退化维度作为事实表的复合主键之一时例外。
使用代理关键字,有很多优点。
1.使用代理关键字能够使数据仓库环境对操作型环境的变化进行缓冲。也就是说,当数据仓库需要对来在多个操作型系统的数据进行整合时,这些系统中的数据有可能缺乏一致的关键字编码,即有可能出现重复,这时代理关键字可以解决这个问题。
2.使用代理关键字可以带来性能上的优势。和自然关键字相比,代理关键字很小,是整型的,可以减小事实表中记录的长度。这样,同样的IO就可以读取更多的事实表记录。另外,整型字段作为外键联接的效率也很高。
3.使用代理关键字可以建立一些不存在的维度记录,例如“不在促销之列”,“日期待定”,“日期不可用”等维度记录。
4.使用代理关键字可以用来处理缓慢变化维。维度表数据的历史变化信息的保存是数据仓库设计的实施中非常重要的一部分。Kimball的缓慢变化维处理策略的核心就是使用代理关键字。
当然,使用代理关键字也有它的缺点,代理关键字的使用使数据加载变得非常复杂。有关使用代理关键字的维度表和事实表的加载方法在ETL Toolkit中有详细的描述。使用代理关键字是一个从长远考虑的策略。

这些是在百度搜来的,描述的非常清楚了。就和其他技术一样,我觉得使用代理键建模有优点也有缺点,它不是一无是处也不是非用不可,关键还是要看项目中的具体情形。在我参与的数据仓库项目中都有用到了代理键,但是并不是每张维表都有,就像上面有几位说的,有些地方代理键的使用过于复杂。如何巧妙的运用,确实是一门学问。

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2007-08-21 23:50:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28ITPUB官方微博粉丝徽章
日期:2011-06-29 17:05:182010广州亚运会纪念徽章:轮滑
日期:2010-12-06 11:01:052010广州亚运会纪念徽章:高尔夫球
日期:2010-12-06 10:57:53辩论纪念章
日期:2010-11-15 09:41:552009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2008-07-10 16:47:26生肖徽章:虎
日期:2007-09-18 15:23:56茶鸡蛋
日期:2012-05-08 09:54:04
32#
发表于 2010-12-3 17:56 | 只看该作者
翻出这个精华帖再学习下~

使用道具 举报

回复
论坛徽章:
20
马上有钱
日期:2014-03-05 18:13:002013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:072012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41迷宫蛋
日期:2011-11-07 14:46:51茶鸡蛋
日期:2011-07-11 20:36:00咸鸭蛋
日期:2011-06-30 15:11:57辩论纪念章
日期:2010-11-15 09:41:552010广州亚运会纪念徽章:网球
日期:2011-05-11 14:11:47
33#
发表于 2010-12-16 14:25 | 只看该作者
也学习一下。个人经验是感觉用代理关键字会增加处理上的复杂性,所以多用组合主键,即28楼的Natual Key + Time方式。

使用道具 举报

回复
论坛徽章:
1
2011新春纪念徽章
日期:2011-02-18 11:43:35
34#
发表于 2011-2-21 21:00 | 只看该作者
原帖由 finalarrow 于 2010-12-16 14:25 发表
也学习一下。个人经验是感觉用代理关键字会增加处理上的复杂性,所以多用组合主键,即28楼的Natual Key + Time方式。


要分具体项目情况了,我这边的项目还是有不少地方用代理键的,逻辑上还是比较清晰的。知道代理键的缺点,用的时候留意就是了。

使用道具 举报

回复
论坛徽章:
0
35#
发表于 2011-6-12 22:40 | 只看该作者
先占个位置,再学习

使用道具 举报

回复
论坛徽章:
176
现任管理团队成员
日期:2011-05-07 01:45:08版主7段
日期:2012-07-05 02:21:03ITPUB长老会成员
日期:2015-05-07 15:11:10ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB牛人
日期:2010-10-25 12:41:322010数据库技术大会纪念徽章
日期:2015-04-23 10:33:192011数据库大会纪念章
日期:2015-04-23 10:33:192012数据库大会纪念章
日期:2015-04-23 10:33:192013数据库大会纪念章
日期:2015-04-23 10:33:19
36#
发表于 2011-6-14 01:15 | 只看该作者
代理键在IBM那套方案中现在成产品了,不知道08年是个什么情况

使用道具 举报

回复
论坛徽章:
51
2015年新春福章
日期:2015-03-06 11:57:31茶鸡蛋
日期:2012-03-18 19:28:08鲜花蛋
日期:2012-02-29 11:37:262012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
37#
 楼主| 发表于 2011-6-14 08:40 | 只看该作者
我首次接触全代理键项目是05年,就是IBM的项目。但是我不认为符合中国国情,所以最近几年自己设计和开发过程中,我觉得只有当有需要的时候,才使用代理键,全代理键只有在设计非常严谨、开发测试过程严谨的高成本情况下才有可能。而当前国情,更多的时候看性价比,看BI效果,没有那么大投入,你不敢设计全代理键的架构,哈哈。

使用道具 举报

回复
论坛徽章:
0
38#
发表于 2012-2-9 20:05 | 只看该作者
学习下,记得有次面试确实问道了这个问题。

使用道具 举报

回复
论坛徽章:
0
39#
发表于 2015-5-4 12:51 | 只看该作者
好文,mark,学习了

使用道具 举报

回复
论坛徽章:
0
40#
发表于 2015-9-9 10:47 | 只看该作者
现在这方面的用途越来越少了。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表