我正在设计一个由Web应用程序使用的小型SQL数据库.
假设一个特定的表有一个Name字段,其中不允许两行具有相同的值.但是,用户可以随时更改"名称"字段.
此表中的主键将用作其他表中的外键.因此,如果将Name字段用作主键,则需要将任何更改传播到其他表.另一方面,唯一性要求将自动处理.
我的直觉是添加一个整数字段作为主键,可以由数据库自动填充.有这个领域有什么意义,还是浪费时间?
我会自己使用生成的PK,只是出于你提到的原因.此外,通过整数进行索引和比较比通过字符串进行比较更快.您也可以在名称字段上添加唯一索引,而不必将其作为主键.
您所描述的内容称为代理键.有关详细答案,请参阅维基百科文章.
虽然搜索和加入整数列的速度更快(正如许多人所指出的那样),但是从来没有加入到第一位的速度更快.通过存储自然键,您通常可以消除对连接的需要.
对于较小的数据库,CASCADE对外键引用的更新不会对性能产生太大影响,除非它们经常更改.
话虽这么说,在这种情况下,您应该使用整数或GUID作为代理键.可更新设计的主键并不是最好的主意,除非您的应用程序具有非常引人注目的商业理由,因此名称是唯一的 - 您将不可避免地存在冲突.