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

Problemas al capturar informacion en un campo FK MYSQL

Estas en el tema de Problemas al capturar informacion en un campo FK MYSQL en el foro de Mysql en Foros del Web. Que tal amigos de la comunidad. El dia de hoy vengo con una duda que no me deja avanzar, y en la web he encontrado ...
  #1 (permalink)  
Antiguo 10/10/2011, 10:42
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Pregunta Problemas al capturar informacion en un campo FK MYSQL

Que tal amigos de la comunidad. El dia de hoy vengo con una duda que no me deja avanzar, y en la web he encontrado poca referencia al tema.

Tengo tres tablas en mi base de datos: persona, empresa y grupo.

La persona pertenece a una empresa cualquiera y la relacion con llaves no me da problema alguno. Por que para cada persona, por fuerza, esta tiene q pertenecer a una empresa, y la relacion se hace en cascada a traves del campo de nombre_emppresa.

Para la relacion entre empresa y grupo, es lo mismo. Se relacionan las dos tablas a traves de un campo llamado grupo. Y me hace la relacion en cascada para cualquier cambio, lo mismo q empresa y persona.

El problema aqui, es que como no siempre la empresa va a pertenecer a un grupo, esta se captura sin ninguna referencia al grupo. Y el problema consiste en que al llenar mi formulario php, no me captura la informacion en mi tabla de empres por que me marca la relacion que tiene que pertenecer a un grupo por fuerza, y no me permite dejar sin informacion en ese campo.

Es posible capturar informacion a una tabla aunque el campo donde se tiene la llave foranea pueda quedar vacio en algunos registros?

  #2 (permalink)  
Antiguo 10/10/2011, 10:49
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 al capturar informacion en un campo FK MYSQL

Es una cuestión de diseño e implementación.
Lo que tienes es una relación que es opcional: Grupo. La tabla Empresa entonces debe tener la FK de Grupo que pueda ser NULL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/10/2011, 11:56
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Muchas gracias por la pronta respuesta gnzsoloyo. He declarado en null la fk de la tabla empresa relacionada a grupo, y aun no permite guardar datos en la tabla empresa. Cuando capturo tambien los datos del grupo, si me guarda toda la informacion, mas sin embargo, cuando no capturo un grupo, no me captura la empresa. Y eliminando la relacion entre empresa y grupo, si permite el registro.
  #4 (permalink)  
Antiguo 10/10/2011, 12:32
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 al capturar informacion en un campo FK MYSQL

Entonces tienes otra condición o condiciones que está estorbando.
¿Por qué no posteas el CREATE TABLE de las tablas involucradas? ASí podremos analizar por dónde anda el problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 10/10/2011, 12:57
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

---tabla persona---
id_persona-- int(11) -- AI --PK
nombre -- varchar(30)
empresa -- varchar(255) -- INDEX

--tabla empresa--
id_empresa -- int(11) -- AI -- UNIQUE
grupo -- varchar(255) -- NULL -- INDEX
empresa -- varchar(255) PRIMARY

--grupo--
id_grupo -- int(11) -- AI -- UNIQUE
grupo -- varchar(255) -- PK


Las relaciones entre tablas son de esta manera:

[tabla contacto]empresa(INDEX) ---> [tabla contacto]empresa(INDEX)
[tabla empresa]grupo(INDEX) -- >[tabla grupo]grupo(PRIMARY)
  #6 (permalink)  
Antiguo 10/10/2011, 12:59
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Para esto, los campos que quiero relacionar, son varchar, y no la relacion a un id de otra tabla
  #7 (permalink)  
Antiguo 10/10/2011, 13:12
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Para la captura de la informacion, estoy utilizando un formulario en php algo complejo, pues creo tres condicionantes dependiendo de que es lo que se va a capturar.

IF(si solamente en el formulario se capturan los datos de la persona, procede a capturar nada mas esos datos)

ELSEIF(Si detecta que los campos de la persona y la empresa estan llenos, procede a la captura de estos)

ELSEIF(Si detecta que los campos de persona, empresa y grupo estan llenos, procede a la captura de los tres)

ELSE(Faltan campos por rellear).

Sin la relacion en la base de datos entre empresa y grupo, me captura perfectamente todo. Mas sin embargo necesito tener esa relacion entre empresa y grupo, puesto que seran muchos datos a vaciar a la base de datos, y va a ver cambios en cascada
  #8 (permalink)  
Antiguo 10/10/2011, 14:55
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 al capturar informacion en un campo FK MYSQL

Cita:
Iniciado por Oscar_Hidro Ver Mensaje
---tabla persona---
id_persona-- int(11) -- AI --PK
nombre -- varchar(30)
empresa -- varchar(255) -- INDEX

--tabla empresa--
id_empresa -- int(11) -- AI -- UNIQUE
grupo -- varchar(255) -- NULL -- INDEX
empresa -- varchar(255) PRIMARY

--grupo--
id_grupo -- int(11) -- AI -- UNIQUE
grupo -- varchar(255) -- PK


