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

Ayuda con relaciones

Estas en el tema de Ayuda con relaciones en el foro de Mysql en Foros del Web. Hola, necesito ayuda con las relaciones, lo que sucede es lo siguiente, tengo 8 tablas, pero hay 3 en las que necesito relacionar foraneas con ...
  #1 (permalink)  
Antiguo 14/09/2009, 10:49
Avatar de RedMew  
Fecha de Ingreso: septiembre-2009
Ubicación: Rioverde SLP
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 0
Ayuda con relaciones

Hola, necesito ayuda con las relaciones, lo que sucede es lo siguiente, tengo 8 tablas, pero hay 3 en las que necesito relacionar foraneas con foraneas, antes me dijeron que tambien las podia declarar primarias, pero esto no me realiza la relacion, asi que la pregunta seria, como relacionar FK con FK, desde ya gracias
  #2 (permalink)  
Antiguo 14/09/2009, 10:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con relaciones

Código mysql:
Ver original
  1. mysql> create table relaciones(id integer primary key);
  2. Query OK, 0 rows affected (0.03 sec)
  3.  
  4. mysql> create table relaciones1(id integer, foreign key (id) references relaciones(id));
  5. Query OK, 0 rows affected (0.03 sec)
  6.  
  7. mysql> create table relaciones2(id integer, foreign key (id) references relaciones1(id));
  8. Query OK, 0 rows affected (0.02 sec)
  9.  
  10. mysql>

redmew... si ves este ejemplo, se crea una tabla relaciones con una primary key. Luego se crea una tabla relaciones1 con una foreign key a relaciones. después se crea una tabla relaciones2 con una foreign key a la foreign key de relaciones1.

Entre relaciones1 y relaciones2 hay una relacion de foranea a foranea que creo es lo que preguntas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 14/09/2009, 11:11
Avatar de RedMew  
Fecha de Ingreso: septiembre-2009
Ubicación: Rioverde SLP
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con relaciones

Cita:
Iniciado por huesos52 Ver Mensaje
Código mysql:
Ver original
  1. mysql> create table relaciones(id integer primary key);
  2. Query OK, 0 rows affected (0.03 sec)
  3.  
  4. mysql> create table relaciones1(id integer, foreign key (id) references relaciones(id));
  5. Query OK, 0 rows affected (0.03 sec)
  6.  
  7. mysql> create table relaciones2(id integer, foreign key (id) references relaciones1(id));
  8. Query OK, 0 rows affected (0.02 sec)
  9.  
  10. mysql>

redmew... si ves este ejemplo, se crea una tabla relaciones con una primary key. Luego se crea una tabla relaciones1 con una foreign key a relaciones. después se crea una tabla relaciones2 con una foreign key a la foreign key de relaciones1.

Entre relaciones1 y relaciones2 hay una relacion de foranea a foranea que creo es lo que preguntas.
Hola, pues es asi como las cree, pero la insercion de datos no la realiza, solo lo hace entre las primeras 2 tablas, en las que tienen llaves foraneas, puse sus relaciones como on delete cascade y on update cascade, pero esto me origino un problema cuando es foranea con foranea, el cual es que ya no me deja insertar ni borrar nada en la BD, y aunque le quite las relaciones on update y on delete cascade ya no me deja hacerle cambios a ninguna tabla de la BD, por lo que pense que esto lo estaba haciendo mal y si es asi me gustaria que me dijeran en donde me equivoque, como quiera muchas gracias x tu respuesta amigo
  #4 (permalink)  
Antiguo 14/09/2009, 12:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con relaciones

Código mysql:
Ver original
  1. mysql> create table relaciones(id integer primary key);
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> create table relaciones1(id integer, foreign key (id) references relaciones(id) on delete cascade on update cascade);
  5. Query OK, 0 rows affected (0.00 sec)
  6.  
  7. mysql> create table relaciones2(id integer, foreign key (id) references relaciones1(id) on delete cascade on update cascade);
  8. Query OK, 0 rows affected (0.02 sec)
  9.  
  10. mysql> insert into relaciones values(1);
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> insert into relaciones values(2);
  14. Query OK, 1 row affected (0.00 sec)
  15.  
  16. mysql> insert into relaciones values(3);
  17. Query OK, 1 row affected (0.00 sec)
  18.  
  19. mysql> insert into relaciones1 values(2);
  20. Query OK, 1 row affected (0.00 sec)
  21.  
  22.  mysql> insert into relaciones2 values(2);
  23. Query OK, 1 row affected (0.00 sec)
  24.  
  25. Query OK, 0 rows affected (0.00 sec)
  26.  
  27. mysql> delete from relaciones;
  28. Query OK, 3 rows affected (0.00 sec)
  29.  
  30. mysql> select *from relaciones1;
  31. Empty set (0.00 sec)
  32.  
  33. mysql> select *from relaciones2;
  34. Empty set (0.00 sec)
  35.  
  36. mysql> rollback;
  37. Query OK, 0 rows affected (0.00 sec)
  38.  
  39. mysql> select *from relaciones2;
  40. +------+
  41. | id   |
  42. +------+
  43. |    2 |
  44. +------+
  45. 1 row in set (0.00 sec)
  46.  
  47. mysql> select *from relaciones1;
  48. +------+
  49. | id   |
  50. +------+
  51. |    2 |
  52. +------+
  53. 1 row in set (0.00 sec)
  54.  
  55. mysql> select *from relaciones;
  56. +----+
  57. | id |
  58. +----+
  59. |  1 |
  60. |  2 |
  61. |  3 |
  62. +----+
  63. 3 rows in set (0.00 sec)
  64.  
  65. mysql>

