详谈关系数据库中的“键”

原创 2006年05月27日 11:57:00

                                                       关系数据库中的“键”

主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。

必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。

首先来谈:主键。

关系数据库依赖于主键---它是数据库物理模式的基石。主键在物理层面上只有两个用途:1. 惟一地标识一行。

                               2. 作为一个可以被外键有效引用的对象。

基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:

        1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。

        2. 主键应该是单列的,以便提高连接和筛选操作的效率。

             注:使用复合键的人通常有两个理由为自己开脱,而这两个理由都是错误的。其一是主键应当具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。

        3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。

                 注:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。

        4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。

        5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。

 

浅析关系数据库和NoSql非关系数据库

1 关系数据库    1.1 关系数据库的简介    支持关系模型的数据库系成之为关系数据库,是目前各类数据库中使用最为广泛的数据库系统。关系数据库在经过二十几年的发展,已经变的功能强大,使用广泛...
  • learneraiqi
  • learneraiqi
  • 2015年08月19日 18:54
  • 2523

浅谈个人对各种数据库的认识------通俗的个人话语-----阿冬专栏!!!

2015--5--21今天先来个华为的小新闻:物联网的LiteOS(开源的轻量级物联网操作系统)发布了,越来越感觉华为太牛了,抢占先机了,全球第一的通信设备商不是白做的,而且今天华为也发布了“敏捷网络...
  • zhangdong305
  • zhangdong305
  • 2015年05月21日 22:31
  • 1912

数据库中主键与外键的理解

数据库中主键与外键的理解       在关系型数据库中,数据结构有逻辑结构和物理结构。物理结构指存储在物理介质上的数据文件的结构。逻辑结构即关系,也就是一张张的二维表。表中的一列即为一个字段(属性...
  • fanwenjieok
  • fanwenjieok
  • 2015年07月19日 17:21
  • 2429

关系数据库中无意义代理主键的生成与JDBC实现总结

(原文出自:http://www.theserverside.com/news/thread.tss?thread_id=63243) 在Java应用中代理主键的生成策略会因数据库甚至JDBC驱...
  • caijb
  • caijb
  • 2011年11月19日 07:58
  • 697

关系数据库设计中,用中间表好还是直接设定主外键关联好?

有人会对数据库有这样的疑问: 因为大多数的数据库教程上都是告诉你关系数据库如何去创建1:1、1:N和N:M的数据库关系,但我发现很多开源产品中,并没有直接使用关系数据库的关系查询、关系删除等功能,而...
  • zp522123428
  • zp522123428
  • 2012年12月06日 10:13
  • 3108

关系数据库以及SQL语言基础 pptx

  • 2015年03月05日 17:07
  • 164KB
  • 下载

基于本体的关系数据库访问研究进展

  • 2014年08月16日 10:51
  • 907KB
  • 下载

关系数据库规范化理论

  • 2015年08月25日 17:02
  • 308KB
  • 下载

关系数据库

  • 2013年11月11日 20:25
  • 653KB
  • 下载

MySQL关系数据库

  • 2013年08月07日 21:30
  • 9.46MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:详谈关系数据库中的“键”
举报原因:
原因补充:

(最多只允许输入30个字)