我正在考虑开发一个应用程序,它将被几个(5-8)不同的机构使用,所有这些机构都彼此相关,但作为独立的企业运营。虽然每个机构都将使用相同的应用程序,但它们各自在后端都有自己的独立数据库。该业务已经运营多年,需要将历史数据迁移到新数据库。
对于几乎所有的意图和目的,这些机构的数据都是无关的。然而,我希望能够在不同数据库中的客户之间建立联系,例如,确保一个在一家机构有坏账的客户不会在没有任何警告的情况下去另一家机构开户。
我能想到的唯一解决方案是有一个中央数据库,它比驱动应用程序的数据库小得多,也简单得多,它有一个Person表。当在任何离散数据库中创建新客户端时,将根据名称和邮政编码对该中心表执行查找,以建议可能的匹配。
如果用户看到一个现有的“Person”似乎与他们正在设置的客户相匹配,他们将从列表中选择匹配的记录,并将来自中心表的唯一Person ID添加到该机构自己数据库的client表的PersonID列中。如果没有找到匹配项,则首先在中央Person表中创建一条新记录,存储过程返回新的Person ID,该ID将再次添加到机构数据库客户端表的PersonID列中。
本质上,每个数据库中的每个客户端表都有一个外键字段,但这并不是在数据库中实际定义的,因为具有主键的表( Person表)位于不同的数据库中。
这听起来像是一个合理的解决方案吗?有没有人能建议一个更好的方法?我可以看到这种方法的问题,比如“如果客户的详细信息在一个机构数据库中更新了,您会怎么做-您会向上填充更改的内容吗?”但我想不出更好的替代方案。
发布于 2014-03-04 05:27:45
更好的方法是为整个应用程序提供一个数据库,该数据库可以进行同步复制(Master-Master Replication)。阅读here
就数据库设计而言,每个机构都使用相同的数据库但通过institution_id来区分的multi-tenant架构会更容易一些。通过这种方式,您可以在整个组织中确保用户的唯一性,同时管理模式更改、更新等。
https://stackoverflow.com/questions/22151445
复制相似问题