Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Clave foranea puede ser primaria a la vez?

Estas en el tema de Clave foranea puede ser primaria a la vez? en el foro de Mysql en Foros del Web. Que tal amigos. tengo 2 tablas.... una venta y otra detalle de venta venta puede tener muchos uno o muchos detalles de venta al asociar ...
  #1 (permalink)  
Antiguo 25/12/2011, 08:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 208
Antigüedad: 13 años, 4 meses
Puntos: 3
Clave foranea puede ser primaria a la vez?

Que tal amigos.

tengo 2 tablas.... una venta y otra detalle de venta

venta puede tener muchos uno o muchos detalles de venta

al asociar estas tablas...


la clavee primaria de venta ...pasa a ser clave foranea y primaria en detalle de venta...

es esto posible?

en caso positivo....la clave foranea/primaria...se puede repetir en detalle de venta?

osea si una clave es forane y primaria a la vez...esta se puede repetir en dicha tabla?
  #2 (permalink)  
Antiguo 25/12/2011, 08:40
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Clave foranea puede ser primaria a la vez?

Cita:
en caso positivo....la clave foranea/primaria...se puede repetir en detalle de venta?
En ese caso (maestro/detalle), la FK heredada de la tabla maestra debe ser obligatoriamente parte de la PK de la tabla detalle.
No es opcional.
Si no lo planteas así no puedes garantizar la dependencia de la relación.
Lo que se hace es en la tabla detalle poner como PK la FK heredada más un discriminante, es decir que en una tabla detalle, la PK es siempre una clave compuesta de más de una columna. Normalmente ese discriminante es un subindice numerado que se reinicia con cada FK distinta, al modo de los subitems de una factura.
¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/12/2011, 08:54
 
Fecha de Ingreso: noviembre-2010
Mensajes: 208
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Clave foranea puede ser primaria a la vez?

si mas o menos..... puedo subir el modelo de datos para que me digas si voy por el camino correcto o no?


en este link esta..creo ke ahy se entiende mas claro


http://l4c.me/fotos/vipeers/modelodatos-ventas


el mismo programa me genera la bd... (power designer)
  #4 (permalink)  
Antiguo 25/12/2011, 09:13
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Clave foranea puede ser primaria a la vez?

El modelo que posteas está basicamente bien. Puede haber alguna que otra observación, como que si tienes en el detalle la cantidad y el precio unitario, poner el subtotal no es necesario, ya que es precio x cantidad.
Eso es una regla general: No se almacenan valores calculables. Ocupan espacio, requieren mantenimiento y pueden terminar siendo inconsistentes.
Sólo se almacenaría un dato adicional en el caso del detalle para establecer si hay descuentos o incrementos por alguna causa, pero fuera de eso, no.
En cuanto a la tabla Factura_Venta, en el encabezado de una factura no existe un "subtotal", si hay un valor intermedio es originado por los impuestos aplicados, por lo que lo que va, en todo caso, es el valor neto en un campo, y los impuestos aplicados en otro. De ese modo, cuando haces la consulta, simplemente haces que se calcule el total definitivo.

Un detalle adicional es que si tienes una tabla que no tiene relaciones definidas con ninguna otra, esa tabla o no está bien definida, o no pertenece al sistema.
Eso es una regla general de Análisis de Sistemas y Fundamentos de Bases de Datos.

Verifica la relación de esa tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 25/12/2011, 09:29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 208
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Clave foranea puede ser primaria a la vez?

ok...entiendo las observaciones que me indicas....

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.

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.

ahora probare si funka o no!
  #6 (permalink)  
Antiguo 25/12/2011, 09:39
Avatar de 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, 4 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)
  #7 (permalink)  
Antiguo 25/12/2011, 09:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 208
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Clave foranea puede ser primaria a la vez?

ahora me funciono...utilizando el modelo ke subi en la imagen....creo que tienes razon...en lo de id producto....
tratare de solucionar eso para que sea en detalle de venta las primarias (id_venta, id_detalle)


gnzsoloyo muchas gracias por compartir sus conocimientos...gracias por las observaciones.,,,

Etiquetas: clave, primaria, tabla, foreignkey
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:45.