扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:ZDNet China 2006年10月8日
关键字: 关系数据库 SQL Server
显然,使用自然键作为主键会产生很多问题。现在将一个递增的值作为职工表的主键,然后看看结果会是怎么样。最重要的是,递增值必须是唯一的。由于系统能够自动生成这一递增值,可以避免了数据的输入错误。除此之外,当记录有输入时递增值一定会存在,所以主键一定不会为空。
一个代理键是不会改变的,而且只依赖于一个域,所以它特别的简洁。自动递增的域提供了一个唯一的,稳定的,简洁的主键。
很多数据库开发系统把唯一的索引应用到主键,这就消除了多个记录——因为系统不能接受多个记录。然而,你可以人为的使用一个唯一的索引,而不需要将一个主键作为一个索引。人为处理会消耗更多的资源。
一些开发人员认为主键应该识别相关的记录,也就是说,用户应该识别值为“Jane Smith”的主键与职工Jane Smith的记录相关联。如果值为“Jane Smith”的主键没有什么意义,比如只是一个递增的值,这就与职工Jane Smith的信息毫无关系。事实是这样的,没有什么规则确保主键值与记录有什么关联。
在一个设计合理的数据库中,用户是无法看到主键的值。实际上,用户也不需要知道主键是否存在,有时候主键对用户没有什么用处。代理键运行得很好,因为数值与记录之间存在isno的关系。
当把这两种主键一一作比较,自然主键将会处于劣势,如表A所示。数据还是数据,数据不会成为系统的指针,因为这些选项不能受开发人员所控制,在程序中或系统自生成的键都是稳定的,它们也不能为空值。
表 A
规则 | 自然键 | 代理键 |
主键必须唯一的识别每一记录 | 但与输入和人为错误有关 | 系统自生成的数据是唯一的 |
一个记录的主键不能为空 | 只有数据可知时才能输入记录 | 当记录生成时才被系统建立 |
当生成记录时,主键的值必须存在 | 只有数据可知时才能输入记录 | 当记录生成时才被系统建立当记录生成时才被系统建立 |
主键必须保持稳定——你不能更改主键的域 | 自然键与一些商业规则和其他外部影响有关 | 代理键对程序功能和数据保持中立 |
主键必须简洁,不要包含过分的属性 | 一个自然键可以包含多个域 | 代理键只能包含多个域 |
主键的值不能改变 | 自然键通常改变 | 代理键通常不更改 |
对于数据库开发人员来说最重要的是在于良好的设计。为了避免出现程序开发之后的错误和过多的修补,我们建议采用代理键。这一简单的方法将为你在程序开发中提供坚固的,稳定的,灵活的基础。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者