我在一个数据库中有两列。两者都是id。我正在使一个数字自动递增。这就是我选择的主键。但另一列也必须包含唯一的自动生成的id。必须有不同于主键的id(即数字自动递增列)。因此,我考虑将GUID用于此列。但是:
如果列不是主键,您可以为列使用GUID吗?这是好的做法吗?
很明显,GUID列是唯一的,但对于连接目的来说,它相当大。因此,可能需要使用数据库中的数字列进行外键联接(在4字节或8字节的整数量上联接),而不是16字节的GUID列(除非将其存储为字符串,在这种情况下,它有32个十六进制数字加4个短划线)。数字列的索引将更小;参考表将更小;联接比较将更快。
因此,很可能有充分的理由同时拥有这两者,并将GUID作为表上的辅助(替代)唯一键,而不是主键。
这是可能的,除了数据大小和一些性能开销之外,似乎没有问题。
对我来说,如果你需要将表中的数据与一些外部系统同步,这是正常的做法。然后,您使用guid来维护同步的全局记录标识符和数据库内关系的数字主键,因为它们比guid快。
可以。这是否是一个好主意取决于环境,但总的来说,这里没有问题。此外,您可能应该在该列上创建一个"唯一键"来强制引用完整性(这样做还可以创建与该列相关的外键)。
只需确保您没有在该列上创建聚集索引!