Saltar al contenido principal

Tablas del CDP - Documentación Completa

📋 Resumen de Tablas

Total: 40+ tablas organizadas en 4 categorías

CategoríaTablasPropósito
Core10Gestión básica de tenants, usuarios y clientes
Analytics15Análisis RFM, CLV, churn y BI
Integrations8Sincronización con sistemas externos
Processing7Gestión de ETL y trabajos en background

🏗️ Core Tables (10)

1. tenants

Propósito: Gestión de organizaciones/marcas en el sistema multi-tenant.

CampoTipoDescripciónEjemplo
idSERIALPK, identificador único56
nameVARCHAR(255)Nombre comercial"Chelsea"
slugVARCHAR(100)URL-friendly identifier"chelsea"
typeVARCHAR(50)Tipo de tenant"enterprise"
statusVARCHAR(50)Estado actual"active"
settingsJSONBConfiguración específica{"currency": "ARS"}
created_atTIMESTAMPFecha de creación
updated_atTIMESTAMPÚltima modificación

Índices:

  • PRIMARY KEY (id)
  • UNIQUE INDEX (slug)

Constraints:

  • CHECK (type IN ('trial', 'business', 'enterprise'))
  • CHECK (status IN ('active', 'suspended', 'terminated'))

2. users

Propósito: Usuarios del sistema CDP (administradores, analistas, etc.).

CampoTipoDescripciónEjemplo
idSERIALPK, identificador único123
emailVARCHAR(255)Email de login"admin@nerdistan.com"
password_hashVARCHAR(255)Hash de contraseña
first_nameVARCHAR(255)Nombre"Miguel"
last_nameVARCHAR(255)Apellido"Hernandez"
roleVARCHAR(50)Rol del usuario"admin"
is_activeBOOLEANEstado del usuariotrue
last_loginTIMESTAMPÚltimo acceso
created_atTIMESTAMPFecha de creación

Roles disponibles: admin, analyst, marketing_manager, readonly


3. tenant_users

Propósito: Relación many-to-many entre usuarios y tenants.

CampoTipoDescripción
idSERIALPK
tenant_idINTEGERFK a tenants
user_idINTEGERFK a users
roleVARCHAR(50)Rol específico en el tenant
permissionsJSONBPermisos granulares
created_atTIMESTAMPFecha de asignación

4. customers

Propósito: Perfiles centralizados de clientes con deduplicación.

CampoTipoDescripciónEjemplo
idSERIALPK, identificador único12345
tenant_idINTEGERFK a tenants56
external_idVARCHAR(255)ID en sistema origen"vtex_user_123"
emailVARCHAR(255)Email principal"cliente@example.com"
phoneVARCHAR(50)Teléfono"+5491123456789"
first_nameVARCHAR(255)Nombre"Juan"
last_nameVARCHAR(255)Apellido"Pérez"
document_numberVARCHAR(50)DNI/CUIT"12345678"
document_typeVARCHAR(20)Tipo de documento"DNI"
birth_dateDATEFecha de nacimiento"1985-03-15"
genderVARCHAR(20)Género"M"
cityVARCHAR(255)Ciudad"Buenos Aires"
stateVARCHAR(255)Provincia/Estado"CABA"
countryVARCHAR(3)País (ISO)"ARG"
registration_dateTIMESTAMPPrimera registración
first_purchase_dateTIMESTAMPPrimera compra
last_purchase_dateTIMESTAMPÚltima compra
total_ordersINTEGERTotal de órdenes15
total_spentDECIMAL(15,2)Gasto total25000.50
avg_order_valueDECIMAL(15,2)AOV promedio1666.70

Índices principales:

  • idx_customers_tenant_email(tenant_id, email)
  • idx_customers_tenant_document(tenant_id, document_number)
  • idx_customers_last_purchase(tenant_id, last_purchase_date)

5. customer_orders

Propósito: Historial completo de órdenes/compras por cliente.

