Estado: Aceptado Fecha: 2026-05-27 Responsable de Decisión: Arquitectura Padre: ADR-0067 — Modular Monolith Schema Per Domain
UMS es un modular monolith construido sobre .NET 10 y SQL Server, implementando múltiples bounded contexts (Identity, Authorization, Configuration, Audit, Approvals, IGA). La arquitectura base de Evolith (ADR-0067) establece que cada bounded context debe poseer su propio esquema de base de datos dentro de una única base de datos física, aplicando separación lógica y propiedad de módulo.
Antes de esta decisión, la convención de nombres de esquemas era inconsistente entre la documentación y el código, y algunas configuraciones de entidades dependían del fallback default schema del DbContext en lugar de declarar explícitamente su esquema. Esto creó riesgos de:
UMS usa una única base de datos física SQL Server con esquemas dedicados por bounded context. Cada módulo posee su esquema y sus tablas. El acceso cruzado entre módulos de base de datos está prohibido a nivel de repositorio.
| Bounded Context | Código | Nombre de Esquema | Módulo Propietario |
|---|---|---|---|
| Identity | BC-A | ums_identity |
Ums.Infrastructure/Persistence/Identity/ |
| Authorization | BC-B | ums_authorization |
Ums.Infrastructure/Persistence/Authorization/ |
| Configuration | BC-C | ums_configuration |
Ums.Infrastructure/Persistence/Configuration/ |
| Audit | BC-D | audit |
Ums.Infrastructure/Persistence/Audit/ |
| Approvals | BC-F | approvals |
Ums.Infrastructure/Persistence/Approvals/ |
| IGA | BC-H | iga |
Ums.Infrastructure/Persistence/IGA/ |
| Platform/Outbox | Infra | ums_platform |
Ums.Infrastructure/Persistence/Outbox/ |
IEntityTypeConfiguration debe llamar ToTable(tableName, schema) con la constante del esquema del módulo. Ninguna entidad puede depender del fallback HasDefaultSchema().*PersistenceConstants.cs bajo su carpeta de persistencia.dbo. Ninguna tabla puede crearse en el esquema default dbo.UmsPlatformDbContext sirve todos los bounded contexts pero respeta los límites de esquema mediante ToTable(tableName, schema) explícito en cada configuración de entidad:
// Ejemplo: Configuración de entidad de Authorization
builder.ToTable("SystemSuites", AuthorizationPersistenceConstants.Schema);
El esquema default (ums_platform) está configurado como fallback para entidades de infraestructura únicamente (Outbox), pero incluso estas deben declarar su esquema explícitamente.
UmsPlatformDbContext, creando acoplamiento en tiempo de compilación. Esto es aceptado para un modular monolith pero requeriría refactoring si UMS evoluciona a arquitectura distribuida.ums_ (audit, approvals, iga). Esta es una elección pragmática para mantener nombres concisos; el prefijo ums_ está reservado para contextos de negocio core.ToTable(tableName, schema) con una constante de *PersistenceConstants.cs.CREATE SCHEMA) y todas las tablas dentro de ese esquema.| Índice ADR | ADR Padre-0067 |