# Arquitectura de Base de Datos

## Conexion y capa de acceso

- Configuracion: `config.inc.php`, `config.db.php` y `config.php`; secretos omitidos.
- Capa DB: `include/database/PearDatabase.php`.
- Driver: ADOdb en `libraries/adodb_vtigerfix/`.
- Motor inferido: MySQL/MariaDB usando `mysqli`.
- No hay ORM moderno; se usa `CRMEntity`, modelos Vtiger y SQL directo.

## Patrones de consultas

- Consultas parametrizadas: `PearDatabase::pquery($sql, $params)`.
- Consultas directas: tambien existen strings SQL concatenados en modulos legacy, especialmente relaciones/listados.
- `queryPlanner` se usa para joins condicionales en modulos grandes.
- `PearDatabase` puede registrar timing SQL en `vtiger_sqltimelog` si se activa performance logging.

## Tablas criticas mencionadas

- Core: `vtiger_crmentity`, `vtiger_tab`, `vtiger_field`, `vtiger_blocks`, `vtiger_links`, `vtiger_users`, `vtiger_groups`.
- ACL: `vtiger_profile`, `vtiger_role`, `vtiger_def_org_share`, privilegios cacheados.
- Cron: `vtiger_cron_task`, `vtiger_cron_log`.
- Webservices: `vtiger_ws_operation`, `vtiger_ws_operation_parameters`.
- Inventario: `vtiger_inventoryproductrel`, tablas bill/ship ads.

## Tablas personalizadas

- GeoCuentas: `vtiger_geocuentas`, `vtiger_geocuentascf`, `vtiger_geocuentas_config`.
- Logistica: `vtiger_logistica`, `vtiger_logisticacf`, `vtiger_logistica_places`, `vtiger_logistica_config`, `vtiger_logistica_ai_logs`.
- WSAPP: `vtiger_wsapp`, `vtiger_wsapp_recordmapping`, `vtiger_wsapp_handlerdetails`, `vtiger_wsapp_queuerecords`, `vtiger_wsapp_sync_state`.

## Riesgos

- Acoplamiento fuerte codigo-tablas.
- SQL concatenado con IDs en partes legacy; requiere revision antes de exponer nuevos parametros.
- Migraciones no centralizadas como framework moderno; schemas y vtlib handlers pueden crear/alterar tablas durante instalacion de modulo.
