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

relaciones entre la misma tabla

Estas en el tema de relaciones entre la misma tabla en el foro de Mysql en Foros del Web. hola estoy teniendo un problema que no se como resolver y no encuentro informacion sobre esto como hago una relacion entre la misma tabla? esto ...
  #1 (permalink)  
Antiguo 06/03/2011, 14:53
 
Fecha de Ingreso: marzo-2011
Mensajes: 6
Antigüedad: 13 años, 9 meses
Puntos: 0
relaciones entre la misma tabla

hola
estoy teniendo un problema que no se como resolver y no encuentro informacion sobre esto
como hago una relacion entre la misma tabla? esto lo necesito para dos cosas, que por ahora necesito, y seguro me va a servir mucho a futuro para otros temas

por ejemplo para enviar mensajes privados entre usuarios, necesitaria agregar el id de los dos, el que lo envia y el que lo recibe, como fk, pero esto no me deja, para otra cosa que lo necesito es crear relaciones entre usuarios que serian una especie de amigos, necesitaria el id de los dos para la relacion de amistad, id1 es amigo de id2
si los agrego simplemente como numeros agregando igualmente el id pero sin ser fk la tabla quedaria sin relacion directa con otra y no lo veo correcto
alguien puede darme una mano sobre como crear estas relaciones? o alguna pagina que lo explique
  #2 (permalink)  
Antiguo 07/03/2011, 02:16
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 10 meses
Puntos: 89
Respuesta: relaciones entre la misma tabla

Lo que quieres no es una relacion entre la misma tabla, la tabla amigos tendría dos relaciones con la tabla usuarios.
  #3 (permalink)  
Antiguo 07/03/2011, 08:31
 
Fecha de Ingreso: marzo-2011
Mensajes: 6
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: relaciones entre la misma tabla

hola Heimish2000 gracias por responder
intente eso pero no me deja tener dos fk del mismo campo en otra tabla, en la que intente fue la de mensajes y me tira error, idenvia e idrecibe son id_usuario y eso no me deja hacerlo
  #4 (permalink)  
Antiguo 07/03/2011, 10:04
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
  #5 (permalink)  
Antiguo 07/03/2011, 22:21
 
Fecha de Ingreso: marzo-2011
Mensajes: 6
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: relaciones entre la misma tabla

leonardo te agradesco enormemente el laburo que te tomaste para mostrarme y explicarme como es. me quedo muy claro y ya lo estoy implementando

si no molesto mucho queria hacerles una pregunta pero solamente de yapa. para los amigos al cargar el registro seria mejor que quede amigo1 es amigo de amigo2 y ese registro usarlo para ver si tanto amigo1 es amigo de amigo2 como si amigo2 es amigo de amigo1 o crear dos registros, amigo1 es amigo de amigo2 y otro amigo2 es amigo de amigo1 para futuras consultas un poco mas complejas o problemas que se me presenten a futuro. de cualquiera de las dos formas seria lo mismo, una consulta mas o menos o funcion que haya que agregarle llegaria al resultado buscado pero queria saber si tienen alguna recomendacion pero solamente es eso y tampoco quiero joder mucho ya con la ayuda de leandro es demasiado y estoy muy agradecido.
  #6 (permalink)  
Antiguo 08/03/2011, 01:54
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 10 meses
Puntos: 89
Respuesta: relaciones entre la misma tabla

Yo lo haría con un único registro, lo otro es duplicar información.
  #7 (permalink)  
Antiguo 08/03/2011, 17:43
 
Fecha de Ingreso: marzo-2011
Mensajes: 6
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: relaciones entre la misma tabla

perfecto Heimish2000 muchas gracias a vos tambien

Etiquetas: nose, relaciones
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 04:38.