Descripción del problema
E l drugstore San Silvestre 24 maneja grandes volúmenes de datos dispersos en más de 20 archivos de Excel y planillas escritas manualmente. Actualmente, la información es gestionada por seis administrativos en tres locales, y es consultada libremente por 16 empleados en turnos rotativos.
Sin un sistema de permisos adecuado, cualquier usuario con acceso puede modificar o eliminar registros importantes, lo que ha generado faltantes de stock y pérdidas económicas. Además, la falta de un control efectivo ha afectado especialmente a productos de alto valor, como las hojas de coca fraccionadas, impidiendo un seguimiento preciso de ingresos y egresos.
Otro problema crítico es la falta de copias de seguridad. En los últimos meses, varios datos se han perdido sin posibilidad de recuperación, ya que no existe un sistema estructurado de backups.
Solución propuesta
Para resolver estos inconvenientes, diseñé una base de datos relacional en MySQL Workbench 8.0, con el objetivo de centralizar, proteger y optimizar la gestión de datos del drugstore.
El sistema permite:
✅ Almacenar información estructurada sobre ventas, stock, clientes y proveedores.
✅ Definir permisos de acceso para evitar modificaciones no autorizadas.
✅ Automatizar el control de stock para reducir errores humanos.
✅ Facilitar el registro de ingresos y egresos de mercadería.
✅ Implementar copias de seguridad periódicas para evitar pérdida de datos.
Modelo de Negocio
San Silvestre 24 es un drugstore abierto las 24 horas, donde se venden productos como:
🛒 Comestibles, bebidas, golosinas, lácteos y fiambres.
🎲 Juguetes y artículos varios.
🌿 Hoja de coca fraccionada (producto de alto valor y alta demanda).
Las ventas son realizadas por empleados y los pagos pueden hacerse en:
💵 Efectivo | 💳 Tarjetas | 📲 Transferencias (MercadoPago, Ualá, Pago24).
El stock y los proveedores son gestionados por el área administrativa, que actualmente trabaja con registros manuales y planillas de Excel.
El sistema almacena información clave en las siguientes tablas:
- Clientes – Datos de los clientes frecuentes.
- Ventas – Registros de cada transacción.
- Detalle de ventas – Productos y cantidades vendidas en cada operación.
- Empleados – Información del personal del drugstore.
- Proveedores – Empresas que abastecen el negocio.
- Ingresos de mercadería – Control de nuevos productos en stock.
- Detalles de ingreso – Artículos específicos recibidos en cada compra.
- Artículos – Lista de productos en venta.
- Categorías – Clasificación de los artículos para una mejor organización.
Tablas de la base de datos
A continuación, se presentan las principales tablas y su función dentro del sistema:
Tabla | Descripción |
---|---|
clientes | Row 1 col 2 content |
ventas | Almacena las transacciones realizadas, asociadas a clientes y empleados. |
empleados | Guarda datos del personal, turnos y roles dentro del drugstore. |
detalle_ventas | Contiene los productos vendidos en cada transacción, permitiendo calcular totales. |
proveedores | Administra los proveedores de productos, con datos de contacto y condiciones comerciales. |
ingresos | Registra los productos comprados a proveedores y su incorporación al stock. |
detalle_ingresos | Detalla la cantidad y costo unitario de cada artículo ingresado en una compra. |
articulos | Lista todos los productos disponibles para la venta, con precios y categorías. |
categorias | Row 2 col 2 content |
contacto | Row 2 col 2 content |
Tabla "Clientes"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Cliente | INT |
Id_Contacto | INT |
Tabla "Ventas"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Ventas | INT |
(FK) | Id_Clientes | INT |
(FK) | Id_Empleados | INT |
Fecha_Venta | DATETIME | |
Tipo_Comprobante | VARCHAR (20) |
Tabla "Empleados"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Empleados | INT |
Id_Contacto | INT | |
Usuario | VARCHAR (25) | |
Contraseña | VARBINARY (255) |
Tabla "Detalle_Ventas"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | id_articulos | INT |
(PK) | Id_Ventas | INT |
Cantidad | INT | |
Precio_Ventas | DECIMAL (11,2) | |
Descuento | DECIMAL (11,2) |
Tabla "Ingresos"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Ingresos | INT |
(FK) | Id_Empleados | INT |
(FK) | Id_Proveedores | INT |
Fecha_Ingreso | DATETIME | |
Tipo_Comprobante | VARCHAR (20) |
Tabla "Detalle_Ingresos"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Ingresos | INT |
(PK) | Id_Articulos | INT |
Cantidad | INT | |
Precio_Compra | DECIMAL (11,2) | |
Precio_Venta | DECIMAL (11,2) |
Tabla "Artículos"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Articulos | INT |
(FK) | Id_Categorias | INT |
Codigo | INT | |
Nombre | VARCHAR (50) | |
Descripcion | VARCHAR (256) | |
Art_Precio | DECIMAL (11,2) |
Tabla "Categorías"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Categorias | INT |
Nombre | VARCHAR (50) | |
Descripcion | VARCHAR (256) |
Tabla "Proveedores"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Proveedores | INT |
Nombre | VARCHAR (25) | |
Razon_Social | VARCHAR (25) | |
Tipo_Documento | VARCHAR (20) | |
Numero_Documento | VARCHAR (20) | |
Direccion | VARCHAR (50) | |
Telefono | VARCHAR (25) | |
VARCHAR (50) | ||
Web | VARCHAR (30) |
Tabla "Contacto"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | Id_Contacto | INT |
Nombres | VARCHAR (50) | |
Apellidos | VARCHAR (50) | |
Sexo | VARCHAR (20) | |
Fecha_Nacimiento | DATE | |
Tipo_Documento | VARCHAR (20) | |
Numero_documento | VARCHAR (20) | |
Direccion | VARCHAR (50) | |
Telefono | VARCHAR (25) | |
VARCHAR (50) |
Casos de uso
🔹 Control de Stock en Tiempo Real
Antes, la falta de un sistema centralizado generaba desabastecimiento de productos clave. Con la base de datos, los administradores pueden consultar el stock actualizado y reponer mercadería a tiempo.
🔹 Identificación de Productos Más Vendidos
La vista mas_vendidos permite conocer qué artículos tienen mayor demanda, facilitando decisiones de compra y optimización del inventario.
🔹 Historial de Compras de Clientes
Gracias a la vista ultimas_ventas, es posible identificar a los clientes recientes y contactarlos en caso de promociones o fidelización.
🔹 Auditoría de Proveedores y Precios
Los triggers registran cada cambio en los proveedores y precios de los productos, asegurando transparencia en la administración.
🔹 Automatización del Registro de Ventas
Antes, cada venta se anotaba manualmente en planillas. Ahora, con la estructura relacional de la base de datos, los registros se generan automáticamente y pueden ser consultados con precisión.
Listado de Vistas (Views)
Se listan las vistas "Views" utilizadas en esta base de datos (articulos_precios_altos, margen_ganancias, empleado_supremo, mas_vendidos, clientes_premiados):
View | Descripción |
---|---|
articulos_precios_altos |
Muestra los nombres de las categorías y los precios superiores a $1000 (pesos mil). La composición está dada por las tablas categorías y artículos |
margen_ganancias | Muestra cuál es el proveedor que deja el mayor margen de ganancias, facilitando la elección de la mejor opción. La composición está dada por las tablas: proveedores, ingresos y detalle_ingresos |
empleado_supremo | Muestra el empleado que más ventas ha realizado hasta el día de la fecha. Puede usarse para dar premios de incentivo u otros beneficios. La composición está dada por las tablas: empleados, ventas y contacto |
mas_vendidos | Muestra el top 5 de los artículos más vendidos hasta la fecha. Puede utilizarse para analizar qué productos requieren un reabastecimiento más frecuente. Se compone de las tablas articulos y detalle_ventas |
clientes_premiados | Muestra las últimas dos ventas para identificar y premiar a los clientes correspondientes. Incluye su número de teléfono de contacto en caso de ser necesario. Se compone de las tablas cliente, contacto y ventas |
Listado de Funciones (Functions)
Se listan las funciones "Functions" utilizadas en esta base de datos (func_calcularGanancias, view_ganancias, func_cantvent):
Function | Descripción |
---|---|
func_calcularGanancias | Muestra automáticamente las ganancias que genera cada producto que está en el stock actual del drugstore. Para probar esta función se puso en práctica una vista adicional llamada view_ganancias la cual lleva integrada la función. |
view_ganancias | Esta vista nos deja ver las ganancias generadas por cada artículo del Drugstore utilizando la función almacenada func_calcularGanancias. Está compuesta por las tablas: Detalle_Ingresos y Articulos. |
func_cantvent | Muestra la cantidad total de ventas por categorías hasta el día de la fecha. Esta información se obtiene al ingresar el nombre de la categoría. Está compuesta por las tablas: Detalle_Ventas, Artículos y Categorias. |
Listado de Procedimientos Almacenados (Stored Procedures)
Se listan los procedimientos almacenados "Stored Procedures" utilizados en esta base de datos (pr_limite_stock, pr_insert_prov):
Stored Procedures | Descripción |
---|---|
pr_limite_stock | Permite tener un control sobre todos los productos que tengan menos de 10 unidades disponibles para así agilizar los procesos de restock. Se compone por las tablas: Detalle_Ingresos y Articulos |
pr_insert_prov | Permite insertar datos nuevos en la tabla proveedores, de esta manera se evita escribir a mano las sentencias necesarias para el ingreso de nuevos contratistas. Impacta únicamente sobre la tabla Proveedores. |
Listado de Disparadores Automáticos (Triggers)
Se listan los disparadores automáticos "Triggers" utilizados en esta base de datos (tr_log_proveedores, tr_log_articulos):
Triggers | Descripción |
---|---|
tr_log_proveedores | Este trigger permite auditar la tabla proveedores registrando cada nuevo ingreso. Su objetivo es mantener un registro de los proveedores recientemente agregados, junto con la fecha, la hora y el usuario que realizó la modificación mediante la función SESSION_USER(). Para ello, se creó la tabla log_proveedores. |
tr_log_articulos | Este trigger permite auditar la tabla artículos registrando cambios en los precios. Para ello, se creó la tabla log_proveedores, donde se almacenará, antes de cada actualización (UPDATE), el precio anterior, el nuevo precio, la fecha, la hora y el usuario que realizó la modificación mediante la función SESSION_USER(). |
Tabla "Log_Proveedores"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | log_id_proveedores | INT |
fecha | TIMESTAMP | |
usuario | VARCHAR (20) |
Tabla "Log_Articulos"
Tipo de clave | Campo | Tipo de campo |
---|---|---|
(PK) | log_id_articulos | INT |
art_precio | DECIMAL(11,2) | |
art_precio_nuevo | DECIMAL(11,2) | |
fecha | TIMESTAMP | |
usuario | VARCHAR (20) |
🎓 Sobre este proyecto
Este proyecto es el entregable final del Curso de Excel dictado por la plataforma Coderhouse.
¿Querés ver los detalles por tu cuenta?
Accedé al material relacionado con este proyecto en mi OneDrive. Hacé clic en el ícono de descarga para obtener los archivos.
📌 Créditos de imágenes: mcmurryjulie en Pixabay.