模块化单片数据库关系



让我们假设我们有一个模块化的整体架构,其中两个模块a和B都依赖于两个独立的DB模式。如果模块A需要来自模块B的数据,他将通过通信通道(同步或异步(获得数据,但从不直接查询B的DB模式。

但是,如果在应用程序级别需要这种解耦,那么在DB级别也需要吗?

例如,模式a中的表具有对模式中的表的外键引用是可以接受的吗?

如果是这种情况,如何识别模块A和模块B之间共享的实体?我的意思是,ID(数据库主键(可以在模块之间传递吗?

非常感谢

经过一番阅读,我得出了以下结论:

最佳实践是每个模块有一个数据库(模式(,每个模块只访问自己的数据库(或模式(,以确保模块之间没有耦合。模块应通过发布可由其他模块处理的事件/消息来共享数据。

然后回答我的问题,解耦不仅在应用程序级别是必需的,在数据库/数据级别也是必需的。不同模块的表之间不应该有任何关系/外键,但不同模块的数据库之间的数据重复是可以接受的。

此外,在模块之间共享实体Id也是完全可以的,其中每个模块都将Id以及最终的其他实体信息存储在自己的数据库/模式中。

如果报告/分析需要任何跨模块数据聚合,则必须在与模块访问的数据库(特定报告数据库(不同的数据库中进行。

最新更新