sql - uniqueidentifier 跨数据库唯一吗?

标签 sql sql-server

我有多个数据库,每个数据库都有一个审计表。其中一个数据库是一个“通用”数据库,其中包含国家、州等表格。

这个公共(public)数据库的表在其他数据库中作为 View 被引用。

目前我的审计表有一个标识列。为了列出审计记录,我使用 UNION 将普通数据库中的审计表和普通数据库中的审计表合并。

但是审计表中的标识列可能是相同的。

如果我在审计表中添加一个 uniqueidentifier 列并将其用作我的唯一 ID,该列在数据库中是否是唯一的?

最佳答案

如果您使用uniqueidentifier 生成的内置方法(如newId() 或C# 的Guid.NewGuid()),是的,它将在数据库、服务器、国家等方面都是独一无二的。

事实上,这是 GUID 的一大用途 - 复制。如果您在两个数据库中有相同的 GUID,则可以保证它是故意放在那里的。

但是,请注意 GUID 确实有其缺点 - 它们可能会使您的索引性能更差(或至少需要更多维护),并且它们通常更大。

此外,GUID 并非完全随机 - 有几种不同的 GUID 生成算法,其中一些算法本身是唯一的(例如,使用 MAC 地址作为 GUID 的一部分 - 默认情况下 MAC 是唯一的,尽管您可以手动覆盖它们)-因此每个物理服务器的一部分是唯一的,并且机器确保它不会对两个 GUID 使用相同的时间戳。还有顺序 GUID (newSequentialId()),这有助于避免索引碎片(当然对聚集索引非常有用)——请注意,它们取决于计算机的 MAC 地址,它们是可预测的,所以如果你公开 GUID,并且你依赖它们是“ secret 的”,你可能不想使用它们。一些 GUID 算法比其他算法更可预测。

关于sql - uniqueidentifier 跨数据库唯一吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28404964/

相关文章:

java - 用于测试的免费 postgres 托管

mysql - 如何将一个 SQL 数据库拆分成多个文件(稍后重新组合)?

SQL 主键排序顺序

sql - 数据库缓存 : Where exactly is it happening?

sql - Access 中的大小写表达式

c# - 如何将文件 (PDF) 插入到 varbinary SQL Server 列中并稍后检索它?

sql - 如何在 SSIS 的数据转换转换过程中将字符串转换为货币?

sql-server - 无法在 Scintific Linux 7.5 上使用 pyodbc 连接到 MS SQL Server

c# - 带有日期参数的 Angular 6 服务调用

sql-server - SQL 服务器 : why are sizes of different backups the same?