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

problemas con relacionar tablas

Estas en el tema de problemas con relacionar tablas en el foro de Mysql en Foros del Web. Hola, hice varias tablas y las quiero relacionar, pero para ejemplificar pondré 2. Usuario id_usuario nombre_usuario id_empresa donde id_usuario es pk y id_empresa es fk ...
  #1 (permalink)  
Antiguo 06/11/2012, 12:49
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
problemas con relacionar tablas

Hola, hice varias tablas y las quiero relacionar, pero para ejemplificar pondré 2.

Usuario
id_usuario
nombre_usuario
id_empresa

donde id_usuario es pk y id_empresa es fk referente a la siguiente tabla

Datos_Empresa
id_empresa
nombre_empresa
razon_social

ambas son InnoDB, y al hacer fk a id_empresa en la tabla Usuario le puse ON UPDATE CASCADE, pero al introducir datos en Datos_Empresa no se actualiza en la tabla Usuario, ¿alguien sabe que está mal, o qué falta?.... SALUDOS¡¡
  #2 (permalink)  
Antiguo 07/11/2012, 02:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problemas con relacionar tablas

Manual

Cita:
ON UPDATE y ON DETETE

CASCADE: Borra o actualiza el registro en la tabla padre y automáticamente borra o actualiza los registros coincidentes en la tabla hija. Tanto ON DELETE CASCADE como ON UPDATE CASCADE están disponibles en MySQL 5.0. Entre dos tablas, no se deberían definir varias cláusulas ON UPDATE CASCADE que actúen en la misma columna en la tabla padre o hija.
Cita:
...pero al introducir datos en Datos_Empresa no se actualiza en la tabla Usuario,...
Al introducir datos no tiene que hacer nada, va a hacer algo si modificas (update) en la tabla padre, y solo sobre los registros coincidentes...

Solo puede actualizar el id_empresa en la tabla usuario si modificas el id_empresa de una empresa preexistente que tenga usuarios registrados. Practica poco recomendable, e inutil, por cierto si el id es simplemente un autoincremental.

Si modificas nombre_empresa o razon_social no va a hacer nada puesto que esos campos no estan en la tabla usuarios.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 07/11/2012 a las 03:04
  #3 (permalink)  
Antiguo 07/11/2012, 08:52
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: problemas con relacionar tablas

oye entonces que tengo que hacer para que queden relacionadas, crei que poner la llave primaria de Datos_Empresa como fk de la tabla Usuario las relacionaba, ..........

Entonces que debo hacer para que se relacionen????????...........haaaaaaaaaaaaa:neurot ico
  #4 (permalink)  
Antiguo 07/11/2012, 10:24
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: problemas con relacionar tablas

Si, están relacionadas poniendo la PK de una como FK en la otra. No entiendo cuál es tu problema.
  #5 (permalink)  
Antiguo 07/11/2012, 10:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problemas con relacionar tablas

Lo mismo digo. Relacionadas ya lo estan pero parece que esperas que por ello pasen cosas que no van a pasar.

Lo unico que pasa es que si intentas insertar un usuario que sea de una empresa que no existe en la bbdd no te lo va a permitir....

Si tienes dos empresas id =1 y id=2 no puedes entrar un usuario cuya empresa sea id=3.
Y si has definido ON DELETE CASCADE si borras la empresa id=2 se van a borrar todos los usuarios de esa empresa...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 07/11/2012, 10:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problemas con relacionar tablas

Cita:
Y si has definido ON DELETE CASCADE si borras la empresa id=2 se van a borrar todos los usuarios de esa empresa...
Y si los ID de esos usuarios están como FK de otras tablas que no poseen el ON DELETE CASCADE correspondiente, no podrás borrar ni los usuarios ni la empresa...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 07/11/2012, 11:19
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: problemas con relacionar tablas

Bueno, ya que las tengo relacionadas yo quiero .....bueno, lo que yo espero que ocurra al relacionarlas es que al insertar datos de la empresa en Datos_Empresa queden relacionados con Usuario

En este caso quiero que por medio del id_empresa de Datos_Empresa al insertar ese datos se registre en la tabla Usuario, así en la tabla Usuario quedará que para el id_usuario=1 los datos que le corresponden en Datos_empresa serán los que tienen el id_empresa=1

Si la manera en que estoy manejando las cosas no funciona, podrían decirme como va?.... tal vez como lo planteo yo no es.... pero seguro ya se entendió lo que pretendo que pase, espero puedan decirme como proceden las cosas.... SALUDOS¡¡¡
  #8 (permalink)  
Antiguo 07/11/2012, 12:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problemas con relacionar tablas

A ver...

Cuando insertas una nueva empresa no pasa nada en las otras tablas...

Si insertas un usuario nuevo controla que le pongas una de las empresas existentes en la tabla empresas. Si no existe la empresa el INSER INTO dará error...

Si lo que quieres es que id_Usuario=1 corresponda a id_Empresa=1 no estas enfocando bien el problema, de entrada esto solo te permitiria un usuario por empresa con lo que lo podrias guardar en la misma tabla que la empresa....

id_Usuario=1 puede corresponder a cualquiera de las empresas para eso tienes el campo id_empresa en la tabla usuarios para indicar a que empresa corresponde. Así puedes tener n usuarios relacionados con una empresa.


Con esta query puedes ver lo que se consigue.... guardando una sola vez los datos de la empresa aun que tenga muchos usuarios asociados

Código MySQL:
Ver original
  1. SELECT * FROM usuarios u INNER JOIN empresas e ON u.id_empresa=e.id_empresa
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 07/11/2012, 16:03
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: problemas con relacionar tablas

gracias, tenia otra idea de lo que hacia la relación, pero en realidad la relación termino entablandola yo, yo digo quien se relaciona con quien, GRAAAAAAACIIIIIIAS¡¡
  #10 (permalink)  
Antiguo 07/11/2012, 23:32
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: problemas con relacionar tablas

oigan¡¡... ahora que tengo creadas mis tablas, ya le metí datos a Datos_Empresa (donde está la pk que es id_empresa)

Datos_Empresa
id_empresa =1
nombre_empresa=empresa1
razon_social=sociedad anonima

Y a Usuario ya le habia metido previamente estos datos:
Usuario
id_usuario =1
nombre_usuario =Rocky
id_empresa =

Como llené primero Usuario, no podía ponerle el id_empresa porque aqui en Usuario es fk, pero como ya llené los datos de DAtos_Empresa ahora si se puede....¿cuál es la sentencia para insertar id_empresa en Usuario?

me imagino que debe ser algo como:

$sql="INSERT INTO Usuario (id_empresa) VALUES (1)" WHERE id_usuario=1;

.....esta sentencia está mal, podrían decirme la forma correcta????
  #11 (permalink)  
Antiguo 08/11/2012, 02:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problemas con relacionar tablas

$sql="UPDATE Usuario SET id_empresa=1 WHERE id_usuario=1;"

No estas insertando un usuario nuevo estas modificando uno ya existente....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 09/11/2012 a las 02:12
  #12 (permalink)  
Antiguo 08/11/2012, 12:04
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: problemas con relacionar tablas

Muchas gracias¡¡¡¡¡¡¡¡............besotototototototes¡¡¡¡ ¡¡¡

Etiquetas: relacionar, tabla, tablas
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 15:02.