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

Pk doble error :S

Estas en el tema de Pk doble error :S en el foro de Mysql en Foros del Web. Hola amigos, Por ejemplo tengo una tabla producto y otra que se llama almacen. Muchos productos se van a muchos almacenes ( rel n-n ) ...
  #1 (permalink)  
Antiguo 10/08/2011, 14:41
 
Fecha de Ingreso: marzo-2009
Mensajes: 356
Antigüedad: 15 años, 8 meses
Puntos: 7
Pk doble error :S

Hola amigos,

Por ejemplo tengo una tabla producto y otra que se llama almacen.

Muchos productos se van a muchos almacenes ( rel n-n )

Osea tiene un PKdoble, CODIGO DE PRODUCTO, CODIGPO DE ALMACENES, pero como puedo hacer si aveces se va a repetir por ejemplo:
PROD -> P1 P2 P3 P4 (codigos pk)
ALMACEN -> A1 A2 A3 A4 ( codigos pk)

DETALLE ALMACEN - PRODUCTO
P1 A1
P1 A2
P1 A1

Alli digo q prod1 se fue a almacen1, luego a almacen2 y vuelve a almacen1, lo cual trae error debido a q no se puede repetir los 2 pks.

gracias, espero su ayuda.
  #2 (permalink)  
Antiguo 10/08/2011, 18:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Pk doble error :S

En ese caso las dos PK son insuficientes para determinar la relación porque en realidad están representando una entidad ternaria según el modelo lógico de entidad-relación. Como las entidades ternarias no existen en el modelo físico, se debe por lo menos definir un discriminante adicional.
La solución es sencilla: En esa tabla puede darse que el movimiento de un producto sea desde el almacén A al B y del B al A, pero nunca al mismo tiempo.
Lo único que debes hacer es insertar un DATETIME para registrar cuándo se realizó la operación y agregar a ese DATETIME como parte de la clave primaria (PK) de esa tabla.
No te aconsejo que uses un autonumérico, porque entonces todo el diseño carecería de sentido. Ponle una columna DATETIME para registrar históricamente los movimientos y listo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: doble, tabla
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 16:42.