当前位置:  开发笔记 > 数据库 > 正文

我应该有一个专用的主键字段吗?

如何解决《我应该有一个专用的主键字段吗?》经验,为你挑选了3个好方法。

我正在设计一个由Web应用程序使用的小型SQL数据库.

假设一个特定的表有一个Name字段,其中不允许两行具有相同的值.但是,用户可以随时更改"名称"字段.

此表中的主键将用作其他表中的外键.因此,如果将Name字段用作主键,则需要将任何更改传播到其他表.另一方面,唯一性要求将自动处理.

我的直觉是添加一个整数字段作为主键,可以由数据库自动填充.有这个领域有什么意义,还是浪费时间?



1> Paul Tomblin..:

我会自己使用生成的PK,只是出于你提到的原因.此外,通过整数进行索引和比较比通过字符串进行比较更快.您也可以在名称字段上添加唯一索引,而不必将其作为主键.


这通常是处理主键的可接受方式.您永远不应该为主键选择一个可以更改其值的列 - 然后进入所有表的级联更新,并将其作为一个fireign键.

2> finnw..:

您所描述的内容称为代理键.有关详细答案,请参阅维基百科文章.



3> Mark Bracket..:

虽然搜索和加入整数列的速度更快(正如许多人所指出的那样),但是从来没有加入到第一位的速度更快.通过存储自然键,您通常可以消除对连接的需要.

对于较小的数据库,CASCADE对外键引用的更新不会对性能产生太大影响,除非它们经常更改.

话虽这么说,在这种情况下,您应该使用整数或GUID作为代理键.可更新设计的主键并不是最好的主意,除非您的应用程序具有非常引人注目的商业理由,因此名称是唯一的 - 您将不可避免地存在冲突.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有