Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/05/2012, 21:15
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: 17 años, 1 mes
Puntos: 2658
Respuesta: Como repetir llave foranea en tabla compuesta

La PK de la tabla relacional debe estar compuesta por las dos PK de las otras dos tablas, mas por lo menos un campo como discriminante, que podría ser la fecha de compra.
Eso traería una restricción adicional: que el mismo usuario no pueda comprar dos veces el mismo producto en el mismo día. Para resolverlo la fecha debe ser de formato DATETIME, ya que no puede hacer dos compras simultáneas de lo mismo (sería la misma compra):
Código MySQL:
Ver original
  1. CREATE TABLE usuarios_productos(
  2. usuario VARCHAR(10),
  3. id_producto INT,
  4. fecha_compra DATETIME,
  5. PRIMARY KEY (usuario, id_producto, fecha_compra),
  6. FOREIGN KEY (usuario) REFERENCES usuarios(usuario),
  7. FOREIGN KEY (nombre) REFERENCES productos(id_producto));
Nota Bene: No tiene sentido poner el campo "nombre" en la tabla relacional. Ya existe en el de Productos y duplicarlo implicaría riesgo de inconsistencia de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)