数据库复制的合适数据类型是什么?

时间:2012-12-10 14:24:39

标签: sql-server

我正在使用SQL Server 2008创建数据库。

这个数据库将在两个国家使用,并且在某个时间(每天)它们将被同步,我将使用复制服务来实现它。

大多数表都使用具有Identity增量的Int列。但是这些表在部署时将为空,因此两个国家/地区都将有一行标识1,2和子。我之前从未使用过复制,因此我想知道表同步时是否会出错?

我应该使用GUID数据类型吗?

3 个答案:

答案 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的一部分进行更改,不会在设备之间产生冲突。