Acabo de cambiar de opinión, no quiero juntar los productos en el almacén, porque si lo hago puedo vender primero lo último en llegar. Como quiero usar FIFO con los productos, tengo que tenerlos en el almacén separados.
Sin embargo, en la tabla almacén tendré como PK únicamente el producto.
Estas son mis tablas:
Código SQL:
Ver originalCREATE TABLE MAYOR_PRODUCTOS(
PARTIDA_COMPRA NUMBER(10) NOT NULL,
FECHA_COMPRA DATE DEFAULT SYSDATE NOT NULL,
COD_EMPLEADO VARCHAR2(15) NOT NULL
COD_PROD NUMBER(5) NOT NULL,
MARCA VARCHAR2(15) NOT NULL,
MODELO VARCHAR2(30) NOT NULL,
CANTIDAD NUMBER(4) NOT NULL,
PRECIO_COMPRA_UD NUMBER(6,2)NOT NULL,
CONSTRAINT FK_PRODUCTOS FOREIGN KEY (COD_EMPLEADO) REFERENCES MAYOR_EMPLEADOS,
CONSTRAINT PK_PRODUCTOS PRIMARY KEY (PARTIDA_COMPRA,COD_PROD)
);
CREATE TABLE MAYOR_ALMACEN(
COD_PROD NUMBER(5) NOT NULL,
PARTIDA_COMPRA NUMBER(10) NOT NULL,
STOCK_TOTAL NUMBER(5) NOT NULL,
STOCK_RESERVADO NUMBER(5) NOT NULL,
STOCK_LIBRE NUMBER(5) AS (STOCK_TOTAL-STOCK_RESERVADO),
CONSTRAINT FK_ALMACEN FOREIGN KEY (PARTIDA_COMPRA,COD_PROD) REFERENCES MAYOR_PRODUCTOS,
CONSTRAINT PK_ALMACEN PRIMARY KEY (COD_PROD)
);
[/CODE]
Sin embargo, donde si voy a querer juntarlos es en la tabla pedidos. Cuando realice un pedido... voy a coger primero de las existencias de un producto según la partida de compra con código menor. Pero si con el producto de esa partida no lleno mi pedido cogeré ese mismo producto de la siguiente partida recibida.
Eso lo tengo que hacer a al fuerza con el código de mi programa o se puede hacer con el diseño de la tabla? Seguramente con PL/SQL se pueda, pero para hacerlo con PL lo hago con el código de mi programa. Pero si se puede hacer con el diseño de la tabla... prefiero hacerlo así.