.NET Core 6:Identity用户与跨库应用实体关联及架构疑问
多数据库用户关联问题的解决方案
不合并数据库的优化思路
- 用软删除替代物理删除:在认证库的用户表里加个
IsDeleted字段,删除用户时仅标记状态,不实际删除数据。这样业务库存储的UserId就不会变成无效引用,查询业务数据时过滤掉已删除用户即可。 - 事件驱动同步清理:借助事件总线(比如MediatR),当认证API执行用户删除操作时,触发事件通知应用服务API,同步清理业务库中关联的用户数据,或给这些数据打上无效标记。注意分布式事务的兼容性,比如SQL Server需配置MSDTC,实现复杂度稍高。
- 冗余用户关键信息+定期同步:业务库除了存储
UserId,还可冗余存储用户名、用户UUID这类稳定标识,然后定期调用认证API拉取用户状态,清理业务库中的无效UserId引用。适合对数据一致性要求不极端严格的场景。
合并数据库的利弊
- 优势:可直接建立数据库级外键关联,数据一致性更容易保障,无需跨库调用,开发和维护成本更低。
- 劣势:业务数据量增大后会拖慢认证库性能,且业务与认证服务耦合度提升,后续单独扩展任一模块会更麻烦。
折中方案:共享用户核心数据
在业务库单独创建一张用户核心信息表,仅存储认证库用户的UserId、IsActive这类必要状态字段,通过定时任务或实时事件同步认证库的用户状态变化。既保留两个数据库的独立性,又能在业务库做基本的有效性校验,避免无效引用。
内容的提问来源于stack exchange,提问作者Caio Marcus
相关产品推荐
相关产品推荐

