12
返回列表 发新帖
楼主: bigsea1017

[FAQ] 为什么在每个基本表中要使用序列作为主键呢?

[复制链接]
论坛徽章:
0
11#
发表于 2012-6-10 01:11 | 只看该作者
使用代理键作为主键,通常发生在数据仓库建模中的维表模型。
所有公司都有这样的业务场景: 员工档案表和工资表, 而且员工有工号,当员工“张三”在2012年1月的等级上升时,他的工资涨了,但工号是不会改变的。 设计如下工资表:

使用代理键作为主键                                               
序号        工号        姓名        技术等级        有效起始日期         有效结束日期        有效标识
1        A01        张三        C         20100901        20111231                        0
2        A01        张三        B        20120101        null                            1
                                               
使用业务主键                (将张三的技术等级做Update,有效期起始时间也会update, 不过通常没有缓慢变化的维表是不需要这种有效期限定的。 )                               
        工号        姓名        技术等级        有效起始日期         有效结束日期         有效标识
        A01        张三        B                20120101                                        1
                                               
                                               
                                               
                                               
工资表                                               
员工序号        员工工号        薪资        年月                       
1                A01                10000        201111                       
1                A01                10000        201112                       
2                A01                15000        201201                       
                                               
                                               
业务需求:                                               
查询B级员工的薪资总和                                               
                                               
使用业务主键的员工表查询结果:35000                                               
                                               
使用代理键作为主键的结果是:15000                                               

使用道具 举报

回复
论坛徽章:
13
奥运会纪念徽章:帆船
日期:2012-07-10 09:43:29技术图书徽章
日期:2014-01-26 14:04:47最佳人气徽章
日期:2013-03-19 17:24:252013年新春福章
日期:2013-02-25 14:51:24ITPUB季度 技术新星
日期:2012-11-27 10:16:10奥运会纪念徽章:篮球
日期:2012-11-05 16:49:01ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:手球
日期:2012-10-09 11:27:07奥运会纪念徽章:帆船
日期:2012-08-03 14:11:29奥运会纪念徽章:网球
日期:2012-08-03 14:11:29
12#
发表于 2012-6-19 11:47 | 只看该作者
数据库设计范式或者我们经验可以感知得到,一定要有一个唯一的主键,但是现实生活中,只有序列是最可靠的唯一字段,其他字段都有可能出现重复,有些重复是人为需要,有些事设计的需要。
例如:对于员工主数据来说,身份证号码是唯一的吗?未必,有两种可能导致不唯一。
1、目前中国普遍存在的身份证重号问题,不管怎么说,这是客观存在的;
2、业务需求,例如一个员工建立了两份档案(比如:员工借调、兼职、或者等等其他原因)

使用道具 举报

回复

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

本版积分规则 发表回复

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