好吧,我相信这个问题以前有人问过,但我还没有找到一个可靠的答案。我正在创建一个解决方案,包括远程办公室通过web服务将数据上传到一个主数据库。
基本上,每个办公室都会有一个每隔1小时左右运行一次的windows服务,将任何新数据收集到一个数据集中,通过http连接到服务器,然后上传数据集。然后服务器导入数据,一切正常。从理论上讲应该是可行的。正确的。
不是,所以每个办公室都有一个唯一的officeid,由服务器给它,以便在服务器上保持它们的唯一性。一开始我以为我会破解它,直到我意识到自动增量pks的问题。你看,所有的远程办公室都已经有了现有的数据,所有的表都有自动增量PK和所有相关的约束。具有officeid的根/父表没有问题,因为它已经是唯一的,问题在于外键,因为当它们到达服务器时,它们将有一个新的id,因此与子表的关系将丢失。
目前我只有两个解决方案。
删除服务器数据库上的所有自动增量和唯一pk约束,并使用officeid筛选出重复的外键。或者…
导入数据集时,使用scope_identity等工具跟踪每一行及其关联的父行,以便将每一个子行与正确的父行关联。
选项1看起来更容易实现,因为它对我来说工作更少,但我想知道sql的性能和数据完整性将成为一个问题,因为约束无法强制执行。选项2会控制一切,但天哪,所需的代码量令人难以置信。
有没有其他我不考虑的选择?如果我只有上面的两个,那是两个恶魔中较小的一个。
谢谢
约翰
最佳答案
使用guid作为主键。这不是100%万无一失(99.有相当大数量的9%),而且会有性能损失,但这是保持理智的最简单的方法。