Las relaciones entre tablas son de esta manera:

[tabla contacto]empresa(INDEX) ---> [tabla contacto]empresa(INDEX)
[tabla empresa]grupo(INDEX) -- >[tabla grupo]grupo(PRIMARY)
Muy bonito, pero no trae la información necesaria (¿por qué cuando uno pide el CREATE TABLE la gente pone una descripción? No es lo mismo.).

Usa:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE nombreTabla;
con el nombre de cada tabla y postea la respuesta de cada una.

Cuando se pide el CREATE TABLE es porque en esa forma se obtiene una información precisa de ciertas partes que una descripción no abarca.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 10/10/2011, 15:20
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

[/HIGHLIGHT]

--

CREATE TABLE IF NOT EXISTS `empresa` (
`id_empresa` int(11) NOT NULL AUTO_INCREMENT,
`nom_comer_gr` varchar(255) DEFAULT NULL,
`nombre_comercial` varchar(255) NOT NULL,
`razon_social` varchar(255) NOT NULL,


--
-- Filtros para las tablas descargadas (dump)
--

--
-- Filtros para la tabla `empresa`
--
ALTER TABLE `empresa`
ADD CONSTRAINT `empresa_ibfk_1` FOREIGN KEY (`nom_comer_gr`) REFERENCES `grupo` (`nom_comer_gr`) ON DELETE CASCADE ON UPDATE CASCADE
[/HIGHLIGHT]
  #10 (permalink)  
Antiguo 10/10/2011, 15:22
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

CREATE TABLE IF NOT EXISTS `empresa` (
`id_empresa` int(11) NOT NULL AUTO_INCREMENT,
`nom_comer_gr` varchar(255) DEFAULT NULL,
`nombre_comercial` varchar(255) NOT NULL,
`razon_social` varchar(255) NOT NULL,
-- Filtros para la tabla `empresa`

ALTER TABLE `empresa`
ADD CONSTRAINT `empresa_ibfk_1` FOREIGN KEY (`nom_comer_gr`) REFERENCES `grupo` (`nom_comer_gr`) ON DELETE CASCADE ON UPDATE CASCADE



CREATE TABLE IF NOT EXISTS `grupo` (
`id_grupo` int(11) NOT NULL AUTO_INCREMENT,
`nom_comer_gr` varchar(255) NOT NULL DEFAULT '',
`raz_soc_gr` varchar(255) NOT NULL,
`rfc_gr` varchar(20) NOT NULL,
PRIMARY KEY (`nom_comer_gr`),
UNIQUE KEY `id_grupo` (`id_grupo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2
  #11 (permalink)  
Antiguo 10/10/2011, 15:25
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 al capturar informacion en un campo FK MYSQL

Lo siento, no te pedí que hicieras un dump. Sólo que postearas el resultado de los CREATE TABLE, pero por lo visto no lo harás.
Lo único que te puedo decir ahora es que por la descripción que pusiste antes, la estructura de las tablas y las definiciones de las claves parece algo caótica, y no parecen estar bien definidas. Eso puede estar llevando a crear problemas como los que describes, pero sin ver los CREATE TABLE... todo es suposición.



Edito: En la defición que posteas después se puede ver que la relación entre Empresa y Grupo sigue siendo mandatoria, lo que implica que no puedes crear una empresa sin grupo...
Vuelve al tablero y define mejor eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 10/10/2011, 15:38
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Gracias por tu tiempo gnzsoloyo y una disculpa por hacerte batallar hermano. Estoy checando la relacion entre grupo y empresa, que es donde pienso que puede estar el problem. Saludos
  #13 (permalink)  
Antiguo 10/10/2011, 15:51
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 al capturar informacion en un campo FK MYSQL

El tema de relacionar una FK con un campo UNIQUE es que si bien el UNIQUE admite la existencia de un NULL como valor, a diferencia de la PK, ese valor NULL debe existir en la tabla.
La solución más simple que le veo a tu problema es crear un registro cero, donde ese valor UNIQUE sea NULL. De ese modo puedes conservar la restricción sin que genere conflictos.

Prueba con eso y me cuentas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 10/10/2011, 16:03
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Que crees hermano, generé el registro cero en unique con null, y no hay insercion de registro posteriores. Sigo con el mismo problema. Habrá alguna manera de relacionar los campos de ambas tablas, sin ser totalmente dependiente una de la otra?
  #15 (permalink)  
Antiguo 10/10/2011, 21:11
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 12 años, 6 meses
Puntos: 48
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Oye pero si colocas el campo grupo de la tabla empresa para que pueda ser null deverias poder ingresar una empresa que no pertenesca en ningún grupo.

Yo creo que tu problema esta en el formulario que tienes en tu pagina.
prueba ingresar esto en tu base de datos:
Código MySQL:
Ver original
  1. insert into empresa(grupo,empresa) values(NULL,'EMPRESA_BUENA_ONDA')
si te funciona el problema es tu formulario de tu pagina y para eso tendrias que hacer que cuando no se reciba ningún grupo entonces lo colocas ingresas un NULL.
Código PHP:
Ver original
  1. <?php
  2. if(!$_POST['obtener_grupo'] or $_POST['obtener_grupo']==''){
  3.    $_POST['obtener_grupo']='NULL';
  4. }
  5. ......
  6. ?>

otra cosa que podrias hacer en caso que no sea lo anterior es agregar un valor en tu tabla grupo que diga NINGUNO y haci cuando el cliente no seleccione un grupo para su empresa tu lo ingresas como 'NINGUNO'.

Código MySQL:
Ver original
  1. insert into grupo(grupo) values('NINGUNO');
Código PHP:
Ver original
  1. if(!$_POST['obtener_grupo'] or $_POST['obtener_grupo']==''){
  2.    $_POST['obtener_grupo']=" 'NINGUNO' ";
  3. }
  #16 (permalink)  
Antiguo 12/10/2011, 08:52
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Rodrhigo, gracias por tu aporte, pero nada. No me permite capturar el valor en null desde mi formulario php
  #17 (permalink)  
Antiguo 12/10/2011, 09:01
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Tabla "empresa"

Código MySQL:
Ver original
  1. CREATE TABLE `empresa` (
  2.  `id_empresa` int(11) NOT NULL AUTO_INCREMENT,
  3.  `nom_comer_gr` varchar(255) DEFAULT NULL,
  4.  `nombre_comercial` varchar(255) NOT NULL,
  5.  `razon_social` varchar(255) NOT NULL,
  6.  `giro_empresa` varchar(255) NOT NULL,
  7.  `rfc` varchar(30) NOT NULL,
  8.  `calle` varchar(255) NOT NULL,
  9.  `no_ext` int(11) NOT NULL,
  10.  `no_int` int(11) NOT NULL,
  11.  `codigo_postal_emp` int(11) NOT NULL,
  12.  `estado_emp` varchar(255) NOT NULL,
  13.  `municipio_emp` varchar(255) NOT NULL,
  14.  `colonia_emp` varchar(255) NOT NULL,
  15.  `lada_emp` int(11) NOT NULL,
  16.  `tel_emp` int(11) NOT NULL,
  17.  `exten_emp` int(11) NOT NULL,
  18.  `clasif_emp` varchar(3) NOT NULL,
  19.  PRIMARY KEY (`nombre_comercial`),
  20.  UNIQUE KEY `id_empresa` (`id_empresa`),
  21.  KEY `id_grupo` (`nom_comer_gr`),
  22.  CONSTRAINT `empresa_ibfk_1` FOREIGN KEY (`nom_comer_gr`) REFERENCES `grupo` (`nom_comer_gr`) ON DELETE CASCADE ON UPDATE CASCADE


tabla "grupo"

Código MySQL:
Ver original
  1. CREATE TABLE `grupo` (
  2.  `id_grupo` int(11) NOT NULL AUTO_INCREMENT,
  3.  `nom_comer_gr` varchar(255) NOT NULL DEFAULT '',
  4.  `raz_soc_gr` varchar(255) NOT NULL,
  5.  `rfc_gr` varchar(20) NOT NULL,
  6.  `giro_gr` varchar(30) NOT NULL,
  7.  `calle_gr` varchar(30) NOT NULL,
  8.  `no_ext_gr` int(11) NOT NULL,
  9.  `no_int_gr` int(11) NOT NULL,
  10.  `cod_post_gr` int(11) NOT NULL,
  11.  `estado_gr` varchar(30) NOT NULL,
  12.  `municipio_gr` varchar(30) NOT NULL,
  13.  `colonia_gr` varchar(30) NOT NULL,
  14.  `lada_gr` int(11) NOT NULL,
  15.  `telefono_gr` int(11) NOT NULL,
  16.  `exten_gr` int(11) NOT NULL,
  17.  `clasif_gr` varchar(20) NOT NULL,
  18.  PRIMARY KEY (`id_grupo`),
  19.  UNIQUE KEY `nom_comer_gr` (`nom_comer_gr`)


@gnzsoloyo, hermano, una disculpa por no haberte mandado la informacion como se debia en un principio. Supongo que necesitabas algo como esto
  #18 (permalink)  
Antiguo 12/10/2011, 20:47
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 12 años, 6 meses
Puntos: 48
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

oye cree esas tablas en una base de datos y si se puede ingresar empresas que no pertenescan a un grupo.
El problema no es mysql,sino php.
Te recomiendo que coloques tu pregunta en la sección php y que muestres como recibes los datos desde ese formulario para que te ayudemos.
  #19 (permalink)  
Antiguo 13/10/2011, 07:39
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 12 años, 6 meses
Puntos: 25
Respuesta: Problemas al capturar informacion en un campo FK MYSQL

Perfecto hermano, gracias y espero verte en el foro de php. Saludos.

Etiquetas: php, problemabasededatos, 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 22:31.