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

Problemas Clave Foránea. Error 1215

Estas en el tema de Problemas Clave Foránea. Error 1215 en el foro de Mysql en Foros del Web. ¿¿Me puede ayudar alguien por favor? No entiendo dónde está el error: creación de tabla 1 CREATE TABLE BANCO.NOMINA ( `idmovimiento`int not null auto_increment, `fecha_operacion` ...
  #1 (permalink)  
Antiguo 09/09/2013, 09:22
 
Fecha de Ingreso: septiembre-2013
Mensajes: 10
Antigüedad: 10 años, 7 meses
Puntos: 0
Problemas Clave Foránea. Error 1215

¿¿Me puede ayudar alguien por favor?
No entiendo dónde está el error:

creación de tabla 1

CREATE TABLE BANCO.NOMINA (
`idmovimiento`int not null auto_increment,
`fecha_operacion` date not null,
`dinero_inicial` double not null,
`dinero_operacion` double not null,
`dinero_final`double not null,
`descripcion_movimiento`varchar(255),
PRIMARY KEY (`idmovimiento`)
);

creación de tabla 2

CREATE TABLE BANCO.AHORRO (
`idmovimiento`int not null auto_increment,
`fecha_operacion` date not null,
`dinero_inicial` double not null,
`dinero_operacion` double not null,
`dinero_final`double not null,
`descripcion_movimiento`varchar(255),
PRIMARY KEY (`idmovimiento`)
);

creación de tabla 3

CREATE TABLE BANCO.TOTALES(
`idmovimiento`int not null auto_increment,
`fecha_consulta` date not null,
`dinero_nomina` double not null,
`dinero_ahorro` double not null,
`dinero_final`double not null,
`descripcion_movimiento`varchar(255),
PRIMARY KEY (`idmovimiento`)
);

Problema a la hora de definir clave foránea

ALTER TABLE `banco`.`totales`
ADD CONSTRAINT `dinero_nomina`
FOREIGN KEY (`dinero_nomina` )
REFERENCES `banco`.`nomina` (`dinero_final` )
ON DELETE cascade
ON UPDATE cascade
, ADD INDEX `dinero_nomina_idx` (`dinero_nomina` ASC) ;

ERROR 1215 Cannot add foreing key constraint

¿¿Por qué??
Mil gracias por adelantado
  #2 (permalink)  
Antiguo 09/09/2013, 09:43
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 Clave Foránea. Error 1215

Porque una foreign key es un campo o conjunto de campos que referencia a la clave primaria de otra tabla, y tu estás apuntando la FK a cualquier otra cosa.
__________________
¿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 09/09/2013, 12:03
 
Fecha de Ingreso: septiembre-2013
Mensajes: 10
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Problemas Clave Foránea. Error 1215

Mil gracias.
Efectivamente...

Pero entonces no entiendo una cosa:

Tengo tres tablas

DINERO DE CUENTA BANCARIA A
- Una columna como PK idmovimiento
- dinero total A

DINERO DE CUENTA BANCARIA B
- Una columna como PK idmovimiento
- Dinero B

DINERO TOTAL DE LAS DOS CUENTAS
- Fecha
- dinero de a
- dinero de b
- dinero total de a y b

Tengo dudas sobre si puedo referenciar dinero de a (de la tercera tabla) para que este vinculado a la columna dinero total A (de la primera tabla)

De manera que cuando cambia el valor de dinero total A de la primera tabla cambia el de la tercera.

Y esto quisiera hacerlo sin necesidad de que dinero total A de la primera tabla sea PK (y mantener como PK idmovimiento)

¿Se puede hacer? y si puede ¿cómo?
porque si la foranea solo se puede referenciar con pk...

mil gracias
  #4 (permalink)  
Antiguo 09/09/2013, 14:17
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 Clave Foránea. Error 1215

Lo que tienes, más allá de lo que estás intentando, es un defecto de diseño de datos. Por eso no puedes cumplir esos requisitos.
Lo que planteas como base de datos tiene tantos errores de diseño que resulta dificil poder decirte por dónde empezar.
Como fuese, no existe otra forma de relacionar tablas como no sea por FK y por definición una FK apunta a una PK, pudiendo en MySQL apuntar a un campo declarado UNIQUE, que en los hechos funge de clave alternativa.
Pero da la impresión de que te falta mucho sobre fundamentos de BBDD.

Si al menos puedes describirnos mejor cómo es el sistema de cuentas que quieres representar, podemos guiarte para hacer que ese esquema quede bien construido.
__________________
¿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/09/2013, 13:06
 
Fecha de Ingreso: septiembre-2013
Mensajes: 10
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Problemas Clave Foránea. Error 1215

Bueno, gracias.
La verdad es que sí, reconozco que me falta base, pero es que estoy aprendiendo.
He empezado hace poco...y creía que por aquí se podían consultar dudas. Si no es el lugar para novatos, por favor, házmelo saber.

Mis tablas son estas

creación de tabla 1

CREATE TABLE BANCO.NOMINA (
`idmovimiento`int not null auto_increment,
`fecha_operacion` date not null,
`dinero_inicial` double not null,
`dinero_operacion` double not null,
`dinero_final`double not null,
`descripcion_movimiento`varchar(255),
PRIMARY KEY (`idmovimiento`)
);

creación de tabla 2

CREATE TABLE BANCO.AHORRO (
`idmovimiento`int not null auto_increment,
`fecha_operacion` date not null,
`dinero_inicial` double not null,
`dinero_operacion` double not null,
`dinero_final`double not null,
`descripcion_movimiento`varchar(255),
PRIMARY KEY (`idmovimiento`)
);

creación de tabla 3

CREATE TABLE BANCO.TOTALES(
`idmovimiento`int not null auto_increment,
`fecha_consulta` date not null,
`dinero_nomina` double not null,
`dinero_ahorro` double not null,
`dinero_final`double not null,
`descripcion_movimiento`varchar(255),
PRIMARY KEY (`idmovimiento`)
);


Lo que me gustaría es que el dato

dinero_nomina de la tabla 3 se correspondiera con dinero_final de la tabla 1 (banco.nomina)
y que dinero_ahorro de la tabla 3 se correspondiera con dinero_final de la tabla 2 (banco.ahorro)

De tal forma que cuando varíe dinero_final (de la tabla 1) se actualice automáticamente dinero_nomina de la tabla 3 y lo mismo con dinero_final de la tabla 2 y dinero_ahorro de la tabla3.

Etiquetas: clave, tabla
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 21:04.