Связь двух сущностей в разных базах данных и связь между двумя приложениями

Короткая история: как связать две сущности в разных базах данных? В микросервисах у каждого сервиса есть своя собственная база данных. Как объекты в разных базах данных связаны друг с другом в архитектуре микросервиса?

Длинная история: я пишу два отдельных, но связанных приложения, скажем, систему управления для продавцов подержанных автомобилей и систему учета и финансирования. Я хочу, чтобы мои приложения работали друг с другом и независимо друг от друга.

Теперь давайте предположим, что сделка с транспортным средством завершена в системе управления, а затем из окончательных данных о сделке я бы сформировал счет в финансовой системе. Точно так же, если сделка удаляется, мне нужно будет также удалить соответствующий счет-фактуру, но для удаления соответствующего счета-фактуры я хочу как-то связать сделку и счет-фактуру, но я не могу просто установить связь между объектами, потому что я хочу, чтобы мои приложения быть полностью независимым, что означает разные базы данных. Или есть способ установить связь между двумя таблицами в разных базах данных? Это даже хорошая идея сделать связь двух таблиц разных баз данных?

Кроме того, я хочу двухстороннее общение, например, если сделка редактируется, то редактируется и связанный с ней счет, а если редактируется счет, то редактируется и связанная с ним сделка, также как и микросервисы. Я хочу, чтобы обе системы могли бегать самостоятельно и рядом друг с другом.

Возможное решение: Единственное решение, о котором я могу подумать сейчас, - это иметь одну базу данных и два отдельных прикладных уровня, но сам по себе этот дизайн не годится, так как я уже использовал этот подход и у него есть много собственных недостатков.

Технологический стек: Мой технологический стек -.Net и MSSQL.

Я ищу ответы от людей, которые разработали такую ​​систему или сталкивались с подобными проблемами раньше

1 ответ

Решение

Используйте uuids для идентификации ваших сущностей и ссылайтесь на них как на простые строки.

Посмотрите, как я могу генерировать UUID в C#

Например:

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

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

Не используйте общее постоянство, такое как общая база данных. См. /questions/15077526/mikroservisyi-s-obschej-bazoj-dannyih-ispolzuya-neskolko-orm/15077538#15077538.

Другие вопросы по тегам