2012-05-25 78 views
1

我想设计一个数据库结构。它将被安装到sql服务器的几个实例中。我需要定期合并这些数据库。数据库与重复PK/FK同步

问题是在server_A(PK)id=222user=Tom,但在server_B(PK)id=222user=Peter

所以,在server_ATom(FK)userid=222Address=1 abc street ...,但同样(FK)userid=222server_B地址表中有不同的含义。

我能想到的就是这种便宜的方法。如果我有3个服务器,我在第一台服务器中开始编号,从1000000001开始,第二台服务器在2000000001,第三台在3000000001 ....所以他们不会重复自己,这可能适用于小时间项目?我不需要使用Guid/uniqueidentifier将问题进一步复杂化?

什么是这种情况的常见/正确的方法?

+0

哪个数据库系统?大多数供应商提供服务器之间的某种复制,所以你不必亲自去做。 –

+0

MS SQL server 2008 – Tom

回答

1

您可以添加server_id作为外键,该外键现在是复合主键的一部分以及原始主键。每个服务器都有自己的ID。

+1

这样做:D简单!谢谢。 – Tom

0

使用SQL Server的合并复制功能,它将为您处理此问题。

+0

我以前没有使用过这个功能。当它合并重复的PK时,会自动为您处理相关的FK吗?似乎不符合@ Branko的帖子? – Tom

0

使用GUID而不是ints作为主键。即使在不同的系统上生成它们也是唯一的。

我不是SQL Server合并复制方面的专家,但根据this post,它无法自动解决冲突的PK,所以最好避免冲突的PK。

+0

我想避免guid/uniqueidentifier,因为我听说当你有一个相当大的表时,它会使db变得更慢。在这里没有第一手的经验,但如果我在开始时没有仔细选择它,我可能会遇到另一个问题,以后处理性能问题。 – Tom

+0

@Tom,开销可能不如您想象的那么大(尤其是newsequentialid())... http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-guids。 html – clyc