DEV Community

Oscar olg
Oscar olg

Posted on

Desplegando una Base de Datos de Fontanería con SQL Server: Tablas, Vistas y Lógica de Negocio

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 Fontaneria ya 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.

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:

  1. Tablas Base (Empleados, Clientes, Proveedores): Los actores principales del negocio.
  2. Almacén e Inventario (Articulos, Compras, DetallesCompra): Gestión de stock y seguimiento de las adquisiciones a proveedores.
    • Relación M:M: DetallesCompra actúa como la tabla de unión entre Compras y Articulos.
  3. Facturación (Facturas, LineasFactura): El motor económico.
    • Relación: Una Factura tiene múltiples LineasFactura.
  4. Agenda y Servicios (Servicios, Citas): Gestión de la operativa diaria.
    • Relación Uno a Uno Opcional: Una Cita puede estar ligada a una FacturaID (a través de un UNIQUE constraint).
  5. Horarios (HorariosLaborales, Ausencias): Gestión de la disponibilidad de los Empleados.
  6. Tablas Adicionales (ZonasOperacion, PartesDeTrabajo, MaterialParteTrabajo):
    • PartesDeTrabajo registra la ejecución real del servicio, enlazado a una Cita.
    • MaterialParteTrabajo registra qué Articulos se consumieron en un ParteDeTrabajo.

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 los Articulos donde StockActual <= StockMinimo.
    • VW_Partes_Trabajo_Auditoria: Agrega datos del ParteDeTrabajo, 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 tabla Citas con una validación simple de fechas.
  • SP_FinalizarServicioYGenerarParte: El SP más crítico del flujo de trabajo:
    1. Crea un nuevo ParteDeTrabajo.
    2. Registra el material consumido en MaterialParteTrabajo (usando una tabla de tipo definida por el usuario: TipoMaterialConsumido).
    3. Actualiza el *Stock* de la tabla Articulos (descuento).
    4. Cambia el EstadoCita a 'Completada'.
  • SP_ProcesarRecepcionCompra: Actualiza el inventario al recibir una compra:
    1. Inserta los detalles en DetallesCompra.
    2. Actualiza el *Stock* de la tabla Articulos (adición).
  • SP_GenerarFacturaDesdeCita: Automatiza la facturación:
    1. Valida que la Cita esté 'Completada' y no facturada.
    2. Calcula el Total Neto sumando: el precio base del Servicio, la Mano de Obra (horas trabajadas * costo/hora) y el costo del Material Consumido.
    3. Calcula el IVA y el Total Final.
    4. Inserta la Factura.
    5. Inserta todas las LineasFactura (Servicio Base, Mano de Obra y Materiales).
    6. Asocia la nueva FacturaID a la Cita original.

🧪 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:
    1. Si está de Ausencias.
    2. Si está dentro de su HorarioLaboral.
    3. Si tiene alguna Cita superpuesta.
  • 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)