论坛首页 Java企业应用论坛

[讨论]业务主键 Vs. 逻辑主键,到底哪个好?

浏览 86072 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-10-21  
jnzgy 写道
看过某大型国有银行核心业务系统的部分表设计,没有看到任何所谓的逻辑主键。

我认为,orm中的逻辑主键对于orm本身来说其实可以看作业务主键。

业务主键发生变更时进行一次性升级并不是多么可怕的事。相反,增加额外的逻辑主键带来的负面影响却是在时时刻刻(开发、运行、维护)的发生着。


请问逻辑主键会给开发带来影响?运行带来影响?维护带来多大影响?

我觉得逻辑主键VS业务主键应该是Developer VS DBA的discuss   和很多dis一样 这个永远没有'最终'答案

国有银行的代码和数据库设计  别的不知道  我见过我国最大银行的  很一般很一般
0 请登录后投票
   发表时间:2005-11-08  
testu 写道
用什么样的主建要根据具体项目来定,
如果你做的是一个小论坛或是其他什么小系统,
用什么主建都可以,怎么方便怎么来就可以了,

但是对于大系统,比如银行、电信就要小心规划了,
对于这样的大系统,即使你想用什么所谓的逻辑主建,银行的人
也不可能同意的,除了性能和空间的问题外,最主要的是,
在这种关键数据库中,每一个数据都是有其作用的,
涉及到数据仓库和数据挖掘等很多方面,
所以一定是业务主建。

其实,可以不客气的说,如果你有机会参与大项目的话,恐怕不会有
超过5%的表使用逻辑主建。
你可以记住一句话:

数据就是数据
模型就是模型

你会不会有一天,为了方便,强迫每个人都要在脑袋上
顶一个牌子,上面写着自己名字以便于辨认呢

但是你会给动物栓上铭牌

这就是高级和低级的区别

所以,我觉得一定要养成使用业务主建的习惯和思维方式
除非你觉得自己永远不会有机会做“大项目”



不知所云,我觉得这位老兄说反了吧,我怎么觉得像银行系统恰恰应该一定要用逻辑主键而不能用业务主键。
比如你要用业务主键,那一个帐户用身份证号码或是银行卡号?那身份证15位变18位怎么办?银行卡号升位怎么办(比如我自己的招行老式银行卡换银联卡就是换号的)?既然是主键,就应该是标识一条记录的永远不变的值,只有逻辑主键能做到这一点。
0 请登录后投票
   发表时间:2005-11-08  
benber 写道
testu 写道
用什么样的主建要根据具体项目来定,
如果你做的是一个小论坛或是其他什么小系统,
用什么主建都可以,怎么方便怎么来就可以了,

但是对于大系统,比如银行、电信就要小心规划了,
对于这样的大系统,即使你想用什么所谓的逻辑主建,银行的人
也不可能同意的,除了性能和空间的问题外,最主要的是,
在这种关键数据库中,每一个数据都是有其作用的,
涉及到数据仓库和数据挖掘等很多方面,
所以一定是业务主建。

其实,可以不客气的说,如果你有机会参与大项目的话,恐怕不会有
超过5%的表使用逻辑主建。
你可以记住一句话:

数据就是数据
模型就是模型

你会不会有一天,为了方便,强迫每个人都要在脑袋上
顶一个牌子,上面写着自己名字以便于辨认呢

但是你会给动物栓上铭牌

这就是高级和低级的区别

所以,我觉得一定要养成使用业务主建的习惯和思维方式
除非你觉得自己永远不会有机会做“大项目”



不知所云,我觉得这位老兄说反了吧,我怎么觉得像银行系统恰恰应该一定要用逻辑主键而不能用业务主键。
比如你要用业务主键,那一个帐户用身份证号码或是银行卡号?那身份证15位变18位怎么办?银行卡号升位怎么办(比如我自己的招行老式银行卡换银联卡就是换号的)?既然是主键,就应该是标识一条记录的永远不变的值,只有逻辑主键能做到这一点。


“名字”本来就不是“人”的主键(唯一标识),你随便找个派出所看看户籍处有多少人办改名就知道了。这位所举的例子,恰恰证明逻辑主键之必要性。
0 请登录后投票
   发表时间:2005-11-09  
benber 写道
testu 写道
用什么样的主建要根据具体项目来定,
如果你做的是一个小论坛或是其他什么小系统,
用什么主建都可以,怎么方便怎么来就可以了,

但是对于大系统,比如银行、电信就要小心规划了,
对于这样的大系统,即使你想用什么所谓的逻辑主建,银行的人
也不可能同意的,除了性能和空间的问题外,最主要的是,
在这种关键数据库中,每一个数据都是有其作用的,
涉及到数据仓库和数据挖掘等很多方面,
所以一定是业务主建。

其实,可以不客气的说,如果你有机会参与大项目的话,恐怕不会有
超过5%的表使用逻辑主建。
你可以记住一句话:

数据就是数据
模型就是模型

你会不会有一天,为了方便,强迫每个人都要在脑袋上
顶一个牌子,上面写着自己名字以便于辨认呢

但是你会给动物栓上铭牌

这就是高级和低级的区别

所以,我觉得一定要养成使用业务主建的习惯和思维方式
除非你觉得自己永远不会有机会做“大项目”



不知所云,我觉得这位老兄说反了吧,我怎么觉得像银行系统恰恰应该一定要用逻辑主键而不能用业务主键。
比如你要用业务主键,那一个帐户用身份证号码或是银行卡号?那身份证15位变18位怎么办?银行卡号升位怎么办(比如我自己的招行老式银行卡换银联卡就是换号的)?既然是主键,就应该是标识一条记录的永远不变的值,只有逻辑主键能做到这一点。


