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

Clave foranea simple...no se rellena....

Estas en el tema de Clave foranea simple...no se rellena.... en el foro de Bases de Datos General en Foros del Web. Hola, tengo dos tablas, la primera se llama ac_users y tiene un campo "id" autoincrement. Y la segunda la he creado con una clave foranea ...
  #1 (permalink)  
Antiguo 28/04/2009, 10:38
rtr
 
Fecha de Ingreso: abril-2009
Mensajes: 368
Antigüedad: 15 años
Puntos: 2
Clave foranea simple...no se rellena....

Hola, tengo dos tablas, la primera se llama ac_users y tiene un campo "id" autoincrement.

Y la segunda la he creado con una clave foranea que copie el id del usuario que introduzca los datos.( es para crear una zona privada en mi web).

Código de creación;


CREATE TABLE zona
(
id smallint(5) NOT NULL,
zona varchar(30) NOT NULL,
contrasena varchar(35) NOT NULL,
FOREIGN KEY (id)
REFERENCES ac_users(id)
);


... pero al introducir los datos...me crea la zona privada en la web y la base de datos , pero en el campo de "id" me aparecen ceros.

En la web tengo el "cajon" para rellenar el id, pero no lo relleno porque , en teoria, lo deberia rellenar con el id del que hace la zona privada.Para eso lo de la clave foranea ¿no?

Gracias, por vuestro tiempo

pongo tambien el codigo de la primera tabla ¿hay que indicar al campo referencia para la clave foranea de la otra, que lo es??

Este es el codigo:


create table ac_users (
id smallint(5) NOT NULL auto_increment,
username varchar(30) NOT NULL default '',
password varchar(32) NOT NULL default '',
name1 varchar(32) NOT NULL default '',
name2 varchar(32) NOT NULL default '',
email varchar(62) NOT NULL default '',
website varchar(250) NOT NULL default '',
avatar varchar(255) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY username (username)
);";

Última edición por GatorV; 28/04/2009 a las 12:26
  #2 (permalink)  
Antiguo 28/04/2009, 12:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Clave foranea simple...no se rellena....

Tema trasladado desde PHP
  #3 (permalink)  
Antiguo 28/04/2009, 12:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: Clave foranea simple...no se rellena....

Como introduces los datos?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 28/04/2009, 16:09
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, 5 meses
Puntos: 2658
Respuesta: Clave foranea simple...no se rellena....

Por empezar no estás diicendo si las tablas son InnDB o MySAM, aunque por el comportamiento que describes debo suponer que son MyISAM. Si es así, las MySAM no soportan FK, pero ignoran su definición en el CREATE por cuestiones de compatibilidad de ódigo, por lo que no se percibe hasta estas situaciones.
El tema es que si vas a usar MySAM, las FK las tendr´sa que administrar por código.
Si son InnoDB, no debería ni siquiera dejarte ingresar un registro en ZONA.
El caso es que (supongo que lo debes saber) en la tabla ZONAS eres tú quien debe enviar el valor del ID al insertar el registro. No es MySQL quien hace eso, salvo que lo hayas programado en un SP.

¿Podrías postear todo lo que haces en SQL (NO PHP, por favor) para entender mejor lo que está pasando?
__________________
¿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 28/04/2009, 16:53
rtr
 
Fecha de Ingreso: abril-2009
Mensajes: 368
Antigüedad: 15 años
Puntos: 2
Respuesta: Clave foranea simple...no se rellena....

hola, pues no se exactamte si son InnDB o MySAM. Trabajo con la base de datos de razy hosting y las tablas las hago directamente alli, con MyAdmin.

Pues segun lo que me dices son MySAM ,porque si pudo ingresar registros en zona...

¿como puedo administrar las FK por código?
¿a que te refieres con ; "en la tabla ZONAS eres tú quien debe enviar el valor del ID al insertar el registro. No es MySQL quien hace eso, salvo que lo hayas programado en un SP."?
  #6 (permalink)  
Antiguo 28/04/2009, 17:21
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, 5 meses
Puntos: 2658
Respuesta: Clave foranea simple...no se rellena....

Una clave foránea es un campo que contiene en una tabla la clave primaria de otra tabla con la que está relacionada. Así, por ejemplo, en una tabla EXAMEN figuran los ID de los ALUMNOS participantes así como los id de Asignaturas, y docenes.
¿Se comprende?
Pero la inserción de un registro dependiente, como es ZONA, no hace que la ID de AC_USERS se inserte en ZONA de forma automática... Tu debiste enviar ese valor con el resto cuando creaste la zona insertando un nuevo registro en la tabla. ¿No es así? Esa es la idea.
Lo que hace una FK es imponerte que para poder ingresar una ZONA nueva, debes si o si ponerle el ID de AC_USERS que le corresponda, y no permitirte dar de alta la zona, si no se cumple esa premisa.
Pero para poder implementar todo esto, debes conocer con qué DBMS estás usando. Sino todo se vuelve una disquisición vacía, porque no todas l as versiones incluyen todos los manejadores de tablas, en el caso de MySQl.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 28/04/2009 a las 17:26
  #7 (permalink)  