Que raro. Acabo de probar y no presenta error.
Puedes describir mas detalladamente tu problema?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 14/09/2009, 12:41
Avatar de RedMew  
Fecha de Ingreso: septiembre-2009
Ubicación: Rioverde SLP
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con relaciones

Pues lo que pasa es lo siguiente:
1. Mando los valores que quiero a la base con php
2. No los envia, x lo que lo intento directamente con la BD y me marca
#1452 - Cannot add or update a child row: a foreign key constraint fails (`basedatos/cliente`, CONSTRAINT `cliente_ibfk_1` FOREIGN KEY (`RFC`) REFERENCES `detcte` (`RFC`)) pero bueno, me tuve que crear otra BD con los mismos datos porque esta ya no servia para nada pero sin indicar on update cascade ni on delete cascade, aunque sin eso, no puedo eliminar registros completos y lo que queria era que con solo eliminar el RFC se borraran todos los demas campos segun un par de condiciones, pero lo importante es el error ese que me da y no me deja insertar "NADA", asi que disculpen por explayarme tanto pero a gran detalle ese es todo el rollo, ah, no se si tenga que ver pero uso la version 5.0.45
  #6 (permalink)  
Antiguo 14/09/2009, 12:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con relaciones

El error se refiere a una violación de la integridad referencial de las tablas.
Sin embargo, no compartes en que caso se presenta esto. Sin un ejemplo visual no puedo ayudarte.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 14/09/2009, 12:57
Avatar de RedMew  
Fecha de Ingreso: septiembre-2009
Ubicación: Rioverde SLP
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con relaciones

Espero que esto sea de ayuda:

Código PHP:
$conecta=mysql_connect("localhost","root""");
 
mysql_select_db("basedatos",$conecta);
 
$resulta=mysql_query("insert into cliente(nombre, RFC, direccion, tel, ciudad, CP, mail, cantidad)values('$nom', '$rfc', '$dir', '$tel','$cd','$cp','$mail', '$cant')");
 
mysql_close($conecta); 
antes de activar las relaciones insertaba perfectamente, pero despues de eso no me deja hacerle nada, ni en esta ni ninguna otra tabla, ya que siempre manda el mismo error
  #8 (permalink)  
Antiguo 15/09/2009, 09:54
Avatar de RedMew  
Fecha de Ingreso: septiembre-2009
Ubicación: Rioverde SLP
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con relaciones

Bueno, como ayer no tenia mucho tiempo hoy pongo el codigo de mis tablas, en realidad solo el de las llaves
Código Codigo Mysql:
Ver original
  1. create table cliente(RFC varchar(9) primary key);
  2. create table detcte(RFC varchar(9), foreign key (RFC) references cliente(RFC) on delete cascade, on update cascade);
  3. create table hab(numero int primary key);
  4. create table dethab(numero int, foreign key (numero) references hab(numero));
  5. create table auto(placas varchar(9) primary key);
  6. create table estacionamiento(placas varchar(9), foreign key (placas) references auto(placas)on delete cascade, on update cascade);
  7. ******aqui todo bien, pero en lo siguiente no funciona******
  8. create table rep(RFC varchar(9), numero int, placas varchar(9), foreign key (RFC) references detcte(RFC), foreign key (numero) refrences hab(numero), foreign key (placas) references estacionamiento(placas)on delete cascade, on update cascade);
y aparentemente esta bien, eso creo pero con esta ultima no me funciona
  #9 (permalink)  
Antiguo 15/09/2009, 10:16
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con relaciones

Entre on delete cascade y on update cascade no deben ir comas.

references estacionamiento(placas) on delete cascade on update cascade

cambialas todas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 15/09/2009, 10:24
Avatar de RedMew  
Fecha de Ingreso: septiembre-2009
Ubicación: Rioverde SLP
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con relaciones

En realidad eso se lo puse con el phpMyAdmin, lo que paso es que eso no lo sabia antes, asi que deben de estar sin las comas, bueno muchas gracias, al rato vengo a avisar como me fue
  #11 (permalink)  
Antiguo 15/09/2009, 10:41
Avatar de RedMew  
Fecha de Ingreso: septiembre-2009
Ubicación: Rioverde SLP
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con relaciones

Pues el de las placas ya lo acepto, pero lo que son RFC y numero aun no, me marca
MySQL ha dicho: Documentación
#1452 - Cannot add or update a child row: a foreign key constraint fails (`basedatos/#sql-60c_63`, CONSTRAINT `#sql-60c_63_ibfk_2` FOREIGN KEY (`numero`) REFERENCES `dethab` (`numero`))

y el otro error es igualito solo que con RFC en vez de numero
  #12 (permalink)  
Antiguo 15/09/2009, 10:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con relaciones

con esta se crean todas:

create table cliente(RFC varchar(9) primary key);
create table detcte(RFC varchar(9), foreign key (RFC) references cliente(RFC) on delete cascade on update cascade);
create table hab(numero int primary key);
create table dethab(numero int, foreign key (numero) references hab(numero));
create table auto(placas varchar(9) primary key);
create table estacionamiento(placas varchar(9), foreign key (placas) references auto(placas) on delete cascade on update cascade);
create table rep(RFC varchar(9), numero int, placas varchar(9), foreign key (RFC) references detcte(RFC), foreign key (numero) references hab(numero), foreign key (placas) references estacionamiento(placas) on delete cascade on update cascade);
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 15/09/2009, 12:38
Avatar de RedMew  
Fecha de Ingreso: septiembre-2009
Ubicación: Rioverde SLP
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con relaciones

Muchas gracias, por el momento ya no se han presentado errores, pero lo malo fue que tuve que volver a crear la BD, en fin ahora tengo que trascribir datos, muchas gracias
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 13:10.