银行系统不是这么简单的。对于你说的这种情况,银行有一个CIS(客户信息系统),系统中为每个客户分配一个CIS号,但是该号码是有意义的,叫客户编号,并不是单纯的逻辑主键;而具体到业务系统(比如银行卡系统),卡表的主键就是卡号,交易流水没有主键,只有索引。如果卡号升位,就要升级系统。升级时,由于客户不会同时换卡,所以并不是一下子将所有卡号update,往往要增加一个标识新旧卡号的字段,以便系统平滑过渡。
另外,系统的设计要考虑以后可能发生的变化,但也不可能考虑到所有的变化,业务的变化往往会导致系统升级,而不是单纯更新一下数据库就能解决问题。在应对较大变化时,逻辑主键并不一定能起到好的作用。
我们在给银行做系统时,客户确实不允许使用逻辑主键。
0 请登录后投票
   发表时间:2005-11-09  
jnzgy 写道
benber 写道
testu 写道
用什么样的主建要根据具体项目来定,
如果你做的是一个小论坛或是其他什么小系统,
用什么主建都可以,怎么方便怎么来就可以了,

但是对于大系统,比如银行、电信就要小心规划了,
对于这样的大系统,即使你想用什么所谓的逻辑主建,银行的人
也不可能同意的,除了性能和空间的问题外,最主要的是,
在这种关键数据库中,每一个数据都是有其作用的,
涉及到数据仓库和数据挖掘等很多方面,
所以一定是业务主建。

其实,可以不客气的说,如果你有机会参与大项目的话,恐怕不会有
超过5%的表使用逻辑主建。
你可以记住一句话:

数据就是数据
模型就是模型

你会不会有一天,为了方便,强迫每个人都要在脑袋上
顶一个牌子,上面写着自己名字以便于辨认呢

但是你会给动物栓上铭牌

这就是高级和低级的区别

所以,我觉得一定要养成使用业务主建的习惯和思维方式
除非你觉得自己永远不会有机会做“大项目”



不知所云,我觉得这位老兄说反了吧,我怎么觉得像银行系统恰恰应该一定要用逻辑主键而不能用业务主键。
比如你要用业务主键,那一个帐户用身份证号码或是银行卡号?那身份证15位变18位怎么办?银行卡号升位怎么办(比如我自己的招行老式银行卡换银联卡就是换号的)?既然是主键,就应该是标识一条记录的永远不变的值,只有逻辑主键能做到这一点。


银行系统不是这么简单的。对于你说的这种情况,银行有一个CIS(客户信息系统),系统中为每个客户分配一个CIS号,但是该号码是有意义的,叫客户编号,并不是单纯的逻辑主键;而具体到业务系统(比如银行卡系统),卡表的主键就是卡号,交易流水没有主键,只有索引。如果卡号升位,就要升级系统。升级时,由于客户不会同时换卡,所以并不是一下子将所有卡号update,往往要增加一个标识新旧卡号的字段,以便系统平滑过渡。
另外,系统的设计要考虑以后可能发生的变化,但也不可能考虑到所有的变化,业务的变化往往会导致系统升级,而不是单纯更新一下数据库就能解决问题。在应对较大变化时,逻辑主键并不一定能起到好的作用。
我们在给银行做系统时,客户确实不允许使用逻辑主键。


你不能拿遗留系统或上一个世纪人们的做法当作圣经,不管他们用这种做法做了多大的系统。你敢用2位来表示年份吗?
0 请登录后投票
   发表时间:2005-11-09  
为了升级卡号就升级系统,怎么看都很傻
0 请登录后投票
   发表时间:2005-12-14  
汗,终于翻完5页了(javaeye在这里特别慢...)
了解了不少,特别是大家都拿自己做过的东西说事,感觉很亲切,ProductId之类的呵呵。

说到大项目~~~怎样算大呢,我打搅一下,170多个表算大吗~~现在做的有几个表没数过,不过有50多个Mst表-_-!

我做过的系统里面,以业务主键为主,逻辑主键很少,大多数都是xxxId之类的,逻辑主键一般来说都类似于sequence,但很少是完全自增的。
数据词典里各个字段都有他固定的意义,不可能给你一个无意义的数据(就算无意义的自增,也会给你弄成有意义的)

不过我认为大家都比较极端了,业务会变这种可能性当然存在,不过一些大公司对自己的业务都已经有一套流程了,一些基本的东西是不会改变的,小的变变角角Mst之类的当然有可能变,不过话说回来,不变哪来的钱啊。

还有公安用那个身份证号码当主键的,这个确实有点问题,未成年人犯罪没有身份证号码怎么办?设计的时候不考虑这一点未免太粗心吧?
0 请登录后投票
   发表时间:2005-12-14  
身份证号?....

我觉得很有意思,身份证号本身就是逻辑主键在日常生活中的一种表现。唯一性和标识性,身份证号本身有什么意义么?没有

以后坚决不在讨论这个话题了^_^
0 请登录后投票
   发表时间:2005-12-14  
我们做的系统都是一千多个数据库表,
都用逻辑主键。
主键的意义是什么为什么需要主键?
主键,只要能够唯一的表示一条记录就可以,主键本身应该不包括别的含义。
0 请登录后投票
   发表时间:2005-12-14  
1000多个?你们光是数据库部分的基本文档就要用麻袋了吧...
汗,不知道你们这个到现在有多少个人年了...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics