主键的选择:
1.有意义的键和无意义的键:
   有意义的键:例如身份证号。键值是唯一的,而由人来指定是不可靠的,有可能会出现重复,虽然数据库可以检测出来,但是在数据进入系统之前不会被发现。所以有意义的键是不可靠的。
   无意义的键:本质是数据库构造的并不打算供人使用的一个随即数。对应小系统或稳定的情况,应优先考虑。
2.简单键和组合键:
  组合键:在一个表和另一个表上下文相关时更易于使用。比如:订单号加上顺序号来作为订单的键值。
  简单键:一致性好。如果都使用简单键,在对键的操作中可以使用相同的代码。而组合键需要特殊处理。
3.表唯一键和数据库唯一键:
  表唯一键:在一张表中是唯一的。
  数据库唯一键:对任意一个表的任意一行都是唯一的。
4.取得新键:
  (1)数据库自动生成:
     优点:简单
     缺点:难以确定新生成的键值。当插入主从表数据时比较麻烦。
  (2)数据库计数器:
     缺点:没有统一的标准,也不是所有数据库系统都支持。
  (3)GUID:
     优点:可以确定是唯一的键,所以是安全的。
     缺点:生成的结果串比较大,会影响性能,尤其对索引。
  (4)键表:
     构造:一般有两列:名字,下一个键值,如果使用数据库唯一键,那么表中就只有一行数据。如果使用表唯一键,对每个表都有一行数据于之对应,每向数据库中增加一个表就要对应的在键表中增加一行。
     使用:取出数据行,获得数字,进行增加操作,得到新数字,把新数字写回到数据行中。在更新键表时,也可以通过增加一个适当的值来一次获取多个值,既减少了数据库调用,也减少了对键表的争夺。应当把对键表的操作放在一个独立的事务中,如果使用表唯一键,那么在新增的同时将锁住键表中对应的行,这意味着锁住了所有对表的插入,如果使用数据库唯一键,则意味着锁住了对所有表的插入。

个人感觉:自增值用起来简单,但是业务逻辑复杂后感觉就比较麻烦。组合键,特别是主键字段多的时候操作起来很麻烦,业务逻辑部分要很熟悉才行,因为很容易 产生主键冲突。键表,感觉用起来最清楚,但是键生成算法要自己来写。

说明:主要参考Martin Fowler的《企业应用架构模式》(Patterns of Enterprise Application Architecture)的第十二章“对象-关系结构模式”的12.1.1节精简总结而来。
BTW:这本PEAA实在是一本难得的好书,Martin Fowler的组织,讲述能力非常好,得Jolt大奖真是当之无愧啊。

转载于:https://www.cnblogs.com/chuncn/archive/2009/04/22/1440901.html

数据库中主键的选择和使用相关推荐

  1. mysql 主键注解_oracle数据库中主键注解

    hibernate5(5)实体映射注解配置[2]主键生成策略 @GeneratedValue基本注解类型 在上一篇文章中,我们讲到了JPA使用@GeneratedValue注解来定义生成策略,而关于注 ...

  2. mysql主键和外键示例_SQL数据库中主键和外键的应用实例

    数据库 什么是数据库主键(Primary Key)? 数据库主键(Primary Key):指的是一个列或多列的属性组合,其属性值能唯一标识一条记录,通过它可强制表的实体完整性. 例如: (tb_Bo ...

  3. 数据库中主键和外键的设计原则

    來源:http://www.cnblogs.com/deng02/archive/2009/02/26/1398462.html 主键和外键是把多个表组织为一个有效的关系数据库的粘合剂.主键和外键的设 ...

  4. MySQL中主键的选择与磁盘性能

    偶然看到了"Fotolog: Scaling the World\'s Largest Photo Blogging Community",才发现很多数据库的优化其实道理都很简单, ...

  5. 数据库候选关键词怎么求_数据库中主键、主码、主属性、关键字、候选关键字、码的区别...

    展开全部 主码: 我们在建立数据库32313133353236313431303231363533e58685e5aeb931333433626439的时候,需要为每张表指定一个主码,主码也叫主键. ...

  6. 数据库中主键、主码、主属性、关键字、候选关键字、码的区别

    主码=主键=主关键字,关键字=候选码 候选关键字=候选码中除去主码的其他候选码 码:唯一标识实体的属性或属性组合称为码 候选码(关键字):某一属性组的值能唯一标识一个元组而其子集不能(去掉任意一个属性 ...

  7. 数据库唯一主键如何实现幂等性?

    数据库唯一主键的实现主要是利用数据库中主键唯一约束的特性,一般来说唯一主键比较适用于"插入"时的幂等性,其能保证一张表中只能存在一条带该唯一主键的记录. 使用数据库唯一主键完成幂等 ...

  8. 数据库的主键和外键总结

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如 学生表(学号,姓名,性别,班级)         ...

  9. 数据库加主键sql_SQL数据库设计:选择主键

    数据库加主键sql There are a couple of rules to follow when choosing a primary key for a table: all records ...

最新文章

  1. 回馈读者【赠技术书通知】
  2. RIP和OSPF双点双向重发布_综合实验
  3. fedora网络配置
  4. tcp/ip 协议栈Linux内核源码分析七 路由子系统分析二 策略路由
  5. SpringMVC学习01之回顾Servlet
  6. python自带的shell、其性能优于ipython吗_Python自带的shell,其性能优于IPython
  7. 苹果笔记本能不能用python_“苹”除了苹果还能组哪些词?苹组词,释义及造句汇总!...
  8. 近期国际版概念(5月19日益盟消息回顾)
  9. 线程挂起 阻止有什么区别c#
  10. C#调用windows API实现 smallpdf客户端程序进行批量压缩
  11. gitlab+jenkins+maven+docker持续集成(二)——maven安装配置
  12. CSF 格式文件播放器 下载地址
  13. dns被劫持怎么办,电信dns劫持解决办法
  14. onenote无法打开链接出现错误您的组织策略阻止我们为您完成此操作
  15. DeepStream初步学习
  16. 《茅屋为秋风所破歌》古诗鉴赏
  17. mysql编写1到n的奇数和_编写程序。输入任意整数n,计算1到n的奇数和
  18. .net Application.DoEvents()
  19. Learning to Memorize Entailment and Discourse Relations for Persona-Consistent Dialogues论文学习
  20. (中级)系统集成项目管理工程师常用英语汇总

热门文章

  1. 货币市场基金的基本分类
  2. DIY修改博客园背景用【保存图片用】
  3. shell日志重定向到null
  4. LoadRunner11-遇到问题及解决办法
  5. 前端【学习心得】电商网站前端架构#3 前端在产品设计中的作用
  6. SPOJ 4487 Can you answer these queries VI
  7. HTML5 canvas组件
  8. 前端基础-git(三):git和GitHub的一些基础操作
  9. jQuery实现一个图片左右滚动
  10. 机场新增卫星厅对中转旅客影响的评估方法