我有一些数据库,每个数据库都有一个审计表。其中一个数据库是一个“通用”数据库,其中包含国家,州等表格。
此公共数据库的表在其他数据库中作为视图引用。
目前我的审计表有一个标识列。为了列出审计记录,我使用UNION将普通数据库中的普通数据库和审计表中的审计表联合起来。
但是审计表中的标识列可能是相同的。
如果我在审计表中添加uniqueidentifier列并将其用作我的唯一ID,那么此列在数据库中是否唯一?
答案 0 :(得分:3)
如果您使用uniqueidentifier
生成的内置方法(如newId()
或C#的Guid.NewGuid()
),是的,它在数据库,服务器,国家/地区等方面都是唯一的。< / p>
事实上,这是GUID的一个重要用途 - 复制。如果您在两个数据库中具有相同的GUID,则可以保证它是故意放在那里的。
但是,请注意GUID确实存在缺点 - 它们可能会使您的指数表现更差(或者至少需要更多维护),而且它们通常会更大。
此外,GUID不是完全随机 - 有一些不同的GUID生成算法,其中一些本质上是唯一的(例如使用MAC地址作为GUID的一部分 - 默认情况下MAC是唯一的,虽然你可以手动覆盖它们 - 所以每个物理服务器的一个部分是唯一的,并且机器确保它不对两个GUID使用相同的时间戳。还有顺序GUID(newSequentialId()
),它们可以方便地避免索引碎片(当然对聚簇索引非常有用) - 请注意那些依赖于计算机的MAC地址,并且它们是可预测的,所以如果你'让GUID公开,你依赖它们是“秘密”,你可能不想使用它们。有些GUID算法比其他算法更容易预测。
答案 1 :(得分:0)
它是普遍独特的。它是一个随机生成的32个字符串,有可能重复为1 /(16 ^ 32)。
没有一定的机制来创造唯一性,极低的概率就是这样。