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

FOREIGN KEYs caso raro

Estas en el tema de FOREIGN KEYs caso raro en el foro de Mysql en Foros del Web. Bien este caso ya me pasó una vez y era porque los campos a los que asociaba las foreigns keys no eran campos indices o ...
  #1 (permalink)  
Antiguo 17/12/2008, 05:01
 
Fecha de Ingreso: diciembre-2007
Mensajes: 149
Antigüedad: 16 años, 4 meses
Puntos: 1
Exclamación FOREIGN KEYs caso raro

Bien este caso ya me pasó una vez y era porque los campos a los que asociaba las foreigns keys no eran campos indices o claves ( key o primary key) por lo que no me dejaba, pero este es un caso raro, me sale el mismo error en una tabla pero en otra no y siguen las mismas normas con las FK. Me explico:

En la tabla CATEGORIA, tengo: id_categoria int(11) auto_increment
En otra tabla ACTIVIDAD, tengo: FOREIGN KEY (id_categoria) REFERENCES categoria (id_categoria)

¿Porque me da error mysql en la tabla MOVIMIENTO, si tengo declarados los campos como primary keys ?, ¿ y si solo pueden hacer las FK a campos KEY porque en la tabla ACTIVIDAD me admite esa FK y en movimiento no?

Espero haberme explicado bien, gracias por su tiempo.

DROP TABLE IF EXISTS usuario;
CREATE TABLE usuario(
id_usuario int(11) auto_increment,
dni varchar(9) not null,
nombre varchar(100) not null,
profesion varchar(100) not null,
anio_nac int(11) not null,
sexo varchar(6) not null,
direccion varchar(150) not null,
cp int(11) not null,
poblacion varchar(50) not null,
barrio varchar(50) not null,
telf_1 int(11) not null,
telf_2 int(11),
email varchar(50) not null,
nick varchar(15) not null,
pass varchar(15) not null,
horas_disponibles int(11) default 0,
PRIMARY KEY(id_usuario)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS admin;
CREATE TABLE admin(
id_admin int(11) auto_increment,
email varchar(50),
nick varchar(15),
pass varchar(15),
PRIMARY KEY(id_admin)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS categoria;
CREATE TABLE categoria(
id_categoria int(11) auto_increment,
titulo varchar(150) not null,
descripcion text,
estado tinyint(1) default 0,
PRIMARY KEY(id_categoria)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS actividad;
CREATE TABLE actividad(
id_actividad int(11) auto_increment,
id_categoria int(11),
titulo varchar(150),
descripcion text,
PRIMARY KEY(id_actividad),
FOREIGN KEY (id_categoria) REFERENCES categoria (id_categoria)
)ENGINE=InnoDB;

DROP TABLE IF EXISTS movimiento;
CREATE TABLE movimiento(
id_movimiento int(11) auto_increment,
id_usuario int(11),
id_actividad int(11),
oferta tinyint(1),
demanda tinyint(1),
fecha date,
horas_empleadas int(11) default 0,
estado tinyint(1),
PRIMARY KEY(id_movimiento),
FOREIGN KEY (id_usuario) REFERENCES usuario (id_usuario),
FOREIGN KEY (id_actividad) REFERENCES usuario (id_actividad)
)ENGINE=InnoDB;

MySQL ha dicho:

#1005 - Can't create table './bancodet_db/movimiento.frm' (errno: 150)
  #2 (permalink)  
Antiguo 17/12/2008, 05:30
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: FOREIGN KEYs caso raro

Esto esta mal:

FOREIGN KEY (id_actividad) REFERENCES usuario (id_actividad)

donde está id_actividad en usuario?
__________________
WebSenior
  #3 (permalink)  
Antiguo 17/12/2008, 09:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 149
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: FOREIGN KEYs caso raro

JAJAJA jo... eso pasa por estar 5 horas seguidas con lo mismo xD

FOREIGN KEY (id_actividad) REFERENCES usuario (id_actividad) esta mal es:

FOREIGN KEY (id_actividad) REFERENCES actividad (id_actividad)


Lo se soy un pepinico, siempre me pasa lo mismo me desepero y vengo a preguntar aquí, te lo aseguro amigo que ya lo mire un monton de veces y no lo vi, supongo que la solución es la del café me explico, gracias por contestar.
  #4 (permalink)  
Antiguo 17/12/2008, 14:46
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: FOREIGN KEYs caso raro

De nada hombre, fallos de esos los tenemos todos :). Son los peores.
__________________
WebSenior
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:34.