Aquí podéis encontrar los SQL de la base de datos
https://github.com/webmastervetea/SQLServer2022
¡Hola, dev-comunidad! Hoy vamos a sumergirnos en la anatomía de una base de datos diseñada para gestionar una empresa de fontanería. Hemos recibido una serie de archivos SQL Server (.sql) que, en conjunto, crean la estructura, las vistas de reporting y la lógica de negocio central (Procesos Almacenados y Funciones) de nuestro sistema.
Analicemos qué hace cada archivo y cómo se construye este esquema de principio a fin.
1. ⚙️ 0 Base de datos.sql: El cimiento del proyecto
Este es el punto de partida. Un archivo simple pero esencial:
- Propósito: Crear la base de datos principal que alojará todo el esquema.
-
Acciones Clave:
- Verifica si la base de datos llamada
Fontaneriaya existe. - Si existe, la elimina (ideal para un entorno de desarrollo o clean up).
- Ejecuta
CREATE DATABASE Fontaneria;para crear el contenedor final de datos.
- Verifica si la base de datos llamada
Este archivo garantiza que estamos trabajando sobre una pizarra limpia y con el nombre correcto (Fontaneria).
2. 📝 1 Creacion de Tablas y relaciones.sql: El Esquema Estructural
Este es el archivo más extenso y detalla el Modelo de Entidad-Relación (E-R). Aquí se definen todas las tablas y cómo se relacionan entre sí a través de claves primarias (PK) y foráneas (FK).
🏛️ Tablas Principales Creadas
El archivo organiza el esquema en bloques lógicos:
- Tablas Base (
Empleados,Clientes,Proveedores): Los actores principales del negocio. - Almacén e Inventario (
Articulos,Compras,DetallesCompra): Gestión de stock y seguimiento de las adquisiciones a proveedores.-
Relación M:M:
DetallesCompraactúa como la tabla de unión entreComprasyArticulos.
-
Relación M:M:
- Facturación (
Facturas,LineasFactura): El motor económico.-
Relación: Una
Facturatiene múltiplesLineasFactura.
-
Relación: Una
- Agenda y Servicios (
Servicios,Citas): Gestión de la operativa diaria.-
Relación Uno a Uno Opcional: Una
Citapuede estar ligada a unaFacturaID(a través de unUNIQUEconstraint).
-
Relación Uno a Uno Opcional: Una
- Horarios (
HorariosLaborales,Ausencias): Gestión de la disponibilidad de losEmpleados. - Tablas Adicionales (
ZonasOperacion,PartesDeTrabajo,MaterialParteTrabajo):-
PartesDeTrabajoregistra la ejecución real del servicio, enlazado a unaCita. -
MaterialParteTrabajoregistra quéArticulosse consumieron en unParteDeTrabajo.
-
Enfoque de Desarrollo: El script utiliza IF OBJECT_ID... DROP TABLE para garantizar la limpieza previa y IF OBJECT_ID... CREATE TABLE para hacer que el script sea idempotente (ejecutable varias veces sin error, aunque SQL Server ya tiene CREATE IF NOT EXISTS para tablas).
3. 📊 2 Creacion de Vistas.sql: Reporting y Abstracción de Datos
Las Vistas son consultas predefinidas que actúan como "tablas virtuales". Simplifican el acceso a datos complejos, combinando información de múltiples tablas con JOINs.
- Propósito: Crear capas de datos optimizadas para reporting e interfaces de usuario.
-
Vistas Destacadas:
-
VW_Agenda_Detallada: Muestra todas las citas con los nombres del Cliente, el Servicio y el Fontanero asignado. -
VW_Inventario_Bajo_Minimo: Una alerta crucial que lista losArticulosdondeStockActual <= StockMinimo. -
VW_Partes_Trabajo_Auditoria: Agrega datos delParteDeTrabajo, incluyendo las horas trabajadas y el total de materiales consumidos. -
VW_Valoracion_Inventario: Calcula el valor del stock actual, incluyendo el Coste Medio de Adquisición (CMA) a través de una subconsulta, fundamental para la contabilidad.
-
4. 🧠 3 Procedimientos y Funciones Almacenados.sql: La Lógica del Negocio
Aquí reside la inteligencia del sistema. Los Stored Procedures (SP) y Functions (FN) encapsulan transacciones complejas y reglas de negocio.
💾 Procedimientos Almacenados (SP)
Los SP aseguran que las operaciones críticas se ejecuten de manera atómica (o todo, o nada) utilizando Transacciones (BEGIN/COMMIT/ROLLBACK TRANSACTION).
-
SP_AgendarNuevaCita: Inserta una nueva fila en la tablaCitascon una validación simple de fechas. -
SP_FinalizarServicioYGenerarParte: El SP más crítico del flujo de trabajo:- Crea un nuevo
ParteDeTrabajo. - Registra el material consumido en
MaterialParteTrabajo(usando una tabla de tipo definida por el usuario:TipoMaterialConsumido). - Actualiza el *Stock* de la tabla
Articulos(descuento). - Cambia el
EstadoCitaa 'Completada'.
- Crea un nuevo
-
SP_ProcesarRecepcionCompra: Actualiza el inventario al recibir una compra:- Inserta los detalles en
DetallesCompra. - Actualiza el *Stock* de la tabla
Articulos(adición).
- Inserta los detalles en
-
SP_GenerarFacturaDesdeCita: Automatiza la facturación:- Valida que la Cita esté 'Completada' y no facturada.
- Calcula el Total Neto sumando: el precio base del
Servicio, la Mano de Obra (horas trabajadas * costo/hora) y el costo del Material Consumido. - Calcula el IVA y el Total Final.
- Inserta la
Factura. - Inserta todas las
LineasFactura(Servicio Base, Mano de Obra y Materiales). - Asocia la nueva
FacturaIDa laCitaoriginal.
🧪 Funciones (FN)
Las funciones retornan un valor o una tabla, ideales para cálculos o verificaciones:
-
FN_CalcularDisponibilidadDiaria: Una función escalar (RETURNS BIT) que verifica la disponibilidad de un empleado en un momento dado (DATETIME), comprobando:- Si está de
Ausencias. - Si está dentro de su
HorarioLaboral. - Si tiene alguna
Citasuperpuesta.
- Si está de
-
FN_ObtenerTotalArticulosFactura: Una función de tabla (RETURNS @TABLE) que resume todos los artículos facturados en una factura específica.
Este conjunto de archivos proporciona un sistema de gestión robusto para la empresa de fontanería, abarcando desde el control de inventario y la agenda, hasta la facturación y la auditoría. ¡Un excelente boilerplate para proyectos de gestión de servicios!
Top comments (0)