我一直在研究使用 GUID 作为数据库中的主键。目前看来,利大于弊。但是,我发现 GUID 可能不是我想要的。
在我的应用程序中,用户应该能够根据用户友好的 ID 识别对象。因此,例如,如果他们想在不输入全名的情况下获得特定产品,他们可以使用产品的 ID。对于这样的事情,GUID 不容易记住。
我一直在考虑的解决方案是同时使用 GUID 和自动递增整数。GUID 将是行的主键,而自动递增整数将是应用程序过滤函数使用的索引。但是,所有 SQL SELECT、UPDATE、DELETE 语句都将使用 GUID。
我想使用 GUID 的主要原因是防止合并两个数据库时发生冲突。如果 Database #1 和 Database #2 都具有 Product #2,则导入器脚本必须更改 ID 和引用它的所有外键。使用 GUID,我只需要更改表本身中的用户友好 ID,而外键将使用每个导入记录唯一的 GUID,因此无需修改即可工作。
所以,我的问题是:具有自动递增整数索引和 GUID 主键是否存在任何重大问题(除了 GUID 字段的大小和简单的页面碎片)?