CampoTipoDescripciónEjemplo
idSERIALPK67890
tenant_idINTEGERFK a tenants56
customer_idINTEGERFK a customers12345
external_order_idVARCHAR(255)ID en sistema origen"ORD-VTEX-123456"
order_numberVARCHAR(255)Número de orden"CHE-2024-001234"
order_dateTIMESTAMPFecha de la orden"2024-09-15 14:30:00"
order_statusVARCHAR(100)Estado de la orden"completed"
payment_statusVARCHAR(100)Estado del pago"approved"
payment_methodVARCHAR(100)Método de pago"credit_card"
shipping_methodVARCHAR(100)Método de envío"express"
subtotalDECIMAL(15,2)Subtotal sin impuestos2000.00
tax_amountDECIMAL(15,2)Impuestos420.00
shipping_costDECIMAL(15,2)Costo de envío500.00
discount_amountDECIMAL(15,2)Descuentos aplicados200.00
total_amountDECIMAL(15,2)Total final2720.00
shipping_addressJSONBDirección de envío{"street": "Av. Corrientes 1234"}
source_systemVARCHAR(50)Sistema origen"vtex"
raw_dataJSONBDatos originales completos

Estados de orden: pending, processing, shipped, delivered, completed, cancelled, refunded


6. customer_order_items

Propósito: Detalle de productos por orden (line items).

CampoTipoDescripciónEjemplo
idSERIALPK456789
tenant_idINTEGERFK a tenants56
order_idINTEGERFK a customer_orders67890
product_idINTEGERFK a products98765
skuVARCHAR(255)SKU del producto"CHE-ZAPATO-001-39"
product_nameVARCHAR(500)Nombre del producto"Zapato Cuero Negro Talle 39"
categoryVARCHAR(255)Categoría principal"Calzado"
subcategoryVARCHAR(255)Subcategoría"Zapatos Hombre"
brandVARCHAR(255)Marca"Chelsea"
quantityINTEGERCantidad2
unit_priceDECIMAL(15,2)Precio unitario1000.00
discount_amountDECIMAL(15,2)Descuento por item100.00
total_amountDECIMAL(15,2)Total del line item1900.00

7. products

Propósito: Catálogo centralizado de productos multi-tenant.

CampoTipoDescripciónEjemplo
idSERIALPK98765
tenant_idINTEGERFK a tenants56
external_idVARCHAR(255)ID en sistema origen"vtex_product_123"
skuVARCHAR(255)SKU único"CHE-ZAPATO-001"
nameVARCHAR(500)Nombre del producto"Zapato Cuero Negro"
descriptionTEXTDescripción completa
categoryVARCHAR(255)Categoría principal"Calzado"
subcategoryVARCHAR(255)Subcategoría"Zapatos Hombre"
brandVARCHAR(255)Marca"Chelsea"
priceDECIMAL(15,2)Precio base1000.00
costDECIMAL(15,2)Costo del producto400.00
weightDECIMAL(10,3)Peso en kg0.8
dimensionsJSONBDimensiones del producto{"length": 30, "width": 12}
attributesJSONBAtributos específicos{"material": "cuero", "color": "negro"}
is_activeBOOLEANProducto activotrue

📊 Analytics Tables (15)

8. customer_rfm_analysis

Propósito: Análisis RFM (Recency, Frequency, Monetary) por cliente.

CampoTipoDescripciónEjemplo
idSERIALPK789012
tenant_idINTEGERFK a tenants56
customer_idINTEGERFK a customers12345
recency_daysINTEGERDías desde última compra30
frequencyINTEGERNúmero de órdenes8
monetaryDECIMAL(15,2)Valor monetario total12500.00
recency_scoreINTEGERScore 1-5 para recency5
frequency_scoreINTEGERScore 1-5 para frequency5
monetary_scoreINTEGERScore 1-5 para monetary5
rfm_scoreVARCHAR(3)Score combinado"555"
rfm_segmentVARCHAR(50)Segmento final"Champions"
calculation_dateTIMESTAMPFecha de cálculo
is_currentBOOLEANEs el análisis actualtrue

Segmentos RFM: Champions, Loyal Customers, Potential Loyalists, Recent Customers, Promising, Need Attention, About to Sleep, At Risk, Cannot Lose Them, Hibernating, Lost


9. customer_clv_analysis

Propósito: Análisis de Customer Lifetime Value predictivo.

CampoTipoDescripciónEjemplo
idSERIALPK345678
tenant_idINTEGERFK a tenants56
customer_idINTEGERFK a customers12345
historical_valueDECIMAL(15,2)Valor histórico real25000.00
predicted_valueDECIMAL(15,2)Valor futuro predicho35000.00
total_clvDECIMAL(15,2)CLV total (computed)60000.00
clv_tierVARCHAR(20)Tier de CLV"high"
percentile_rankINTEGERPercentil (1-100)85
rfm_multiplierDECIMAL(5,2)Factor RFM aplicado2.5
churn_probabilityDECIMAL(5,4)Probabilidad de churn0.05
confidence_scoreDECIMAL(5,4)Confianza del modelo0.85
model_versionVARCHAR(20)Versión del modelo"v2.1"

