resources/views/pages/frontend/docs/uml-der-relacional.md
Última modificación: 24 Oct, 2026

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:
    • usuarios se conecta de forma Muchos a Muchos con roles vía role_user.
    • roles se conecta de forma Muchos a Muchos con permissions vía permission_role.
  • Diccionario Centralizado:
    • catalogos mantiene una relación reflexiva consigo misma (catalogo_id) y actúa como catálogo foráneo para usuarios.cat_status, configuracion_usuarios.cat_status y lost_password.cat_status.
  • Control de Concurrencia y Sesiones:
    • login mantiene una relación 1:N con usuarios, almacenando el session_id de Redis.
    • login_log registra intentos de acceso vinculados al usuario (o huérfanos con usuario_input para intentos fallidos anónimos).
  • Infraestructura de Procesamiento:
    • job_batches y failed_jobs gestionan 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 id de tipo BIGINT 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)"

Enlaces Relacionados

Edita este documento en >> uml-der-relacional.md
← Volver a la Landing Page