【发布时间】:2009-04-03 15:28:47
【问题描述】:
我一直在研究使用 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 字段的大小和容易的页面碎片)?
【问题讨论】:
标签: sql-server database indexing primary-key guid