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