Antiguo 28/04/2009, 18:25
rtr
 
Fecha de Ingreso: abril-2009
Mensajes: 368
Antigüedad: 15 años
Puntos: 2
Respuesta: Clave foranea simple...no se rellena....

En el Formulario para crear una "zona" tengo el campo id vacio (osea , para rellenar por el creador de la zona) ¿ese campo deberia ser automático? ¿no? Porque el usuario que rellene el formulario no sabe el id con el que está en la tabla ac_users...
¿como seria entonces?
  #8 (permalink)  
Antiguo 28/04/2009, 19:14
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, 5 meses
Puntos: 2658
Respuesta: Clave foranea simple...no se rellena....

Ese ID no puede ser llenado manualmente.
El tema parece ser un error de procesos. El ciclo debería ser:
1. Ingresa el usuario y llena los datos de la primera tabla.
2. Al darse de alta, el sistema recupera el ID generado por la base.
3. El sistema llena el segundo formulario con el ID recuperado y le solicita los datos del segundo formulario. El usuario lo llena y da de alta la zona.
El asunto es que no estás recuperando y poniendo el ID.
__________________
¿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 29/04/2009, 08:16
rtr
 
Fecha de Ingreso: abril-2009
Mensajes: 368
Antigüedad: 15 años
Puntos: 2
Respuesta: Clave foranea simple...no se rellena....

claro...El problema es que tengo en el formulario , tambien , el espacio en blanco (para rellenar ) el id al crear una zona. ¿Lo kito verdad?.

Yo creia que diciendo esto FOREIGN KEY (id) REFERENCES ac_users(id) en la segunda tabla (crear zona) el sistema ponia el id de la persona que estuviera haciendo la zona....
  #10 (permalink)  
Antiguo 29/04/2009, 08:27
rtr
 
Fecha de Ingreso: abril-2009
Mensajes: 368
Antigüedad: 15 años
Puntos: 2
Respuesta: Clave foranea simple...no se rellena....

claro...El problema es que tengo en el formulario , tambien , el espacio en blanco (para rellenar ) el id al crear una zona. ¿Lo kito verdad?.

Yo creia que diciendo esto FOREIGN KEY (id) REFERENCES ac_users(id) en la segunda tabla (crear zona) el sistema ponia el id de la persona que estuviera haciendo la zona....
  #11 (permalink)  
Antiguo 29/04/2009, 09:37
rtr
 
Fecha de Ingreso: abril-2009
Mensajes: 368
Antigüedad: 15 años
Puntos: 2
Respuesta: Clave foranea simple...no se rellena....

puede ser que me falte esto delante de FOREIG..(CONSTRAINT FK_ac_users)
  #12 (permalink)  
Antiguo 29/04/2009, 11:09
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, 5 meses
Puntos: 2658
Respuesta: Clave foranea simple...no se rellena....

Cita:
Yo creia que diciendo esto FOREIGN KEY (id) REFERENCES ac_users(id) en la segunda tabla (crear zona) el sistema ponia el id de la persona que estuviera haciendo la zona....
No. Lo único que haces, y que es fundamental, es asegurarte que nadie pueda violar la consistencia e integridad de los datos poniendo información incompleta o ilegal.
El resto, lo que la aplicación intente poner, eso lo tienes que resolver via programación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 29/04/2009, 11:11
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, 5 meses
Puntos: 2658
Respuesta: Clave foranea simple...no se rellena....

Cita:
puede ser que me falte esto delante de FOREIG..(CONSTRAINT FK_ac_users)
No es mandatorio, poner CONSTAINT es para hacer que el nombre del indice que maniente la restricción sea personalizado, pero no es obligatorio.
Cuando no pones CONSTRAINT, MySQL le pone un nombre por sí mismo.
Lo bueno de indicar el nombre que se le asigna a esa restricción es que después, si por alguna razón la quieres eliminar es más fácil hacerlo.
__________________
¿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 29/04/2009, 14:49
rtr
 
Fecha de Ingreso: abril-2009
Mensajes: 368
Antigüedad: 15 años
Puntos: 2
Respuesta: Clave foranea simple...no se rellena....

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No. Lo único que haces, y que es fundamental, es asegurarte que nadie pueda violar la consistencia e integridad de los datos poniendo información incompleta o ilegal.
El resto, lo que la aplicación intente poner, eso lo tienes que resolver via programación.

...¿como seria el codigo ...?..
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 01:25.