2014-03-03 50 views
1

我正在研究一个应用程序,该应用程序将由几个(5-8)不同的机构使用,所有这些机构都相互关联,但作为独立业务运营。尽管每个机构都将使用同一个应用程序,但他们将在后端各自拥有自己的独立数据库。该业务已经运营了很多年,而且历史数据需要迁移到新的数据库中。在数据库之间共享数据

几乎所有的意图和目的,这些机构的数据是不相关的。但是,我希望能够在不同数据库中的客户之间建立联系,例如,确保某个机构的坏账客户不会在没有任何警告的情况下与另一个机构开立账户。

我能想到的唯一解决方案是拥有一个中央数据库,这个数据库比一个Person表格更小,更简单。当在任何离散数据库中创建新客户端时,根据名称和邮政编码对该中心表执行查找,以提出可能的匹配。

如果用户看到似乎与他们设置的客户端匹配的现有“人员”,他们从列表中选择匹配的记录,并将中心表中的唯一人员ID添加到该机构自己的数据库的客户表。如果未找到匹配项,则首先在中心Person表中创建一条新记录,Stored Procedure将返回新​​的Person ID,该Person ID将再次添加到机构数据库的Client表中的PersonID列。

实际上,每个数据库中的每个客户端表都有一个外键字段,但这在数据库中并未实际定义,因为具有主键(Person表)的表位于不同的数据库中。

这听起来像是一个合理的解决方案吗?任何人都可以提出更好的方法?我可以看到这种方法存在的问题,例如“如果客户的详细信息在其中一个机构数据库中更新,您会做什么?您是否向上填充了更改的内容?”但我想不出更好的选择。

+0

您正在使用哪些DBMS?甲骨文? Postgres的? –

+0

对不起,这是SQL Server 2012. –

回答

0

更好的方法是让整个应用程序有一个可以复制的数据库(主 - 主复制)。阅读here

就数据库设计而言,更容易拥有multi-tenant体系结构,其中每个机构都使用同一个数据库,但用institution_id进行区分。这样,您可以确保整个组织内的用户唯一性,同时管理架构更改更新等。

+0

我曾想过单数据库解决方案,无论是单一模式还是多重模式,但我认为缺点大于我的情况。事实上,我能看到的唯一好处就是能够在客户端之间共享数据,就像我原来的问题一样,我只想对非常小的数据集进行分析。 –