Arquitectura de bases de datos para catálogo de productos con variantes, atributos y gestión de imágenes
Este documento describe la arquitectura completa del sistema de gestión de productos, diseñado para soportar desde productos simples hasta aquellos con múltiples variantes (talla, color, sabor, etc.).
Servicios, productos sin variantes, artículos únicos.
1 tabla FácilRopa (talla/color), alimentos (sabor), electrónica (modelo).
5+ tablas ComplejoImágenes generales y específicas por variante.
2 tablas Dual| Tabla | Tipo | Depende de | Descripción |
|---|---|---|---|
| business_entities | Base | - | Tenants / Negocios (asumida existente) |
| product_categories | Base | business_entities | Categorías de productos |
| prdcts_cat_attributes | Base | - | Catálogo global de atributos (Color, Talla, etc.) |
| prdcts_cat_attribute_values | Base | prdcts_cat_attributes | Valores posibles de atributos (Rojo, S, Fresa) |
| products | Maestro | business_entities, product_categories | Productos maestros (plantilla) |
| product_images | Imagen | products | Imágenes generales del producto |
| product_attributes | Config | products, prdcts_cat_attributes | Atributos asignados a un producto |
| product_variants | Variante | products, chzr_measure_units | SKUs específicos con precio/stock propio |
| product_variant_images | Imagen | product_variants | Imágenes específicas por variante |
| service_products | Paralelo | - | Catálogo simple de servicios |
┌─────────────────┐
│ business_entities│
│ (Tenant) │
└────────┬────────┘
│
▼
┌─────────────────┐ ┌─────────────────────────┐
│product_categories│ │prdcts_cat_attributes │
│ │ │(Catálogo de Atributos) │
└────────┬────────┘ └───────────┬─────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────────────┐
│ products │◄───┤prdcts_cat_attribute_ │
│ (Producto Maestro) │values (Valores de Atrib.)│
└────────┬────────┘ └─────────────────────────┘
│ ▲
│ │
▼ ┌───────────┴─────────────┐
┌─────────────────┐ │product_attributes │
│ product_images │ │(Asignación Prod-Atrib) │
│ (Img Generales) │ └─────────────────────────┘
└────────┬────────┘
│
▼
┌─────────────────┐ ┌─────────────────────────┐
│product_variants │◄───┤ (Combinaciones de │
│ (SKUs) │ │ valores de atributos) │
└────────┬────────┘ └─────────────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────────────┐
│product_variant_ │ │ service_products │
│images (Img Esp.)│ │ (Catálogo de Servicios) │
└─────────────────┘ └─────────────────────────┘
➜ FLUJO PRINCIPAL (productos físicos/variantes)
➜ FLUJO ALTERNO (servicios, simplificado)
Diagrama de dependencias entre tablas. Las flechas indican "depende de".
Para mantener la integridad referencial, sigue este orden estricto:
prdcts_cat_attributes - Crear atributos globales (Color, Talla, Sabor)
prdcts_cat_attribute_values - Crear valores (Rojo, S, Fresa)
✓ No dependen de otras tablas
products - Insertar el producto plantilla
ⓘ Depende de: business_entities, product_categories (asumidas existentes)
product_images - Insertar imágenes del producto maestro
ⓘ Depende de: products
product_attributes - Vincular atributos al producto
ⓘ Depende de: products, prdcts_cat_attributes
product_variants - Crear SKUs específicos (combinaciones)
ⓘ Depende de: products, chzr_measure_units
product_variant_images - Insertar imágenes por variante
ⓘ Depende de: product_variants
service_products - En cualquier momento
✓ Totalmente independiente
Ejemplo: Servicio de consultoría, libro, curso online
productsproduct_imagesEjemplo: Playera (Color + Talla)
Ejemplo: Gomitas (Sabor)
Ejemplo: Catálogo de ropa
product_images: Modelo, empaque, tallasproduct_variant_images: Color específico1. DELETE FROM product_variant_images WHERE variant_id IN (SELECT id FROM product_variants WHERE product_id = X); 2. DELETE FROM product_variants WHERE product_id = X; 3. DELETE FROM product_attributes WHERE product_id = X; 4. DELETE FROM product_images WHERE product_id = X; 5. DELETE FROM products WHERE id = X; 6. (Opcional) Limpiar atributos no usados
¿Puedo tener imágenes en product_images y product_variant_images para el mismo producto?
Sí, es totalmente válido y recomendado. Las generales muestran el producto en contexto, las específicas muestran la variante exacta.
¿Qué pasa si un producto no tiene variantes?
Simplemente no uses las tablas de atributos ni variantes. El producto vive en products y sus imágenes en product_images.
¿Cómo sé qué atributos son variantes?
El campo is_variant en prdcts_cat_attributes indica si el atributo genera variantes (1) o es solo descriptivo (0).
¿Puedo cambiar un producto simple a variantes después?
Sí, pero requerirá migración de datos. Es más fácil diseñarlo desde el inicio con la estructura completa.