Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/12/2011, 09:39
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Clave foranea puede ser primaria a la vez?

Cita:
pero que opinas de las tabla facturaventa y detalle de venta....ahy se aprecia ke en detalle de venta esta la clave primaria de factura de venta como primaria y foranea a la vez.
Mirando con detalle, la PK no debe ser (id_venta, id_prod), sino (id_venta, id_detalle), donde id_detalle es un incremental parcial que se reinicia con cada id_venta distinto. Yo normalmente uso un TRIGGER para controlar la numeración de los subitems, pero bien puedes hacerlo programáticamente, enviando el subídice del item generado en el formulario en pantalla.
Lo importante es que el par (id_venta, id_detalle) no se repita. El como lo logras es tema a resolver.
El problema de usar id_producto, es que el mismo producto puede estar usándose en más de un ítem de la misma venta, simplemente porque se seleccionaron separadamente. Por eso no sirve como parte de la PK, aún cuando se requiera como FK para la consistencia de datos del producto.
Cita:
lo que pasa ...es lo siguiente....antes la tabla de venta tenia una clave primaria...esta era item...
pero al ingresar los datos mediante un formulario dinamico php mysql....el primer registro lo ingresaba de forma correcta.....tanto los datos de venta como los de detalle de venta....pero la segunda vez...me dice ke se duplica la clave primaria de detalle de venta....osea el item....por eso decidí volver a hacer el modelo de datos...y es así como me quedo.
Eso significaría que hay un error de programación que hace que el numero de item no se vaya incrementando cuando énvías los sucesivos.
Mi sugerencia es que revises correctamente la programación y antes de enviar los datos a la base, haz una pantalla que te muestre la tabla de factura completa para confirmar los datos. En esa pantalla arma la tabla de detalle con los datos que efectivamente enviarás a la base, incluyendo el numero de subitem generado en la carga de items, de ese modo estarás seguro de lo que estás por enviar.
SI el numero de factura no se repite, y los items están correctamente numerados, no hay razones para que esa inserción falle.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)