6.1 DER: Esquema Relacional MariaDB
Este diagrama Entidad-Relación (DER) modela el esquema relacional normalizado de Mañuti en MariaDB, con todas sus tablas nucleares, llaves primarias, llaves foráneas y relaciones de integridad referencial.
1. Explicación y Semántica del Diagrama
El modelo expone las interconexiones fundamentales del sistema relacional:
- Identidad y Seguridad:
usuariosse conecta de forma Muchos a Muchos conrolesvíarole_user.rolesse conecta de forma Muchos a Muchos conpermissionsvíapermission_role.
- Diccionario Centralizado:
catalogosmantiene una relación reflexiva consigo misma (catalogo_id) y actúa como catálogo foráneo parausuarios.cat_status,configuracion_usuarios.cat_statusylost_password.cat_status.
- Control de Concurrencia y Sesiones:
loginmantiene una relación 1:N conusuarios, almacenando elsession_idde Redis.login_logregistra intentos de acceso vinculados al usuario (o huérfanos conusuario_inputpara intentos fallidos anónimos).
- Infraestructura de Procesamiento:
job_batchesyfailed_jobsgestionan el estado persistente de las colas de Horizon.
2. Cómo se Lee este Diagrama
- Las cajas representan tablas relacionales en MariaDB con sus columnas principales y restricciones (
PK,FK). - Notación de "Pata de Gallo" (Crow's Foot):
||--|{: Relación Uno a Muchos obligatoria.||--o{: Relación Uno a Muchos opcional.|o--o{: Relación reflexiva jerárquica padre-hijo.
3. Implementación en el Framework Mañuti
- Todas las tablas implementan llaves primarias
idde tipoBIGINT UNSIGNED. - Las entidades de negocio implementan soporte para borrado lógico (Soft Deletes) mediante
deleted_at.
4. Diagrama Mermaid
erDiagram
usuarios {
bigint id PK
bigint cat_status FK
varchar usuario
varchar correo
varchar password
timestamp email_verified_at
varchar remember_token
timestamp deleted_at
}
roles {
bigint id PK
varchar name
}
permissions {
bigint id PK
varchar slug
boolean auditable
}
role_user {
bigint usuario_id FK
bigint role_id FK
}
permission_role {
bigint role_id FK
bigint permission_id FK
}
catalogos {
bigint id PK
bigint catalogo_id FK
varchar catalogo
varchar etiqueta
}
configuracion_usuarios {
bigint id PK
bigint usuario_id FK
bigint cat_status FK
varchar clave
text valor
}
login {
bigint id PK
bigint usuario_id FK
varchar session_id
boolean open
}
login_log {
bigint id PK
bigint usuario_id FK
varchar usuario_input
boolean exitoso
}
lost_password {
bigint id PK
bigint usuario_id FK
bigint cat_status FK
varchar token
}
job_batches {
varchar id PK
int pending_jobs
int failed_jobs
}
failed_jobs {
varchar uuid PK
longtext payload
longtext exception
}
%% Relaciones Pivot (Muchos a Muchos)
usuarios ||--|{ role_user : "pertenece"
roles ||--|{ role_user : "agrupa"
roles ||--|{ permission_role : "tiene"
permissions ||--|{ permission_role : "asignado a"
%% Relaciones Directas
catalogos ||--|{ usuarios : "cat_status"
usuarios ||--|{ configuracion_usuarios : "tiene"
usuarios ||--|{ login : "registra"
usuarios ||--o{ login_log : "genera"
usuarios ||--|{ lost_password : "solicita"
catalogos ||--|{ configuracion_usuarios : "cat_status"
catalogos ||--|{ lost_password : "cat_status"
%% Relación Recursiva
catalogos |o--o{ catalogos : "Hijos (Padre-Hijo)"