Sal*_*mar 0 c# sql-server microsoft-sync-framework
题
如何避免客户端/服务器数据库中的主键冲突
背景
我正在同步多个数据库.我有一个中央SQL Server数据库和许多客户端SQL Server数据库.现在说我在数据库中有一个具有主键ID的表X.
在第一个客户端中,我们在表X中有以下ID:
X(客户端1)
--------
1 | SomeValue
2 | SomeValue
3 | SomeValue
4 | SomeValue
在我的第二个客户
X(客户端2)
--------
1 | SomeValue
2 | SomeValue
3 | SomeValue
4 | SomeValue
当我同步时,我希望客户端只上传他们的数据而不是下载它们.
现在,当我将第一个客户端与服务器同步时,它将从(1 ... 4)添加主键.但是,当我与第二个客户端同步时,将有PRIMARY KEY CLASH.我怎么解决这个问题?
我正在使用SQL Server 2008 R2,Sync Framework和C#.
我已经考虑过将GUID用作主键的想法,这在我的情况下是不可行的,因为我正在处理遗留数据库.此外,重新设置IDENTITY值的想法有点容易出错.如何在不插入值的情况下增加标识列?PS:主键设置为IDENTITY,增量为1.
为了支持能够插入记录的分布式客户端,模式必须支持客户端DB创建没有冲突的行.这意味着要么为PK使用GUID,要么使用连锁密钥.(ID + ClientID)*无论哪种方式,架构更改.
手动同步客户端数据库,否则意味着在插入或处理异常之前检查冲突的ID,然后替换ID或允许为冲突的记录生成身份.这意味着更新所有FK关系.耗时且容易出错.