metis-desk/docs/diagrama-entidad-relacion.md
David ba562ad06f Refactor documentation for clarity and accuracy
- Updated examples in "estructura-web-por-entidades-y-operaciones.md" to reflect correct entity names and directory structures.
- Clarified modal usage and component interactions in "impresoras-del-perfil.md".
- Adjusted component descriptions in "logotipos-de-companias.md" for consistency.
- Revised persistence model details in "normalizacion-de-la-persistencia.md" to remove outdated references and clarify relationships.
- Enhanced dialog patterns in "patron-de-dialogos.md" with specific guidelines for field labels and validation.
- Specified component reuse in "patron-de-listados-de-entidades.md" to include @repo/rdx-ui components.
- Updated implementation status in "personas-y-departamentos.md" to reflect current features and pending tasks.
- Clarified project scope and initial setup instructions in "plan-de-desarrollo.md" and "puesta-en-marcha.md".
- Improved descriptions of workstation management in "puestos-de-trabajo.md" for better understanding of active/inactive states.
- Enhanced resource management details in "recursos-campos-y-plantillas.md" to clarify relationships and pending features.
- Revised best practices review in "revision-de-buenas-practicas.md" to reflect current project status and components.
- Updated teleworking documentation in "teletrabajo.md" to include references to remote technical assistance.
- Clarified user account management in "usuarios-y-acceso.md" to emphasize the importance of account deactivation.
2026-10-15 17:48:46 +02:00

1296 lines
46 KiB
Markdown

