我有许多数据库,每个数据库都有一个审计表。其中一个数据库是“公共”数据库,其中有国家、州等表。
此通用数据库的表在其他数据库中作为视图引用。
目前,我的审计表有一个标识列。对于列出审计记录,我使用UNION合并普通数据库中的审计表和公共数据库中的审计表。
但是,审计表中的标识列可能是相同的。
如果我在审计表中添加了一个unique标识符列,并使用它作为我的唯一id,那么该列在数据库中是否是唯一的?
发布于 2015-02-09 07:44:37
如果您使用内置的uniqueidentifier生成方法(比如newId()或C#的Guid.NewGuid()),是的,它在数据库、服务器、国家和其他任何地方都是独一无二的。
事实上,这是GUIDs复制的主要用途之一。如果您在两个数据库中具有相同的GUID,则可以保证它是故意放在那里的。
但是,请注意GUID确实有它们的缺点--它们可能会使您的索引执行得更糟(或者至少需要更多的维护),而且它们一般都更大。
而且,GUID并不是完全随机的--有几种不同的GUID生成算法,其中一些算法本质上是唯一的(例如,使用MAC地址作为GUID的一部分-默认情况下,MAC是唯一的,尽管您可以手动覆盖它们)--因此每个物理服务器中有一个部分是唯一的,机器确保它不会对两个GUID使用相同的时间戳。还有顺序GUID (newSequentialId()),它可以方便地避免索引碎片(当然,对于聚集索引非常有用)--请注意,这些依赖于计算机的MAC地址,而且它们是可预测的,所以如果您要公开GUID,并且您认为它们是“机密”的,那么您可能不想使用它们。有些GUID算法比其他算法更可预测。
发布于 2015-02-09 07:45:51
它是普遍独特的。它是由32个字符随机生成的字符串,使得复制成为1/ (16^ 32 )的可能性。
没有一定的机制来创造唯一性,极低的概率可以做到这一点。
https://stackoverflow.com/questions/28404964
复制相似问题