相关疑难解决方法(0)

为什么使用 int 作为查找表的主键?

我想知道为什么我应该使用 int 作为查找表的主键,而不是仅仅使用查找值作为主键(在大多数情况下是一个字符串)。

我知道使用 nvarchar(50) 而不是 int 会使用更多的空间,如果它链接到一个有很多记录的表。

另一方面,直接使用查找值基本上可以避免我们进行连接。我可以想象,如果总是需要加入,这将是一个很大的节省(我们正在开发一个网络应用程序,所以这很重要)。

除了“标准操作”之外,使用 int 主键(特别是对于查找表)有什么优势?

sql-server primary-key

30
推荐指数
3
解决办法
1万
查看次数

什么时候主键才有意义?

请原谅这里任何定义的松散,但我试图探索一个简单的概念。

一个主键唯一标识一行。表中可能还有其他列具有唯一值,因此它们也可以唯一标识一行(候选键),但主键是为任务指定的。

使主键更有用的属性包括:

  • 保证是唯一的;随着表的增长,其他一些唯一的列值可能会重复
  • 不太可能改变;虽然外键约束可以包括级联,但最好不要要求这个
  • 不会被回收;由于某种原因被删除的行不应释放旧的 PK 值以供重用

由于这些原因,我通常建议主键没有内在价值,因此永远没有理由更改或回收值。也就是说,它应该是没有意义的

我见过包含某种代码的主键,例如基于名称的客户端代码。明显的问题是 (a) 如果客户端名称更改,那么 PK 也应该更改,以及 (b) 与具有相似名称的客户端发生冲突的风险太大。

半个例外是使用自动递增的数字,它具有序列号的次要含义。但是,它仍然很稳定。

问题是,在什么情况下,如果有的话,最好使用具有其他实际含义的主键?也就是说,PK应该是任意的,并且你通常可以通过序列号获得的建议有什么问题吗?

database-design primary-key candidate-key

7
推荐指数
1
解决办法
3370
查看次数

我应该将文档版本字段设置为主键的一部分吗

我应该将文档版本设置为主键吗我正在开发一个文档管理系统,并且我有这两个表代表整个表的一部分。

在此处输入图片说明

在 DocumentVersion 表上,我将主键设置为 (version + documentID) 。如果这是一种推荐的方法,其中 documentID 的类型为 int 而版本的类型为 decimal(5,2) ,那么任何人都可以提出建议吗?或者如果我创建一个新字段并将其设置为 DocumentVersion 表中的主键会更好?谢谢

sql-server-2008-r2 surrogate-key table

4
推荐指数
1
解决办法
408
查看次数