# Diagrama de entidad relación de la base de datos
Esquema derivado de la captura de MariaDB del **14 de octubre de 2026** mediante
`information_schema`, depurado el **15 de octubre de 2026** según la migración activa
`removeArchivedSupportTables`. Se excluyen las 19 tablas retiradas; sus fuentes y
contratos se conservan en [el archivo](funcionalidades-archivadas.md).
No se ha realizado una nueva consulta a MariaDB ni ejecutado migraciones para esta revisión.
Los demás metadatos conservan los tipos y restricciones de la captura original.
**111 tablas y 2 vistas SQL · 860 columnas · 1008 restricciones FK · 309 relaciones distintas** (agrupando restricciones con idénticas columnas, destino y reglas).
- [Diagrama completo, con todas las columnas (Mermaid)](diagrama-entidad-relacion-completo.mmd).
- [Diccionario completo de tablas, columnas y claves foráneas](diccionario-del-esquema-actual.md).
## Cómo leer los diagramas
`||`: exactamente uno; `|o`: cero o uno; `o{`: cero o muchos; `o|`: cero o uno en el extremo hijo. La nulabilidad de la FK determina si el padre es opcional. Las restricciones PRIMARY/UNIQUE determinan si el hijo puede repetirse. Las líneas discontinuas representan asociaciones por FK; no se deduce composición de dominio a partir de ellas. La etiqueta indica las columnas del hijo.
Los diagramas por área muestran las PK/FK y los padres externos necesarios para entender sus relaciones. Cada tabla pertenece a un área; los padres pueden repetirse como referencia. El archivo completo incluye todas las columnas, también las tablas sin FK. Los nombres son los reales de MariaDB: por ejemplo, las personas se almacenan en `company_contacts`.
## Vista principal
Vista reducida: omite tablas auxiliares e históricas; todas ellas aparecen en las áreas siguientes y en el diagrama completo.
```mermaid
erDiagram
direction LR
asset_brands
asset_definitions
assets
companies
company_contacts
company_departments
company_sites
person_department_assignments
resource_definitions
resources
users
work_profiles
workstation_assets
workstation_members
workstations
companies |o..o{ asset_definitions : "companyId"
asset_brands |o..o{ assets : "brandId"
asset_definitions ||..o{ assets : "templateId"
companies ||..o{ assets : "companyId"
company_sites |o..o{ assets : "siteId"
companies ||..o{ company_contacts : "companyId"
companies ||..o{ company_departments : "companyId"
companies ||..o{ company_sites : "companyId"
companies ||..o{ person_department_assignments : "companyId"
company_contacts ||..o{ person_department_assignments : "personId, companyId"
company_departments ||..o{ person_department_assignments : "departmentId, companyId"
companies |o..o{ resource_definitions : "companyId"
companies ||..o{ resources : "companyId"
resource_definitions |o..o{ resources : "addressFieldId"
resource_definitions |o..o{ resources : "contextFieldId"
resource_definitions |o..o{ resources : "referenceFieldId"
resource_definitions ||..o{ resources : "templateId"
assets ||..o{ work_profiles : "assetId"
companies ||..o{ work_profiles : "companyId"
company_contacts ||..o{ work_profiles : "personId"
assets ||..o{ workstation_assets : "assetId"
assets ||..o{ workstation_assets : "companyId, assetId"
companies ||..o{ workstation_assets : "companyId"
workstations ||..o{ workstation_assets : "companyId, workstationId"
workstations ||..o{ workstation_assets : "workstationId"
assets ||..o{ workstation_members : "assetId"
workstations ||..o{ workstation_members : "workstationId"
assets |o..o{ workstations : "computerAssetId"
companies ||..o{ workstations : "companyId"
company_contacts |o..o{ workstations : "personId"
company_sites |o..o{ workstations : "siteId"
```
## Áreas del esquema
| Área | Tablas |
| --- | ---: |
| Cuentas y accesos: histórico | 15 |
| Cuentas y accesos: estado actual | 18 |
| Vistas SQL de cuentas y accesos | 2 |
| Correo y configuraciones | 16 |
| Activos y catálogo | 18 |
| Compañías y personas | 8 |
| Usuarios y sesión | 3 |
| Procesos de personas | 9 |
| Teletrabajo y conexiones remotas | 4 |
| Recursos y catálogo | 13 |
| Perfiles de usuario | 2 |
| Puestos de trabajo | 5 |
## Cuentas y accesos: histórico
Tablas propias: `access_account_person_revision_values`, `access_account_revision_values`, `access_coverage_revision_values`, `access_environment_revision_values`, `access_grant_revision_values`, `access_group_revision_values`, `access_membership_revision_values`, `access_need_revision_permissions`, `access_need_revision_values`, `access_permission_revision_values`, `access_resource_revision_values`, `access_resource_type_revision_values`, `access_revisions`, `access_system_revision_values`, `access_template_revision_values`.
```mermaid
erDiagram
direction LR
access_account_person_revision_values {
char ownerId PK,FK
char accountId FK
char personId FK
}
access_account_revision_values {
char ownerId PK,FK
char systemId FK
char environmentId FK "nullable"
}
access_coverage_revision_values {
char ownerId PK,FK
char needId FK
char grantId FK
char accountPersonId FK
char membershipId FK "nullable"
}
access_environment_revision_values {
char ownerId PK,FK
char systemId FK
}
access_grant_revision_values {
char ownerId PK,FK
char resourceId FK
char permissionId FK
char accountId FK "nullable"
char groupId FK "nullable"
}
access_group_revision_values {
char ownerId PK,FK
char systemId FK
char environmentId FK "nullable"
char templateId FK "nullable"
}
access_items {
char id PK
char workspaceId FK
}
access_membership_revision_values {
char ownerId PK,FK
char accountId FK
char groupId FK
}
access_need_revision_permissions {
char ownerId PK,FK
int position PK
char permissionId FK
}
access_need_revision_values {
char ownerId PK,FK
char personId FK
char resourceId FK
}
access_permission_revision_values {
char ownerId PK,FK
char resourceTypeId FK
}
access_resource_revision_values {
char ownerId PK,FK
char resourceTypeId FK
char systemId FK "nullable"
char environmentId FK "nullable"
}
access_resource_type_revision_values {
char ownerId PK,FK
}
access_revisions {
char id PK
char itemId FK
char actorId FK
}
access_system_revision_values {
char ownerId PK,FK
}
access_template_revision_values {
char ownerId PK,FK
char systemId FK "nullable"
}
company_contacts {
char id PK
char companyId FK
}
users {
char id PK
}
access_items ||..o{ access_account_person_revision_values : "accountId"
access_revisions ||..o| access_account_person_revision_values : "ownerId"
company_contacts ||..o{ access_account_person_revision_values : "personId"
access_items |o..o{ access_account_revision_values : "environmentId"
access_items ||..o{ access_account_revision_values : "systemId"
access_revisions ||..o| access_account_revision_values : "ownerId"
access_items ||..o{ access_coverage_revision_values : "accountPersonId"
access_items ||..o{ access_coverage_revision_values : "grantId"
access_items |o..o{ access_coverage_revision_values : "membershipId"
access_items ||..o{ access_coverage_revision_values : "needId"
access_revisions ||..o| access_coverage_revision_values : "ownerId"
access_items ||..o{ access_environment_revision_values : "systemId"
access_revisions ||..o| access_environment_revision_values : "ownerId"
access_items |o..o{ access_grant_revision_values : "accountId"
access_items |o..o{ access_grant_revision_values : "groupId"
access_items ||..o{ access_grant_revision_values : "permissionId"
access_items ||..o{ access_grant_revision_values : "resourceId"
access_revisions ||..o| access_grant_revision_values : "ownerId"
access_items |o..o{ access_group_revision_values : "environmentId"
access_items ||..o{ access_group_revision_values : "systemId"
access_items |o..o{ access_group_revision_values : "templateId"
access_revisions ||..o| access_group_revision_values : "ownerId"
access_items ||..o{ access_membership_revision_values : "accountId"
access_items ||..o{ access_membership_revision_values : "groupId"
access_revisions ||..o| access_membership_revision_values : "ownerId"
access_items ||..o{ access_need_revision_permissions : "permissionId"
access_need_revision_values ||..o{ access_need_revision_permissions : "ownerId"
access_items ||..o{ access_need_revision_values : "resourceId"
access_revisions ||..o| access_need_revision_values : "ownerId"
company_contacts ||..o{ access_need_revision_values : "personId"
access_items ||..o{ access_permission_revision_values : "resourceTypeId"
access_revisions ||..o| access_permission_revision_values : "ownerId"
access_items |o..o{ access_resource_revision_values : "environmentId"
access_items ||..o{ access_resource_revision_values : "resourceTypeId"
access_items |o..o{ access_resource_revision_values : "systemId"
access_revisions ||..o| access_resource_revision_values : "ownerId"
access_revisions ||..o| access_resource_type_revision_values : "ownerId"
access_items ||..o{ access_revisions : "itemId"
users ||..o{ access_revisions : "actorId"
access_revisions ||..o| access_system_revision_values : "ownerId"
access_items |o..o{ access_template_revision_values : "systemId"
access_revisions ||..o| access_template_revision_values : "ownerId"
```
## Cuentas y accesos: estado actual
Tablas propias: `access_account_person_values`, `access_account_values`, `access_coverage_values`, `access_environment_values`, `access_grant_values`, `access_group_values`, `access_items`, `access_membership_values`, `access_need_permissions`, `access_need_values`, `access_permission_values`, `access_person_references`, `access_references`, `access_resource_type_values`, `access_resource_values`, `access_system_values`, `access_template_values`, `access_workspaces`.
```mermaid
erDiagram
direction LR
access_account_person_values {
char ownerId PK,FK
char accountId FK
char personId FK
}
access_account_values {
char ownerId PK,FK
char systemId FK
char environmentId FK "nullable"
}
access_coverage_values {
char ownerId PK,FK
char needId FK
char grantId FK
char accountPersonId FK
char membershipId FK "nullable"
}
access_environment_values {
char ownerId PK,FK
char systemId FK
}
access_grant_values {
char ownerId PK,FK
char resourceId FK
char permissionId FK
char accountId FK "nullable"
char groupId FK "nullable"
}
access_group_values {
char ownerId PK,FK
char systemId FK
char environmentId FK "nullable"
char templateId FK "nullable"
}
access_items {
char id PK
char workspaceId FK
}
access_membership_values {
char ownerId PK,FK
char accountId FK
char groupId FK
}
access_need_permissions {
char ownerId PK,FK
int position PK
char permissionId FK
}
access_need_values {
char ownerId PK,FK
char personId FK
char resourceId FK
}
access_permission_values {
char ownerId PK,FK
char resourceTypeId FK
}
access_person_references {
char itemId PK,FK
char personId PK,FK
}
access_references {
int id PK
char itemId FK
char targetId FK
}
access_resource_type_values {
char ownerId PK,FK
}
access_resource_values {
char ownerId PK,FK
char resourceTypeId FK
char systemId FK "nullable"
char environmentId FK "nullable"
}
access_system_values {
char ownerId PK,FK
}
access_template_values {
char ownerId PK,FK
char systemId FK "nullable"
}
access_workspaces {
char id PK
char companyId FK "nullable"
}
companies {
char id PK
}
company_contacts {
char id PK
char companyId FK
}
access_items ||..o{ access_account_person_values : "accountId"
access_items ||..o| access_account_person_values : "ownerId"
company_contacts ||..o{ access_account_person_values : "personId"
access_items |o..o{ access_account_values : "environmentId"
access_items ||..o| access_account_values : "ownerId"
access_items ||..o{ access_account_values : "systemId"
access_items ||..o{ access_coverage_values : "accountPersonId"
access_items ||..o{ access_coverage_values : "grantId"
access_items |o..o{ access_coverage_values : "membershipId"
access_items ||..o{ access_coverage_values : "needId"
access_items ||..o| access_coverage_values : "ownerId"
access_items ||..o| access_environment_values : "ownerId"
access_items ||..o{ access_environment_values : "systemId"
access_items |o..o{ access_grant_values : "accountId"
access_items |o..o{ access_grant_values : "groupId"
access_items ||..o| access_grant_values : "ownerId"
access_items ||..o{ access_grant_values : "permissionId"
access_items ||..o{ access_grant_values : "resourceId"
access_items |o..o{ access_group_values : "environmentId"
access_items ||..o| access_group_values : "ownerId"
access_items ||..o{ access_group_values : "systemId"
access_items |o..o{ access_group_values : "templateId"
access_workspaces ||..o{ access_items : "workspaceId"
access_items ||..o{ access_membership_values : "accountId"
access_items ||..o{ access_membership_values : "groupId"
access_items ||..o| access_membership_values : "ownerId"
access_items ||..o{ access_need_permissions : "permissionId"
access_need_values ||..o{ access_need_permissions : "ownerId"
access_items ||..o| access_need_values : "ownerId"
access_items ||..o{ access_need_values : "resourceId"
company_contacts ||..o{ access_need_values : "personId"
access_items ||..o| access_permission_values : "ownerId"
access_items ||..o{ access_permission_values : "resourceTypeId"
access_items ||..o{ access_person_references : "itemId"
company_contacts ||..o{ access_person_references : "personId"
access_items ||..o{ access_references : "itemId"
access_items ||..o{ access_references : "targetId"
access_items ||..o| access_resource_type_values : "ownerId"
access_items |o..o{ access_resource_values : "environmentId"
access_items ||..o| access_resource_values : "ownerId"
access_items ||..o{ access_resource_values : "resourceTypeId"
access_items |o..o{ access_resource_values : "systemId"
access_items ||..o| access_system_values : "ownerId"
access_items ||..o| access_template_values : "ownerId"
access_items |o..o{ access_template_values : "systemId"
companies |o..o{ access_workspaces : "companyId"
```
## Vistas SQL de cuentas y accesos
Tablas propias: `access_current_values`, `access_historical_values`.
```mermaid
erDiagram
direction LR
access_current_values
access_historical_values
```
## Correo y configuraciones
Tablas propias: `application_configuration_revisions`, `application_configurations`, `certificate_configuration_revisions`, `certificate_configurations`, `folder_mapping_revisions`, `folder_mappings`, `mail_configuration_revisions`, `mail_configurations`, `mailbox_revisions`, `mailbox_use_revisions`, `mailbox_uses`, `mailboxes`, `printer_configuration_revisions`, `printer_configurations`, `software_installation_revisions`, `software_installations`.
```mermaid
erDiagram
direction LR
access_items {
char id PK
char workspaceId FK
}
application_configuration_revisions {
char id PK
char configurationId FK
char actorId FK
char profileId FK "nullable"
char resourceId FK "nullable"
}
application_configurations {
char id PK
char companyId FK
char profileId FK
char resourceId FK
}
assets {
char id PK
char companyId FK
char templateId FK
char siteId FK "nullable"
char brandId FK "nullable"
}
certificate_configuration_revisions {
char id PK
char configurationId FK
char actorId FK
char profileId FK "nullable"
char resourceId FK "nullable"
}
certificate_configurations {
char id PK
char companyId FK
char profileId FK
char resourceId FK
}
companies {
char id PK
}
company_contacts {
char id PK
char companyId FK
}
folder_mapping_revisions {
char id PK
char mappingId FK
char actorId FK
char profileId FK "nullable"
char needId FK "nullable"
}
folder_mappings {
char id PK
char companyId FK
char profileId FK
char needId FK
}
mail_configuration_revisions {
char id PK
char configurationId FK
char actorId FK
char personId FK "nullable"
char accountId FK "nullable"
char assetId FK "nullable"
char profileId FK "nullable"
char mailboxId FK "nullable"
}
mail_configurations {
char id PK
char companyId FK
char personId FK "nullable"
char accountId FK "nullable"
char assetId FK "nullable"
char profileId FK "nullable"
char mailboxId FK "nullable"
}
mailbox_revisions {
char id PK
char itemId FK
char actorId FK
char accountId FK "nullable"
}
mailbox_use_revisions {
char id PK
char itemId FK
char actorId FK
char mailboxId FK "nullable"
char personId FK "nullable"
}
mailbox_uses {
char id PK
char companyId FK
char mailboxId FK
char personId FK
}
mailboxes {
char id PK
char companyId FK
char accountId FK "nullable"
}
printer_configuration_revisions {
char id PK
char configurationId FK
char actorId FK
char profileId FK "nullable"
char printerId FK "nullable"
}
printer_configurations {
char id PK
char companyId FK
char profileId FK
char printerId FK
}
resources {
char id PK
char companyId FK
char templateId FK
char addressFieldId FK "nullable"
char contextFieldId FK "nullable"
char accountId FK "nullable"
char referenceFieldId FK "nullable"
char resourceTypeId FK "nullable"
char systemId FK "nullable"
char environmentId FK "nullable"
}
software_installation_revisions {
char id PK
char configurationId FK
char assetId FK
char resourceId FK
char actorId FK
char licenseResourceId FK "nullable"
}
software_installations {
char id PK
char companyId FK
char assetId FK
char resourceId FK
char licenseResourceId FK "nullable"
}
users {
char id PK
}
work_profiles {
char id PK
char companyId FK
char personId FK
char accountId FK "nullable"
char assetId FK
}
application_configurations ||..o{ application_configuration_revisions : "configurationId"
resources |o..o{ application_configuration_revisions : "resourceId"
users ||..o{ application_configuration_revisions : "actorId"
work_profiles |o..o{ application_configuration_revisions : "profileId"
companies ||..o{ application_configurations : "companyId"
resources ||..o{ application_configurations : "resourceId"
work_profiles ||..o{ application_configurations : "profileId"
certificate_configurations ||..o{ certificate_configuration_revisions : "configurationId"
resources |o..o{ certificate_configuration_revisions : "resourceId"
users ||..o{ certificate_configuration_revisions : "actorId"
work_profiles |o..o{ certificate_configuration_revisions : "profileId"
companies ||..o{ certificate_configurations : "companyId"
resources ||..o{ certificate_configurations : "resourceId"
work_profiles ||..o{ certificate_configurations : "profileId"
access_items |o..o{ folder_mapping_revisions : "needId"
folder_mappings ||..o{ folder_mapping_revisions : "mappingId"
users ||..o{ folder_mapping_revisions : "actorId"
work_profiles |o..o{ folder_mapping_revisions : "profileId"
access_items ||..o{ folder_mappings : "needId"
companies ||..o{ folder_mappings : "companyId"
work_profiles ||..o{ folder_mappings : "profileId"
access_items |o..o{ mail_configuration_revisions : "accountId"
assets |o..o{ mail_configuration_revisions : "assetId"
company_contacts |o..o{ mail_configuration_revisions : "personId"
mail_configurations ||..o{ mail_configuration_revisions : "configurationId"
mailboxes |o..o{ mail_configuration_revisions : "mailboxId"
users ||..o{ mail_configuration_revisions : "actorId"
work_profiles |o..o{ mail_configuration_revisions : "profileId"
access_items |o..o{ mail_configurations : "accountId"
assets |o..o{ mail_configurations : "assetId"
companies ||..o{ mail_configurations : "companyId"
company_contacts |o..o{ mail_configurations : "personId"
mailboxes |o..o{ mail_configurations : "mailboxId"
work_profiles |o..o{ mail_configurations : "profileId"
access_items |o..o{ mailbox_revisions : "accountId"
mailboxes ||..o{ mailbox_revisions : "itemId"
users ||..o{ mailbox_revisions : "actorId"
company_contacts |o..o{ mailbox_use_revisions : "personId"
mailbox_uses ||..o{ mailbox_use_revisions : "itemId"
mailboxes |o..o{ mailbox_use_revisions : "mailboxId"
users ||..o{ mailbox_use_revisions : "actorId"
companies ||..o{ mailbox_uses : "companyId"
company_contacts ||..o{ mailbox_uses : "personId"
mailboxes ||..o{ mailbox_uses : "mailboxId"
access_items |o..o{ mailboxes : "accountId"
companies ||..o{ mailboxes : "companyId"
assets |o..o{ printer_configuration_revisions : "printerId"
printer_configurations ||..o{ printer_configuration_revisions : "configurationId"
users ||..o{ printer_configuration_revisions : "actorId"
work_profiles |o..o{ printer_configuration_revisions : "profileId"
assets ||..o{ printer_configurations : "printerId"
companies ||..o{ printer_configurations : "companyId"
work_profiles ||..o{ printer_configurations : "profileId"
assets ||..o{ software_installation_revisions : "assetId"
resources |o..o{ software_installation_revisions : "licenseResourceId"
resources ||..o{ software_installation_revisions : "resourceId"
software_installations ||..o{ software_installation_revisions : "configurationId"
users ||..o{ software_installation_revisions : "actorId"
assets ||..o{ software_installations : "assetId"
companies ||..o{ software_installations : "companyId"
resources |o..o{ software_installations : "licenseResourceId"
resources ||..o{ software_installations : "resourceId"
```
## Activos y catálogo
Tablas propias: `asset_availability`, `asset_brands`, `asset_catalogs`, `asset_characteristics`, `asset_definitions`, `asset_field_choices`, `asset_relationships`, `asset_revision_characteristics`, `asset_revisions`, `asset_specification_field_choices`, `asset_specification_fields`, `asset_specification_sections`, `asset_support`, `asset_support_revisions`, `asset_template_fields`, `asset_template_sections`, `assets`, `brand_catalog_lock`.
```mermaid
erDiagram
direction LR
asset_availability {
char id PK
char catalogId FK
char companyId FK
char definitionId FK
}
asset_brands {
char id PK
}
asset_catalogs {
char id PK
}
asset_characteristics {
char assetId PK,FK
char fieldId PK,FK
}
asset_definitions {
char id PK
char catalogId FK
char companyId FK "nullable"
}
asset_field_choices {
char fieldId PK,FK
int position PK
}
asset_relationships {
char id PK
char companyId FK
char sourceId FK
char targetId FK
char typeId FK
char createdBy FK
char endedBy FK "nullable"
}
asset_revision_characteristics {
char revisionId PK,FK
char assetId FK
char fieldId PK,FK
}
asset_revisions {
char id PK
char assetId FK
char actorId FK
char siteId FK "nullable"
char brandId FK "nullable"
char templateId FK
}
asset_specification_field_choices {
char assetId PK,FK
char fieldId PK,FK
int position PK
}
asset_specification_fields {
char assetId PK,FK
char fieldId PK,FK
char sectionId FK "nullable"
}
asset_specification_sections {
char assetId PK,FK
char id PK
}
asset_support {
char id PK
char companyId FK
char assetId FK
char resourceId FK
}
asset_support_revisions {
char id PK
char connectionId FK
char actorId FK
char resourceId FK
}
asset_template_fields {
char id PK
char templateId FK
char fieldId FK
char sectionId FK "nullable"
}
asset_template_sections {
char id PK
char templateId FK
}
assets {
char id PK
char companyId FK
char templateId FK
char siteId FK "nullable"
char brandId FK "nullable"
}
brand_catalog_lock {
int id PK
}
companies {
char id PK
}
company_sites {
char id PK
char companyId FK
}
resources {
char id PK
char companyId FK
char templateId FK
char addressFieldId FK "nullable"
char contextFieldId FK "nullable"
char accountId FK "nullable"
char referenceFieldId FK "nullable"
char resourceTypeId FK "nullable"
char systemId FK "nullable"
char environmentId FK "nullable"
}
users {
char id PK
}
asset_catalogs ||..o{ asset_availability : "catalogId"
asset_definitions ||..o{ asset_availability : "definitionId"
companies ||..o{ asset_availability : "companyId"
asset_definitions ||..o{ asset_characteristics : "fieldId"
asset_specification_fields ||..o| asset_characteristics : "assetId, fieldId"
assets ||..o{ asset_characteristics : "assetId"
asset_catalogs ||..o{ asset_definitions : "catalogId"
companies |o..o{ asset_definitions : "companyId"
asset_definitions ||..o{ asset_field_choices : "fieldId"
asset_definitions ||..o{ asset_relationships : "typeId"
assets ||..o{ asset_relationships : "companyId, sourceId"
assets ||..o{ asset_relationships : "companyId, targetId"
assets ||..o{ asset_relationships : "sourceId"
assets ||..o{ asset_relationships : "targetId"
companies ||..o{ asset_relationships : "companyId"
users ||..o{ asset_relationships : "createdBy"
users |o..o{ asset_relationships : "endedBy"
asset_definitions ||..o{ asset_revision_characteristics : "fieldId"
asset_revisions ||..o{ asset_revision_characteristics : "revisionId"
asset_revisions ||..o{ asset_revision_characteristics : "revisionId, assetId"
asset_specification_fields ||..o{ asset_revision_characteristics : "assetId, fieldId"
assets ||..o{ asset_revision_characteristics : "assetId"
asset_brands |o..o{ asset_revisions : "brandId"
asset_definitions ||..o{ asset_revisions : "templateId"
assets ||..o{ asset_revisions : "assetId"
company_sites |o..o{ asset_revisions : "siteId"
users ||..o{ asset_revisions : "actorId"
asset_definitions ||..o{ asset_specification_field_choices : "fieldId"
asset_specification_fields ||..o{ asset_specification_field_choices : "assetId, fieldId"
assets ||..o{ asset_specification_field_choices : "assetId"
asset_definitions ||..o{ asset_specification_fields : "fieldId"
asset_specification_sections |o..o{ asset_specification_fields : "assetId, sectionId"
assets ||..o{ asset_specification_fields : "assetId"
assets ||..o{ asset_specification_sections : "assetId"
assets ||..o{ asset_support : "assetId"
assets ||..o{ asset_support : "companyId, assetId"
companies ||..o{ asset_support : "companyId"
resources ||..o{ asset_support : "companyId, resourceId"
resources ||..o{ asset_support : "resourceId"
asset_support ||..o{ asset_support_revisions : "connectionId"
resources ||..o{ asset_support_revisions : "resourceId"
users ||..o{ asset_support_revisions : "actorId"
asset_definitions ||..o{ asset_template_fields : "fieldId"
asset_definitions ||..o{ asset_template_fields : "templateId"
asset_template_sections |o..o{ asset_template_fields : "sectionId"
asset_template_sections |o..o{ asset_template_fields : "templateId, sectionId"
asset_definitions ||..o{ asset_template_sections : "templateId"
asset_brands |o..o{ assets : "brandId"
asset_definitions ||..o{ assets : "templateId"
companies ||..o{ assets : "companyId"
company_sites |o..o{ assets : "siteId"
```
## Compañías y personas
Tablas propias: `companies`, `company_contacts`, `company_departments`, `company_logos`, `company_sites`, `department_assignment_revisions`, `person_department_assignments`, `person_photos`.
```mermaid
erDiagram
direction LR
companies {
char id PK
}
company_contacts {
char id PK
char companyId FK
}
company_departments {
char id PK
char companyId FK
}
company_logos {
char companyId PK,FK
}
company_sites {
char id PK
char companyId FK
}
department_assignment_revisions {
char id PK
char assignmentId FK
}
person_department_assignments {
char id PK
char companyId FK
char personId FK
char departmentId FK
}
person_photos {
char personId PK,FK
char companyId FK
}
companies ||..o{ company_contacts : "companyId"
companies ||..o{ company_departments : "companyId"
companies ||..o| company_logos : "companyId"
companies ||..o{ company_sites : "companyId"
person_department_assignments ||..o{ department_assignment_revisions : "assignmentId"
companies ||..o{ person_department_assignments : "companyId"
company_contacts ||..o{ person_department_assignments : "personId, companyId"
company_departments ||..o{ person_department_assignments : "departmentId, companyId"
company_contacts ||..o| person_photos : "personId, companyId"
```
## Usuarios y sesión
Tablas propias: `http_sessions`, `identity_state`, `users`.
```mermaid
erDiagram
direction LR
http_sessions {
varchar sid PK
char userId FK "nullable"
}
identity_state {
int id PK
char initialAdminId FK "nullable"
}
users {
char id PK
}
users |o..o{ http_sessions : "userId"
users |o..o{ identity_state : "initialAdminId"
```
## Procesos de personas
Tablas propias: `person_process_revision_tasks`, `person_process_revisions`, `person_process_tasks`, `person_processes`, `process_catalog_lock`, `process_template_instructions`, `process_template_revision_instructions`, `process_template_revisions`, `process_templates`.
```mermaid
erDiagram
direction LR
companies {
char id PK
}
company_contacts {
char id PK
char companyId FK
}
person_process_revision_tasks {
char ownerId PK,FK
char taskId PK
}
person_process_revisions {
char id PK
char actorId FK "nullable"
char itemId FK
char personId FK "nullable"
char templateId FK "nullable"
}
person_process_tasks {
char ownerId PK,FK
char taskId PK
}
person_processes {
char id PK
char companyId FK
char personId FK
char templateId FK
}
process_catalog_lock {
int id PK
}
process_template_instructions {
char ownerId PK,FK
int position PK
}
process_template_revision_instructions {
char ownerId PK,FK
int position PK
}
process_template_revisions {
char id PK
char actorId FK "nullable"
char itemId FK
}
process_templates {
char id PK
}
users {
char id PK
}
person_process_revisions ||..o{ person_process_revision_tasks : "ownerId"
company_contacts |o..o{ person_process_revisions : "personId"
person_processes ||..o{ person_process_revisions : "itemId"
process_templates |o..o{ person_process_revisions : "templateId"
users |o..o{ person_process_revisions : "actorId"
person_processes ||..o{ person_process_tasks : "ownerId"
companies ||..o{ person_processes : "companyId"
company_contacts ||..o{ person_processes : "personId"
process_templates ||..o{ person_processes : "templateId"
process_templates ||..o{ process_template_instructions : "ownerId"
process_template_revisions ||..o{ process_template_revision_instructions : "ownerId"
process_templates ||..o{ process_template_revisions : "itemId"
users |o..o{ process_template_revisions : "actorId"
```
## Teletrabajo y conexiones remotas
Tablas propias: `remote_connection_revisions`, `remote_connections`, `telework_authorization_revisions`, `telework_authorizations`.
```mermaid
erDiagram
direction LR
assets {
char id PK
char companyId FK
char templateId FK
char siteId FK "nullable"
char brandId FK "nullable"
}
companies {
char id PK
}
company_contacts {
char id PK
char companyId FK
}
company_sites {
char id PK
char companyId FK
}
remote_connection_revisions {
char id PK
char connectionId FK
char actorId FK
char personId FK "nullable"
char sourceAssetId FK "nullable"
char targetAssetId FK "nullable"
char targetResourceId FK "nullable"
char siteId FK "nullable"
}
remote_connections {
char id PK
char companyId FK
char personId FK
char sourceAssetId FK "nullable"
char targetAssetId FK "nullable"
char targetResourceId FK "nullable"
char siteId FK "nullable"
}
resources {
char id PK
char companyId FK
char templateId FK
char addressFieldId FK "nullable"
char contextFieldId FK "nullable"
char accountId FK "nullable"
char referenceFieldId FK "nullable"
char resourceTypeId FK "nullable"
char systemId FK "nullable"
char environmentId FK "nullable"
}
telework_authorization_revisions {
char id PK
char authorizationId FK
char actorId FK
char personId FK "nullable"
}
telework_authorizations {
char id PK
char companyId FK
char personId FK
}
users {
char id PK
}
assets |o..o{ remote_connection_revisions : "sourceAssetId"
assets |o..o{ remote_connection_revisions : "targetAssetId"
company_contacts |o..o{ remote_connection_revisions : "personId"
company_sites |o..o{ remote_connection_revisions : "siteId"
remote_connections ||..o{ remote_connection_revisions : "connectionId"
resources |o..o{ remote_connection_revisions : "targetResourceId"
users ||..o{ remote_connection_revisions : "actorId"
assets |o..o{ remote_connections : "sourceAssetId"
assets |o..o{ remote_connections : "targetAssetId"
companies ||..o{ remote_connections : "companyId"
company_contacts ||..o{ remote_connections : "personId"
company_sites |o..o{ remote_connections : "siteId"
resources |o..o{ remote_connections : "targetResourceId"
company_contacts |o..o{ telework_authorization_revisions : "personId"
telework_authorizations ||..o{ telework_authorization_revisions : "authorizationId"
users ||..o{ telework_authorization_revisions : "actorId"
companies ||..o{ telework_authorizations : "companyId"
company_contacts ||..o| telework_authorizations : "personId"
```
## Recursos y catálogo
Tablas propias: `resource_availability`, `resource_catalogs`, `resource_characteristics`, `resource_definitions`, `resource_field_choices`, `resource_revision_characteristics`, `resource_revisions`, `resource_specification_field_choices`, `resource_specification_fields`, `resource_specification_sections`, `resource_template_fields`, `resource_template_sections`, `resources`.
```mermaid
erDiagram
direction LR
access_items {
char id PK
char workspaceId FK
}
companies {
char id PK
}
resource_availability {
char id PK
char catalogId FK
char companyId FK
char definitionId FK
}
resource_catalogs {
char id PK
}
resource_characteristics {
char resourceId PK,FK
char fieldId PK,FK
}
resource_definitions {
char id PK
char catalogId FK
char companyId FK "nullable"
}
resource_field_choices {
char fieldId PK,FK
int position PK
}
resource_revision_characteristics {
char revisionId PK,FK
char resourceId FK
char fieldId PK,FK
}
resource_revisions {
char id PK
char resourceId FK
char actorId FK
char addressFieldId FK "nullable"
char contextFieldId FK "nullable"
char accountId FK "nullable"
char referenceFieldId FK "nullable"
char resourceTypeId FK "nullable"
char systemId FK "nullable"
char environmentId FK "nullable"
char templateId FK "nullable"
}
resource_specification_field_choices {
char resourceId PK,FK
char fieldId PK,FK
int position PK
}
resource_specification_fields {
char resourceId PK,FK
char fieldId PK,FK
}
resource_specification_sections {
char resourceId PK,FK
char id PK
}
resource_template_fields {
char id PK
char templateId FK
char fieldId FK
char sectionId FK "nullable"
}
resource_template_sections {
char id PK
char templateId PK,FK
}
resources {
char id PK
char companyId FK
char templateId FK
char addressFieldId FK "nullable"
char contextFieldId FK "nullable"
char accountId FK "nullable"
char referenceFieldId FK "nullable"
char resourceTypeId FK "nullable"
char systemId FK "nullable"
char environmentId FK "nullable"
}
users {
char id PK
}
companies ||..o{ resource_availability : "companyId"
resource_catalogs ||..o{ resource_availability : "catalogId"
resource_definitions ||..o{ resource_availability : "definitionId"
resource_definitions ||..o{ resource_characteristics : "fieldId"
resources ||..o{ resource_characteristics : "resourceId"
companies |o..o{ resource_definitions : "companyId"
resource_catalogs ||..o{ resource_definitions : "catalogId"
resource_definitions ||..o{ resource_field_choices : "fieldId"
resource_definitions ||..o{ resource_revision_characteristics : "fieldId"
resource_revisions ||..o{ resource_revision_characteristics : "revisionId"
resources ||..o{ resource_revision_characteristics : "resourceId"
access_items |o..o{ resource_revisions : "accountId"
access_items |o..o{ resource_revisions : "environmentId"
access_items |o..o{ resource_revisions : "resourceTypeId"
access_items |o..o{ resource_revisions : "systemId"
resource_definitions |o..o{ resource_revisions : "addressFieldId"
resource_definitions |o..o{ resource_revisions : "contextFieldId"
resource_definitions |o..o{ resource_revisions : "referenceFieldId"
resource_definitions |o..o{ resource_revisions : "templateId"
resources ||..o{ resource_revisions : "resourceId"
users ||..o{ resource_revisions : "actorId"
resource_definitions ||..o{ resource_specification_field_choices : "fieldId"
resources ||..o{ resource_specification_field_choices : "resourceId"
resource_definitions ||..o{ resource_specification_fields : "fieldId"
resources ||..o{ resource_specification_fields : "resourceId"
resources ||..o{ resource_specification_sections : "resourceId"
resource_definitions ||..o{ resource_template_fields : "fieldId"
resource_definitions ||..o{ resource_template_fields : "templateId"
resource_template_sections |o..o{ resource_template_fields : "templateId, sectionId"
resource_definitions ||..o{ resource_template_sections : "templateId"
access_items |o..o{ resources : "accountId"
access_items |o..o{ resources : "environmentId"
access_items |o..o{ resources : "resourceTypeId"
access_items |o..o{ resources : "systemId"
companies ||..o{ resources : "companyId"
resource_definitions |o..o{ resources : "addressFieldId"
resource_definitions |o..o{ resources : "contextFieldId"
resource_definitions |o..o{ resources : "referenceFieldId"
resource_definitions ||..o{ resources : "templateId"
```
## Perfiles de usuario
Tablas propias: `work_profile_revisions`, `work_profiles`.
```mermaid
erDiagram
direction LR
access_items {
char id PK
char workspaceId FK
}
assets {
char id PK
char companyId FK
char templateId FK
char siteId FK "nullable"
char brandId FK "nullable"
}
companies {
char id PK
}
company_contacts {
char id PK
char companyId FK
}
users {
char id PK
}
work_profile_revisions {
char id PK
char profileId FK
char accountId FK "nullable"
char actorId FK
char personId FK "nullable"
char assetId FK "nullable"
}
work_profiles {
char id PK
char companyId FK
char personId FK
char accountId FK "nullable"
char assetId FK
}
access_items |o..o{ work_profile_revisions : "accountId"
assets |o..o{ work_profile_revisions : "assetId"
company_contacts |o..o{ work_profile_revisions : "personId"
users ||..o{ work_profile_revisions : "actorId"
work_profiles ||..o{ work_profile_revisions : "profileId"
access_items |o..o{ work_profiles : "accountId"
assets ||..o{ work_profiles : "assetId"
companies ||..o{ work_profiles : "companyId"
company_contacts ||..o{ work_profiles : "personId"
```
## Puestos de trabajo
Tablas propias: `workstation_assets`, `workstation_members`, `workstation_revision_members`, `workstation_revisions`, `workstations`.
```mermaid
erDiagram
direction LR
assets {
char id PK
char companyId FK
char templateId FK
char siteId FK "nullable"
char brandId FK "nullable"
}
companies {
char id PK
}
company_contacts {
char id PK
char companyId FK
}
company_sites {
char id PK
char companyId FK
}
users {
char id PK
}
workstation_assets {
char workstationId PK,FK
char companyId FK
char assetId PK,FK
}
workstation_members {
char workstationId PK,FK
char assetId PK,FK
}
workstation_revision_members {
char revisionId PK,FK
char assetId PK,FK
}
workstation_revisions {
char id PK
char workstationId FK
char actorId FK
char siteId FK "nullable"
char personId FK "nullable"
char computerAssetId FK "nullable"
}
workstations {
char id PK
char companyId FK
char siteId FK "nullable"
char personId FK "nullable"
char computerAssetId FK "nullable"
}
assets ||..o{ workstation_assets : "assetId"
assets ||..o{ workstation_assets : "companyId, assetId"
companies ||..o{ workstation_assets : "companyId"
workstations ||..o{ workstation_assets : "companyId, workstationId"
workstations ||..o{ workstation_assets : "workstationId"
assets ||..o{ workstation_members : "assetId"
workstations ||..o{ workstation_members : "workstationId"
assets ||..o{ workstation_revision_members : "assetId"
workstation_revisions ||..o{ workstation_revision_members : "revisionId"
assets |o..o{ workstation_revisions : "computerAssetId"
company_contacts |o..o{ workstation_revisions : "personId"
company_sites |o..o{ workstation_revisions : "siteId"
users ||..o{ workstation_revisions : "actorId"
workstations ||..o{ workstation_revisions : "workstationId"
assets |o..o{ workstations : "computerAssetId"
companies ||..o{ workstations : "companyId"
company_contacts |o..o{ workstations : "personId"
company_sites |o..o{ workstations : "siteId"
```
## Observaciones del esquema físico
Los 113 objetos representados son **111 tablas y 2 vistas SQL**: `access_current_values` y `access_historical_values`. Las vistas no tienen FK propias y se representan como objetos independientes; no se inventan relaciones físicas para ellas.
La captura conservada contiene **17 relaciones con varias restricciones FK equivalentes**: 699 restricciones adicionales. Se han agrupado únicamente en la representación; no se han eliminado. El diccionario conserva todos los nombres de restricciones. Conviene revisar por separado el origen de estas duplicaciones.
Solo se dibujan relaciones declaradas en MariaDB. Un identificador sin FK no implica una relación física garantizada; las referencias polimórficas y las validaciones de aplicación pueden tener relaciones adicionales. Las tablas de revisiones forman parte del esquema actual y se incluyen. Esta documentación no implica que exista ya la auditoría centralizada diseñada para una implementación futura.
## Validación
La depuración documental se ha contrastado con la lista explícita de tablas de la migración
activa. El diccionario y el diagrama completo coinciden en 111 tablas y 2 vistas SQL,
860 columnas y 309 relaciones distintas; todas las tablas se asignan a un área.
Las reglas ON DELETE/ON UPDATE se recogen en el diccionario. Esta comprobación revisa
los documentos y la migración, no certifica el estado de una base de datos en ejecución.