Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/03/2011, 10:04
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: relaciones entre la misma tabla

Hola Jorge011:

Algo debes de estar haciendo mal, porque esto se puede hacer perfectamente. Te dejo el script de cómo se haría desde una consola de texto, pero igual y te recomiendo que utilices alguna herramienta gráfica. Recuerda que los campos llave TIENEN QUE SER EXACTAMENTE DEL MISMO TIPO Y LONGITUD. Revisa este detalle. si checas el script se declaran dos FK (una para cada campo). Tu error también puede estar en que quieres asignar ambos campos con un sólo FK.

Código MySQL:
Ver original
  1. mysql> #Creamos las tablas de ejemplo
  2. mysql> create table usuarios (idUsuario int UNSIGNED NOT NULL AUTO_INCREMENT, no
  3. mbre varchar (50), PRIMARY KEY (idUsuario));
  4. Query OK, 0 rows affected (0.06 sec)
  5.  
  6. mysql> create table mensajes (idMensaje int UNSIGNED NOT NULL AUTO_INCREMENT, id
  7. UsuarioEnvia int UNSIGNED NOT NULL , idUsuarioRecibe int UNSIGNED NOT NULL , men
  8. saje varchar (50) , PRIMARY KEY (idMensaje));
  9. Query OK, 0 rows affected (0.08 sec)
  10.  
  11. mysql> #Creamos la FK del campo idUsuarioEnvia
  12. mysql> alter table mensajes add constraint FK_mensajes FOREIGN KEY (idUs
  13. uarioEnvia) REFERENCES usuarios (idUsuario);
  14. Query OK, 0 rows affected (0.13 sec)
  15. Records: 0  Duplicates: 0  Warnings: 0
  16.  
  17. mysql> #Creamos la FK del campo idUsuarioRecibe
  18. mysql> alter table mensajes add constraint FK_mensajes_2 FOREIGN KEY (id
  19. UsuarioRecibe) REFERENCES usuarios (idUsuario);
  20. Query OK, 0 rows affected (0.13 sec)
  21. Records: 0  Duplicates: 0  Warnings: 0
  22.  
  23. mysql> #insertamos valores a la tabla de usuarios;
  24. mysql> insert into usuarios values (null, 'uno'), (null, 'dos');
  25. Query OK, 2 rows affected (0.00 sec)
  26. Records: 2  Duplicates: 0  Warnings: 0
  27.  
  28. mysql> select * from usuarios;
  29. +-----------+--------+
  30. | idUsuario | nombre |
  31. +-----------+--------+
  32. |         1 | uno    |
  33. |         2 | dos    |
  34. +-----------+--------+
  35. 2 rows in set (0.00 sec)
  36.  
  37. mysql> #insertamos un mensaje correcto
  38. mysql> insert into mensajes values (null, 1, 2, 'mensaje uno');
  39. Query OK, 1 row affected (0.05 sec)
  40.  
  41. mysql> select * from mensajes;
  42. +-----------+----------------+-----------------+-------------+
  43. | idMensaje | idUsuarioEnvia | idUsuarioRecibe | mensaje     |
  44. +-----------+----------------+-----------------+-------------+
  45. |         1 |              1 |               2 | mensaje uno |
  46. +-----------+----------------+-----------------+-------------+
  47. 1 row in set (0.00 sec)
  48.  
  49. mysql> #Verificamos la integridad de la columna idUsuarioEnvia
  50. mysql> insert into mensajes values (null, 3, 2, 'mensaje uno');
  51. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f
  52. ails (`pruebas/mensajes`, CONSTRAINT `FK_mensajes` FOREIGN KEY (`idUsuarioEnvia`
  53. ) REFERENCES `usuarios` (`idUsuario`))
  54. mysql> #Verificamos la integridad de la columna idUsuarioRecibe
  55. mysql> insert into mensajes values (null, 1, 3, 'mensaje uno');
  56. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f
  57. ails (`pruebas/mensajes`, CONSTRAINT `FK_mensajes_2` FOREIGN KEY (`idUsuarioReci
  58. be`) REFERENCES `usuarios` (`idUsuario`))
  59. mysql>

Saludos
Leo