如果列不是主键,您可以对列使用GUID吗?

时间:2012-01-05 21:17:04

标签: sql database primary-key guid

我在数据库中有两列。两者都是ids。我正在使一个数字自动递增。这是我选择的主键。但是另一列也必须包含唯一的自动生成的ID。必须与主键的ID不同(即数字自动增量列)。因此我在考虑为此专栏使用GUID。但是:

如果列不是主键,您可以对列使用GUID吗? 这是好的做法吗?

3 个答案:

答案 0 :(得分:2)

这是可能的,除了数据大小和一些性能开销之外似乎没有问题。

对于我来说,如果您需要将表中的数据与某些外部系统同步,这是正常的做法。然后使用guid维护同步的全局记录标识符和数据库内部关系的数字主键,因为它们比guid快。

答案 1 :(得分:2)

显然,GUID列将是唯一的,但它对于连接目的来说相当大。因此,可能需要使用数据库中的数字列进行外键连接(连接4字节或8字节整数)而不是16字节GUID列(除非您将其存储为字符串,在这种情况下它具有32个十六进制数字加上4个破折号)。数字列的索引会更小;引用表将更小;连接比较会更快。

因此,可能有很好的理由同时拥有GUID作为表上的辅助(替代)唯一键而不是主键。

答案 2 :(得分:1)

是的,你可以。这是一个好主意取决于环境,但总的来说这里没有问题。此外,您可能应该在该列上创建一个“唯一键”以强制引用完整性(这样做还可以创建与此列相关的外键)。

请确保您不在该列上创建聚集索引!