Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/08/2015, 03:10
Kritik
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 7 meses
Puntos: 31
Tablas cruzadas

Estoy diseñando una base de datos, que me cubra unas necesidades un tanto especiales. Así pues, pongo las 2 tablas que me crean la duda que tengo.

Tengo la tabla compras:

Código SQL:
Ver original
  1. CREATE TABLE MAYOR_COMPRAS(
  2. PARTIDA_COMPRA NUMBER(10) NOT NULL,
  3. FECHA_COMPRA DATE DEFAULT SYSDATE NOT NULL,
  4. COD_PROD01 NUMBER(5),CANT_PROD01 NUMBER(4),PRECIO_UD_02 NUMBER(6,2),
  5. COD_PROD02 NUMBER(5),CANT_PROD02 NUMBER(4),PRECIO_UD_02 NUMBER(6,2),
  6. COD_PROD03 NUMBER(5),CANT_PROD03 NUMBER(4),PRECIO_UD_03 NUMBER(6,2),
  7. ...
  8. ...
  9. COD_PROD50 NUMBER(5),CANT_PROD50 NUMBER(4),PRECIO_UD_50 NUMBER(6,2),
  10. COD_EMPLEADO VARCHAR2(15) NOT NULL,
  11. CONSTRAINT FK_COMPRAS FOREIGN KEY (COD_EMPLEADO) REFERENCES EMPLEADOS,
  12. CONSTRAINT PK_COMPRAS PRIMARY KEY (PARTIDA_COMPRA)
  13. );

Y tengo la tabla Productos.
Lo que complica la historia es que tengo que distinguir el producto del mismo producto según el momento de comprarlo, Pero no solo del día (porque en el mismo día varios comerciales de compras pueden comprarme el mismo producto) así pues, lo hago por medio de la partida de compra:
Código SQL:
Ver original
  1. CREATE TABLE MAYOR_PRODUCTOS(
  2. PARTIDA_COMPRA NUMBER(10),
  3. COD_PROD NUMBER(5),
  4. MARCA VARCHAR2(15) NOT NULL,
  5. MODELO VARCHAR2(30) NOT NULL,
  6. PRECIO_COMPRA NUMBER(6,2),
  7. STOCK NUMBER(5),
  8. STOCK_RESERVADO NUMBER(5),
  9. STOCK_TOTAL NUMBER(5) AS (STOCK+STOCK_RESERVADO),
  10. CONSTRAINT FK_PRODUCTOS FOREIGN KEY (PARTIDA_COMPRA) REFERENCES COMPRAS,
  11. CONSTRAINT PK_PRODUCTOS PRIMARY KEY (PARTIDA_COMPRA,COD_PROD)
  12. );
Sin embargo, esto hace que las partidas de compras hacen que se me crucen las tablas, por lo tanto... al estar cerradas no me dejan introducir más registro desde el momento en el que quedan cruzadas bidireccionalmente.

A ver qué se os ocurre para solucionar el problema. ¿Quizá hacer un ID_COMPRA en la tabla compras y hacer que sea ese el PK de compras? Pero entonces es como si tuviese 2 campos únicos e identificativos que sirven para identificar de manera inequívoca una compra de otra (No es esa la función del PK? No sería como tener información repetida?)

Última edición por gnzsoloyo; 31/08/2015 a las 10:40 Razón: Pesimamente etiquetado. Usar Highlight "SQL" por favor.