关联不同数据库中的两个实体以及两个应用程序之间的通信

时间:2019-01-21 21:56:41

标签: .net sql-server architecture microservices system-design

短篇小说:如何关联不同数据库中的两个实体?在微服务中,每个服务都有自己的数据库,在微服务体系结构中,不同数据库中的实体如何相互关联?

长话短说:我正在编写两个单独但相关的应用程序,可以说是一个二手车销售商的管理系统以及一个帐户和财务系统。我希望我的应用程序也可以彼此独立地工作。

现在,假设车辆交易在管理系统中完成,然后根据最终交易数据,我将在财务系统中生成发票。同样,如果要删除交易,那么我也必须删除相应的发票,但要删除相应的发票,我想以某种方式将交易与发票相关联,但是我不能简单地在实体之间建立关系,因为我想要我的应用程序完全独立,这也意味着不同的数据库。还是有办法在不同数据库中的两个表之间建立关系?关联两个不同数据库的表甚至是一个好主意吗?

此外,我想要双向通信,例如,如果交易被编辑,那么其相关发票也将被编辑;如果发票被编辑,则其相关交易也将被编辑,就像微服务一样,我希望两个系统都可以能够独立运行并彼此并存。

可能的解决方案:我现在能想到的唯一解决方案是拥有一个数据库和两个独立的应用程序层,但是这种设计本身并不好,因为我以前使用过这种方法,并且有一个有很多缺点。

技术堆栈:我的技术堆栈是.Net和MSSQL

我正在寻找曾经设计过这种系统或曾经遇到过类似问题的人的答案

1 个答案:

答案 0 :(得分:1)

使用uuids来标识您的实体,并将其引用为简单的字符串。

请参见How can I generate UUID in C#

例如:

{
  "Name" : "MyDeal",
  "Id" : "6a0e5244-2a85-4944-9be4-04c8cfbf3e45"
}

{
  "Name" : "MyInvoice",
  "Id" : "efed8b94-0065-4004-adcc-9f2d219fb6eb",
  "DealReference" : "6a0e5244-2a85-4944-9be4-04c8cfbf3e45"
}

请勿使用公共持久性,例如公共数据库。参见https://stackoverflow.com/a/43618284/7803650