我正在使用 SQL Server 2008 创建数据库。
该数据库将在两个国家/地区使用,并且在某个时间(每天)它们将同步,我将使用复制服务来完成该操作。
大多数表都使用带有标识增量的 Int 列。但是部署时这些表将是空的,因此两个国家/地区将有一行标识为 1、2 和儿子。我以前从未使用过复制,所以我想知道表同步时是否会出现错误?
我应该改用 GUID 数据类型吗?
我正在使用 SQL Server 2008 创建数据库。
该数据库将在两个国家/地区使用,并且在某个时间(每天)它们将同步,我将使用复制服务来完成该操作。
大多数表都使用带有标识增量的 Int 列。但是部署时这些表将是空的,因此两个国家/地区将有一行标识为 1、2 和儿子。我以前从未使用过复制,所以我想知道表同步时是否会出现错误?
我应该改用 GUID 数据类型吗?
复制身份列(MSDN):
复制提供了三种身份范围管理选项:
自动的。用于合并复制和事务复制以及订阅服务器上的更新...
手动的。用于快照和事务复制,而订阅服务器上没有更新...
没有任何。仅出于向后兼容性建议使用此选项...
所以,是的,您可以继续使用IDENTITY
,前提是您通读了有关复制的信息并选择了一个对您有意义的选项。
在自动下,它所做的是每个服务器获取一系列可用的身份值并根据需要分发各个值。如果同步发生得足够频繁,以至于范围没有完全耗尽,您将永远不会注意到这个细节。
这允许您稍后根据需要进行扩展 - 与例如MOD
一个服务器分发奇数值而另一个服务器分发偶数值的方案相反 - 您不能轻易地将第三个服务器添加到这样的方案中。
根据您的描述,听起来您想要实现所谓的合并复制。在 SQL Server 中,您不需要将标识更改为 GUID,但是,如果您不这样做,SQL Server 将自动为每个表添加另一个名为 rowguid 的列,您最终可能会得到原始标识列的重复项。为了避免这种情况,您可以让服务器分配 mod 2 ID。
在我看来,对 ID 完全使用 GUID 是最有意义的。不要忘记在您的身份列上设置 ROWGUIDCOL 属性。祝你好运。
相关 MSDN: http ://technet.microsoft.com/en-us/library/ms152746.aspx
考虑将 deviceID 字段添加到用户可以更新的所有表中。由于每个设备都使用自己的 ID 作为 PK 的一部分进行更改,因此设备之间不会发生冲突。