6.2 DER: Colección NoSQL MongoDB
Este diagrama modela la estructura de documento BSON de la colección auditoria en MongoDB 7.0, utilizada por Mañuti para almacenar la bitácora de actividad forense de forma no relacional y flexible.
1. Explicación y Semántica del Diagrama
El modelo documental desacopla los metadatos de auditoría de la rigidez de los esquemas SQL:
- Identificador BSON (
_id): Llave primaria de 12 bytes autogenerada por MongoDB con marca de tiempo implícita. - Snapshot de Identidad: Almacena el
usuario_idnumérico relacional pero duplica elusuario_nombrecomo texto plano. Si el usuario es eliminado o anonimizado en MariaDB, la autoría del evento histórico se conserva inalterada. - Sub-documento Dinámico
payload: Objeto JSON flexible que almacena los parámetros enviados en el request (sanitizados previamente en el middleware para excluir contraseñas y binarios). Puede contener estructuras anidadas de cualquier profundidad. - Indexación: El campo
created_atestá indexado en MongoDB en orden descendente para acelerar las consultas de telemetría y las políticas de retención ISO 27701.
2. Cómo se Lee este Diagrama
- La clase modela un documento BSON dentro de la colección
auditoria. - Los tipos de datos corresponden a los equivalentes nativos de MongoDB (
ObjectId,Int64,Int32,ISODate,Object). - La nota anexa describe los principios de procesamiento asíncrono y sanitización que gobiernan el almacenamiento del objeto.
3. Implementación en el Framework Mañuti
- Modelo:
App\Models\AuditLog(extiendeMongoDB\Laravel\Eloquent\Model). - Conexión:
DB_MONGO_CONNECTION=mongodbconfigurada enconfig/database.php. - Escritura: Ejecutada de forma asíncrona por el job
App\Jobs\ProcessAuditLogen workers de Horizon.
4. Diagrama Mermaid
classDiagram
class Collection_auditoria {
+_id : ObjectId PK
+usuario_id : Int64 Nullable
+usuario_nombre : String
+ip : String
+user_agent : String
+permiso : String
+url : String
+metodo : String
+status : Int32
+payload : Object JSON
+created_at : ISODate
}
note for Collection_auditoria "Payload: Contiene los inputs del Request (limpio de contraseñas/tokens).<br>Estructura flexible.<br><br>Este documento se genera de forma asíncrona vía Laravel Horizon."