我有一个应用程序在一家拥有总部和分支机构的企业上运行。每个分支都有单独的本地服务器和数据库。主服务器和数据库每天通过批量更新进行更新。在这种情况下,我该如何克服身份冲突。
例如:我在分支 A 上有一条 ID为 10的记录,还有一个参考 ID为 10(外键)的事务,但在将其保存到主数据库时,唯一 ID 可能会更改,因此事务不匹配....
请帮我解决这个问题...
先谢谢大家了。。。。
我有一个应用程序在一家拥有总部和分支机构的企业上运行。每个分支都有单独的本地服务器和数据库。主服务器和数据库每天通过批量更新进行更新。在这种情况下,我该如何克服身份冲突。
例如:我在分支 A 上有一条 ID为 10的记录,还有一个参考 ID为 10(外键)的事务,但在将其保存到主数据库时,唯一 ID 可能会更改,因此事务不匹配....
请帮我解决这个问题...
先谢谢大家了。。。。
我现在会忘记技术方面并澄清业务/应用程序逻辑。从您的帖子中根本不清楚冲突可能出现在哪里:客户记录,交易,所有数据?为什么会产生冲突?冲突如何解决?当您准确了解数据正在发生什么以及业务预期会发生什么时,您就可以研究技术解决方案。
GUID、数字范围和映射表等建议非常有用,但根本不清楚您要解决什么问题以及业务解决方案是什么。将所有数据物理地放到一个地方很容易(SSIS 将是一个很好的起点),真正的问题是您遵循什么规则来合并数据?
为了克服这个问题,您可以将uniqueidentifier
其用作分支的数据类型ID
。
因此,每个数据库都可以创建 ID,NEWID()
而不必担心主数据库更改密钥,因为它是普遍唯一的。
如果您不想更改数据类型,则每个分支可能都有数字范围。取决于在每个分支中创建的记录数。
The master server and DB is updated daily by batch updation
不知道您如何进行批量更新或数据库有多大以及您有多少表面临此类问题的详细信息,一种可能的通用方法是维护映射表
在您的批量更新逻辑中,
对于新记录,您将首先将记录插入到主表中,然后使用从主表生成的新 ID,将记录插入到映射表中,其中包含以下详细信息:分支、分支 ID、存储两个 ID 之间关系的 MasterID
对于现有记录,您将加入映射表并使用映射表中的 masterID 更新记录
通常,在 SQL Server 中,如果批量更新是一项工作,则可以使用 SSIS 并在 SSIS 包中包含这种逻辑。
此外,这取决于您的设计,但通常有一个
源数据库 --> 暂存数据库 --> 目标数据库
在你的情况下,它映射到
分支数据库 --> 暂存数据库 --> 主数据库
对于此类 ETL 类型的任务。在这种情况下,映射表可能应该驻留在暂存数据库中,但如果您没有这样的设计(您确实应该这样做),这些映射表也可以驻留在目标数据库中,即主数据库中