CLV Tiers: high (>$10K), medium ($2K-$10K), low (<$2K)


10. customer_churn_analysis

Propósito: Análisis predictivo de riesgo de churn/abandono.

CampoTipoDescripciónEjemplo
idSERIALPK234567
tenant_idINTEGERFK a tenants56
customer_idINTEGERFK a customers12345
churn_probabilityDECIMAL(5,4)Probabilidad de churn0.15
churn_riskVARCHAR(20)Nivel de riesgo"active"
days_since_last_orderINTEGERDías sin comprar45
predicted_churn_dateDATEFecha predicha de churn"2024-12-15"
recency_factorDECIMAL(5,4)Factor recency0.25
frequency_factorDECIMAL(5,4)Factor frequency0.15
engagement_factorDECIMAL(5,4)Factor engagement0.80
model_confidenceDECIMAL(5,4)Confianza del modelo0.82

Churn Risk Levels: active, at_risk, churning, churned


11. business_metrics

Propósito: KPIs y métricas agregadas por tenant y período.

CampoTipoDescripciónEjemplo
idSERIALPK123456
tenant_idINTEGERFK a tenants56
metric_dateDATEFecha de la métrica"2024-09-16"
period_typeVARCHAR(20)Tipo de período"daily"
total_customersINTEGERTotal de clientes65226
new_customersINTEGERNuevos clientes125
active_customersINTEGERClientes activos45820
total_ordersINTEGERTotal de órdenes1580
total_revenueDECIMAL(15,2)Revenue total3950000.00
avg_order_valueDECIMAL(15,2)AOV promedio2500.00
churn_rateDECIMAL(5,4)Tasa de churn0.15
ltv_avgDECIMAL(15,2)LTV promedio15000.00
cac_avgDECIMAL(15,2)CAC promedio850.00

Period Types: daily, weekly, monthly, quarterly, yearly


12. customer_segments

Propósito: Segmentación dinámica de clientes con criterios personalizables.

CampoTipoDescripciónEjemplo
idSERIALPK567890
tenant_idINTEGERFK a tenants56
segment_nameVARCHAR(255)Nombre del segmento"VIP High Spenders"
segment_typeVARCHAR(50)Tipo de segmento"dynamic"
criteriaJSONBCriterios de segmentación{"clv_tier": "high", "rfm_segment": ["Champions"]}
customer_countINTEGERNúmero de clientes5000
last_updatedTIMESTAMPÚltima actualización
is_activeBOOLEANSegmento activotrue

Segment Types: dynamic (auto-updating), static (fixed list)


🔌 Integration Tables (8)

13. tenant_integrations

Propósito: Configuración de integraciones con sistemas externos.

CampoTipoDescripciónEjemplo
idSERIALPK101
tenant_idINTEGERFK a tenants56
integration_typeVARCHAR(50)Tipo de integración"vtex"
account_nameVARCHAR(255)Nombre de cuenta"chelseaio"
environmentVARCHAR(100)Entorno"vtexcommercestable"
credentialsJSONBCredenciales encriptadas{"app_key": "encrypted_key"}
is_activeBOOLEANIntegración activatrue
last_syncTIMESTAMPÚltima sincronización
last_sync_statusVARCHAR(50)Estado última sync"success"
sync_frequencyVARCHAR(50)Frecuencia de sync"hourly"

Integration Types: vtex, mercadolibre, google_ads, facebook_ads, klaviyo, sendgrid


14. integration_sync_log

Propósito: Log detallado de todas las sincronizaciones.

CampoTipoDescripciónEjemplo
idSERIALPK789123
tenant_idINTEGERFK a tenants56
integration_idINTEGERFK a tenant_integrations101
sync_typeVARCHAR(50)Tipo de sincronización"incremental"
start_timeTIMESTAMPInicio del proceso
end_timeTIMESTAMPFin del proceso
statusVARCHAR(50)Estado final"success"
records_processedINTEGERRegistros procesados1250
records_createdINTEGERRegistros creados45
records_updatedINTEGERRegistros actualizados1200
records_failedINTEGERRegistros fallidos5
error_messageTEXTMensaje de error
sync_detailsJSONBDetalles del proceso

