当前位置: 网学 > 编程文档 > SQL SERVER > 正文

主键的故事

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/19
下载{$ArticleTitle}原创论文样式
因就是:错误地把对象属性当作对象标识!

    对象属性和对象标识都是对象数据库中的概念。

    什么是对象属性呢?

    就是业务逻辑上涉及的任何可变信息,什么“姓名”、“性别”、“身份证号”、“订单号”通通都是对象属性。对象属性总会变化的,只是有些变得快,有些变得慢而已。

    对象标识是啥?就是唯一区分数据对象的鉴别符,对象标识存在的唯一目的就是区分对象,除此之外没有任何业务逻辑上的意义。

    不管王菲的属性值怎样变化,但王菲还是王菲,不是二班的那个“王菲”。也就是说,王菲的灵魂未变,她是不会改变的,就象哲学上所说的“不以人的意志为转移”。这种唯一表示对象本身的东西,就是对象标识!

    对象标识是唯一的。也就是说,即使两个对象,他们的属性完全一样,但它们的对象标识是不同的。毕竟,同名同姓甚至同一天出生的大王菲和小王菲是两个不同的人。

    对象的标识是永恒不变的。一旦对象产生,它的标识就自然地、唯一地产生了。尽管王菲换了名,身份证号也变过,但王菲的对象标识未变。即使到了下个世纪,她的对象标识也将依然存在于歌迷们的们的心中。

    对象的标识是描述关系的基础。王菲唱的歌是王菲唱的,不是初二二班的那个“王菲”唱的。王靖雯唱的歌就是王菲唱的歌,有的歌迷只将歌曲和歌手的人名关联起来,难怪会出混乱。香港政府也犯相同的错误,将王菲的身份证号码这一内部属性,跟那个弹电吉他的小子关联起来,也许就是命运的错误。

    那么,我们在设计数据库结构时,到底该用什么来做主键呢?

    对象数据库说,主键只能是对象标识!

    至于对象属性是否唯一,那是由业务逻辑所决定的。如果业务逻辑规定订单号不能唯一,就为订单号建一个唯一索引好了,但它不是主键。

    所以,当我们看到有些数据库设计采用了额外的一个字段来专门充当主键,并用这个主键与其他表关联的话,那就是已经走到对象数据库的门口了。什么“内部码”,“流水号”,“序列号”,“自增数”通通都可以算是对象标识。

    为什么SQL Server要提供自增量字段以及GUID的标识字段呢?都是为了这专门的主键字段服务的。

    如果我们打算向对象数据库路上走得话,就请使用对象标识来做专门的主键字段吧。

    当然,怎样产生唯一的对象标识来做主键,这也是有说道的。

    1.用自增量字段

    自增量字段每次都会按顺序递增,可以保证在一个表里的主键不重复。除非超出了自增字段类型的最大值并从头递增,但这几乎不可能。使用自增量字段来做主键是非常简单的,一般只需在建表时声明自增属性即可。

    自增量字段的长度可以很短,比如使用一个int类型就基本上够用了。简短的主键可以在大量数据和复杂的关系查询中表现出更好的性能。

    自增量的值都是需要在系统中维护一个全局的数据值,每次插入数据时即对此次值进行增量取值。当在当量产生唯一标识的并发环境中,每次的增量取值都必须最此全局值加锁解锁以保证增量的唯一性。这可能是一个并发的瓶颈,会牵扯一些性能问题。

    还有,如果要搞分布式数据库的话,这自增量字段就有问题了。因为,在分布式数据库中,不同数据库的同名的表可能需要进行同步复制。一个数据库表的自增量值,就很可能与另一数据库相同表的自增量

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号