Conoce el modelo de base de datos del sistema de inventario Inventio Lite en PHP y MySQL. Explicación detallada de cada tabla, campos y consultas SQL útiles. ¡Descárgalo gratis!
¿Estás desarrollando un sistema de inventario en PHP y MySQL y no sabes cómo estructurar tu base de datos?
Este artículo es parte de la Guía de Desarrollo de Sistemas con PHP y MySQL Aprende a construir software profesional desde cero, con estándares de seguridad y arquitectura comercial. Ver la Guía Completa →
En este artículo te explico el modelo de base de datos de Inventio Lite, un sistema de inventario y ventas desarrollado en PHP y MySQL, para que puedas entenderlo, adaptarlo y usarlo como base en tus propios proyectos.
Te invito a ver mi Directorio Maestro de Modelos de Bases de Datos. Y podras encontras mas modelos para analizar y experimentar.
¿Qué es Inventio Lite?
Inventio Lite es un sistema de inventario y punto de venta desarrollado en PHP y MySQL con arquitectura MVC. Permite gestionar productos, categorías, clientes, proveedores, ventas y abastecimientos desde un panel de administración web sencillo e intuitivo.
Inventio Lite nació hace varios años como un proyecto open source y desde entonces ha sido descargado y usado por cientos de desarrolladores y negocios en Latinoamérica como base para sus propios sistemas de inventario.
Si buscas una versión más completa con más funcionalidades y soporte incluido, más adelante en este artículo te presento Inventio Max.
A continuación les dejo una imagen del modelo de la base de datos generada por el programa MySql Workbench.