15. vtex_orders

Propósito: Raw data de órdenes desde VTEX (antes de procesamiento).

CampoTipoDescripción
idSERIALPK
tenant_idINTEGERFK a tenants
order_idVARCHAR(255)ID de orden VTEX
raw_order_dataJSONBJSON completo de VTEX
processedBOOLEANYa procesada
created_atTIMESTAMPFecha de importación

⚙️ Processing Tables (7)

16. processing_jobs

Propósito: Cola de trabajos de procesamiento y ETL.

CampoTipoDescripciónEjemplo
idSERIALPK456123
tenant_idINTEGERFK a tenants56
job_typeVARCHAR(100)Tipo de trabajo"rfm_analysis"
job_statusVARCHAR(50)Estado del trabajo"running"
priorityVARCHAR(20)Prioridad"high"
parametersJSONBParámetros del job{"force_recalc": true}
scheduled_atTIMESTAMPHora programada
started_atTIMESTAMPHora de inicio
completed_atTIMESTAMPHora de finalización
error_messageTEXTMensaje de error
result_dataJSONBResultado del proceso

Job Types: rfm_analysis, clv_calculation, churn_prediction, data_sync, report_generation

Job Status: pending, running, completed, failed, cancelled


17. processing_log

Propósito: Log detallado de todos los procesos ejecutados.

CampoTipoDescripción
idSERIALPK
tenant_idINTEGERFK a tenants
process_typeVARCHAR(100)Tipo de proceso
process_nameVARCHAR(255)Nombre específico
start_timeTIMESTAMPInicio
end_timeTIMESTAMPFin
statusVARCHAR(50)Estado final
records_affectedINTEGERRegistros afectados
execution_time_secondsINTEGERTiempo de ejecución
memory_used_mbINTEGERMemoria utilizada
log_detailsJSONBDetalles del log
created_atTIMESTAMPTimestamp del log

18. data_quality_checks

Propósito: Validaciones automáticas de calidad de datos.

CampoTipoDescripción
idSERIALPK
tenant_idINTEGERFK a tenants
check_typeVARCHAR(100)Tipo de validación
table_nameVARCHAR(100)Tabla validada
check_queryTEXTQuery de validación
expected_resultJSONBResultado esperado
actual_resultJSONBResultado real
statusVARCHAR(50)Estado de la validación
executed_atTIMESTAMPFecha de ejecución

Check Types: completeness, uniqueness, validity, consistency, accuracy


🔍 Índices y Constraints Principales

Performance Indexes

-- Multi-tenant queries optimization
CREATE INDEX idx_customers_tenant_analytics ON customers
(tenant_id, last_purchase_date, total_spent);

-- RFM analysis optimization
CREATE INDEX idx_rfm_segment_analysis ON customer_rfm_analysis
(tenant_id, rfm_segment, monetary DESC);

-- Churn risk monitoring
CREATE INDEX idx_churn_risk_monitoring ON customer_churn_analysis
(tenant_id, churn_risk, churn_probability DESC)
WHERE is_current = true;

-- Order analytics
CREATE INDEX idx_orders_analytics ON customer_orders
(tenant_id, order_date, total_amount)
WHERE order_status = 'completed';

Foreign Key Constraints

-- Todas las tablas principales
ALTER TABLE customers ADD CONSTRAINT fk_customers_tenant
FOREIGN KEY (tenant_id) REFERENCES tenants(id);

ALTER TABLE customer_orders ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id) REFERENCES customers(id);

ALTER TABLE customer_rfm_analysis ADD CONSTRAINT fk_rfm_customer
FOREIGN KEY (customer_id) REFERENCES customers(id);
-- ... etc para todas las FK

Check Constraints

-- Validaciones de datos
ALTER TABLE customer_rfm_analysis ADD CONSTRAINT chk_rfm_scores
CHECK (recency_score BETWEEN 1 AND 5 AND
frequency_score BETWEEN 1 AND 5 AND
monetary_score BETWEEN 1 AND 5);

ALTER TABLE customer_churn_analysis ADD CONSTRAINT chk_churn_probability
CHECK (churn_probability BETWEEN 0 AND 1);

💡 Tip: Esta estructura permite análisis complejos manteniendo performance óptima. Los índices están optimizados para las queries más comunes del CDP.