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