La base de datos del sistema Inventio Lite esta conformada por 9 tablas las cuales son:
categoryproductpersonboxoperation_typeselloperationuserconfiguration
Link a la base de datos: https://github.com/evilnapsis/inventio-lite/blob/master/schema.sql ( Sigueme en github 😉 )
Ahora explicare para que sirve cada tabla.
Category
La tabla category almacena las categorías a las que pertenecen los productos del sistema.
Campos:
id— Llave primaria autoincrementalname— Nombre de la categoría que se muestra en el sistemadescription— Descripción de la categoríaimage— Imagen representativa de la categoríacreated_at— Fecha de creación
La tabla product tiene un campo category_id que se relaciona con el id de esta tabla, formando una relación uno a muchos — una categoría puede tener muchos productos.
Consultas útiles:
-- Mostrar todas las categorías SELECT * FROM category; -- Mostrar productos de una categoría específica SELECT * FROM product WHERE category_id = 1;
Product
La tabla product es el corazón del sistema. Aquí se almacena toda la información de los productos del inventario.
Campos:
id— Llave primaria del productoname— Nombre del productodescription— Descripción brevebarcode— Código de barrasimage— Nombre del archivo de imagenprice_in— Precio de compra o abastecimientoprice_out— Precio de ventainventary_min— Cantidad mínima en inventario (para alertas de stock bajo)presentation— Presentación del producto (bolsa, botella, caja, etc.)unit— Unidad de medida (metros, kilos, litros, etc.)category_id— Categoría a la que perteneceuser_id— Usuario que dio de alta el productois_active— Indica si el producto está activo o inactivocreated_at— Fecha de creación
Consultas útiles:
-- Mostrar todos los productos SELECT * FROM product; -- Mostrar solo productos activos SELECT * FROM product WHERE is_active = 1; -- Mostrar productos por categoría SELECT * FROM product WHERE category_id = 1; -- Mostrar productos dados de alta por un usuario SELECT * FROM product WHERE user_id = 1;
Person
La tabla person maneja tanto clientes como proveedores dentro del mismo modelo, diferenciados por el campo kind.
Campos:
id— Llave primarianame— Nombrelastname— Apellidoscompany— Nombre de la empresaaddress1,address2— Direccionesphone1,phone2— Teléfonosemail1,email2— Correos electrónicosimage— Foto o imagenkind— Tipo:1 = cliente,2 = proveedorcreated_at— Fecha de creación
Consultas útiles
-- Mostrar solo clientes SELECT * FROM person WHERE kind = 1; -- Mostrar solo proveedores SELECT * FROM person WHERE kind = 2;
Box
La tabla box gestiona los cortes de caja del sistema. Cuando se realiza un corte, se crea un registro en esta tabla y todas las ventas pendientes se asocian a ese corte mediante el campo box_id en la tabla sell.
Campos:
id— Llave primaria autoincrementalcreated_at— Fecha del corte de caja
Operation Type
Esta tabla es una biblioteca que define los tipos de movimiento en el inventario. Sus valores son fijos y no deben modificarse porque afectan el funcionamiento del sistema:
1 = Entrada(abastecimiento, compra)2 = Salida(venta)
Sell
La tabla sell agrupa las operaciones de venta o abastecimiento. Cada registro representa una transacción completa.
Campos:
id— Llave primariaperson_id— Cliente (ventas) o proveedor (abastecimientos)user_id— Usuario que realizó la operaciónoperation_type_id— Tipo: entrada o salidabox_id— Corte de caja al que pertenece (NULL hasta el corte)total— Total de la transaccióncash— Monto pagado por el clientediscount— Descuento aplicadocreated_at— Fecha de creación
Consultas útiles
-- Mostrar todas las ventas SELECT * FROM sell WHERE operation_type_id = 2; -- Mostrar todos los abastecimientos SELECT * FROM sell WHERE operation_type_id = 1; -- Ventas de un corte de caja específico SELECT * FROM sell WHERE operation_type_id = 2 AND box_id = 1; -- Ventas por rango de fechas SELECT * FROM sell WHERE operation_type_id = 2 AND (DATE(created_at) > 'YYYY-MM-DD' AND DATE(created_at) <= 'YYYY-MM-DD');
Operation
La tabla operation guarda el detalle de cada producto dentro de una venta o abastecimiento. Es la tabla que realmente mueve el inventario.
Campos:
id— Llave primariaproduct_id— Producto involucradoq— Cantidadoperation_type_id— Entrada o salidasell_id— Venta o abastecimiento al que pertenececreated_at— Fecha
Consultas SQL
-- Total de entradas de un producto SELECT SUM(q) FROM operation WHERE operation_type_id = 1 AND product_id = 1; -- Total de salidas de un producto SELECT SUM(q) FROM operation WHERE operation_type_id = 2 AND product_id = 1;
User
La tabla user almacena los usuarios con acceso al panel de administración.
Campos:
id— Llave primarianame,lastname— Nombre completousername— Nombre de usuarioemail— Correo electrónicopassword— Contraseña de accesoimage— Foto de perfilis_active— Usuario activo o inactivois_admin— Indica si es administradorcreated_at— Fecha de creación
Consultas útiles
- Login valido del usuario: select * from user where (email=”EMAIL” and password=”PASSWORD”) and is_active=1
Configuration
La tabla configuration es una tabla experimental que sirve para usar configuraciones o ajustes generales que afectan al funcionamiento del sistema.
Campos
- id: Id autoincremental
- short: Nombre corto, normalmente se utiliza como una llave para acceder a los valores de las configuraciones en lugar de usar el id
- name: Es el nombre de la configuración, este se muestra en el sistema.
- kind: Tipo de valor puede ser textual, numérico, si/no, imagen. se usa un valor numérico, por ejemplo, tipo textual=1, numérico=2…
- val: Valor almacenado, es el valor referente a la configuración
Las entradas en la tabla de configuración se acceden en el sistema para alterar ciertos funcionamientos.
Descarga el código fuente
Puedes descargar el esquema SQL completo de Inventio Lite directamente desde GitHub:
Esquema SQL: github.com/evilnapsis/inventio-lite/blob/master/schema.sql
¿Quieres el sistema completo y listo para usar?
Si no quieres construir el sistema desde cero y prefieres un sistema de inventario profesional, completamente funcional y con soporte incluido, te presentamos Inventio Max — la versión premium de Inventio con más módulos, mejor diseño y actualizaciones constantes.
Conclusión
El modelo de base de datos de Inventio Lite es sencillo pero completo. Con solo 9 tablas cubre todo el flujo de un sistema de inventario y ventas: productos, categorías, clientes, proveedores, ventas, abastecimientos, cortes de caja y usuarios.
Puedes usarlo como base para tu propio sistema o descargarlo directamente y adaptarlo a tus necesidades. Si tienes dudas sobre alguna tabla o quieres saber cómo extender el modelo, déjanos un comentario.
fue de mucha ayuda el diagrama