EJEMPLO INVENTARIO EN MYSQL
CREATE DATABASE INVENTARIO;
USE INVENTARIO;
--Tabla de Productos
CREATE TABLE PRODUCTOS(
PRO_CODIGO_K VARCHAR(20) NOT NULL,
PRO_DESCRIPCION VARCHAR(120) NOT NULL,
PRIMARY KEY ( PRO_CODIGO_K)
);
--Tabla para las existencias del producto
CREATE TABLE EXISTENCIAS(
PRO_CODIGO_K VARCHAR(20) NOT NULL,
EXI_LOTE VARCHAR(20) NOT NULL,
EXI_CANTIDAD DOUBLE NOT NULL,
PRIMARY KEY ( PRO_CODIGO_K,EXI_LOTE ),
FOREIGN KEY( PRO_CODIGO_K ) REFERENCES PRODUCTOS ( PRO_CODIGO_K )
);
--Tabla para los mivimientos: entrada o salida
CREATE TABLE MOVIMIENTOS(
MOV_CODIGO_K INTEGER NOT NULL,
MOV_MOVIMIENTO VARCHAR(3) DEFAULT 'ENT',
MOV_FECHA DATE,
PRO_CODIGO_K VARCHAR(20),
EXI_LOTE VARCHAR(20),
MOV_COSTO DOUBLE,
MOV_CANTIDAD DOUBLE,
MOV_TOTAL DOUBLE,
PRIMARY KEY (MOV_CODIGO_K,PRO_CODIGO_K,EXI_LOTE),
FOREIGN KEY( PRO_CODIGO_K ) REFERENCES PRODUCTOS ( PRO_CODIGO_K )
);
/* Crea trigger con nombre MOVIMIENTO_TRIGGER
se ejecuta antes de insertar que calcula el total y actualiza existencia
*/
/*CAMBIO EL dELIMITADOR PARA PODER EJECUTAR EL TRIGGER*/
DELIMITER $$
CREATE OR REPLACE TRIGGER MOVIMIENTO_TRIGGER
BEFORE INSERT ON MOVIMIENTOS
FOR EACH ROW
BEGIN
IF NEW.MOV_MOVIMIENTO = 'ENT' THEN
UPDATE EXISTENCIAS
SET EXI_CANTIDAD = EXI_CANTIDAD + NEW.MOV_CANTIDAD
WHERE PRO_CODIGO_K = NEW.PRO_CODIGO_K AND EXI_LOTE=NEW.EXI_LOTE;
EJEMPLO INVENTARIO EN MYSQL
END IF;
IF NEW.MOV_MOVIMIENTO = 'SAL' THEN
UPDATE EXISTENCIAS
SET EXI_CANTIDAD = EXI_CANTIDAD - NEW.MOV_CANTIDAD
WHERE PRO_CODIGO_K = NEW.PRO_CODIGO_K AND EXI_LOTE=NEW.EXI_LOTE;
END IF;
SET NEW.MOV_TOTAL=NEW.MOV_COSTO*NEW.MOV_CANTIDAD;
END
$$
DELIMITER ;
--Trigger para calcular el total de cada movimiento
DELIMITER $$
CREATE OR REPLACE TRIGGER MOVTOTAL_TRIGGER
BEFORE INSERT ON MOVIMIENTOS
FOR EACH ROW
BEGIN
SET NEW.MOV_TOTAL=NEW.MOV_COSTO*NEW.MOV_CANTIDAD;
END
$$
DELIMITER ;
--Insertar producto
INSERT INTO PRODUCTOS(PRO_CODIGO_K,PRO_DESCRIPCION) VALUES("1","PASTEL 2Kg");
--Insertar existencia
INSERT INTO EXISTENCIAS VALUES("1","1",30);
--Insertar movimientos
INSERT INTO
MOVIMIENTOS(MOV_CODIGO_K,MOV_MOVIMIENTO,MOV_FECHA,PRO_CODIGO_K,EXI_LOTE,MOV_COSTO,M
OV_CANTIDAD) VALUES(1,"ENT","2024/10/30","1","1",35,10);
INSERT INTO
MOVIMIENTOS(MOV_CODIGO_K,MOV_MOVIMIENTO,MOV_FECHA,PRO_CODIGO_K,EXI_LOTE,MOV_COSTO,M
OV_CANTIDAD) VALUES(2,"SAL","2024/10/30","1","1",35,15);