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

[SOLUCIONADO] Problemas con FK en mysql

Estas en el tema de Problemas con FK en mysql en el foro de Mysql en Foros del Web. Hola, tengo un problema que me está rompiendo la cabeza, es el siguiente, resulta que tengo estas dos tablas: -direcciones (cp PK, dir PK, localidad, ...
  #1 (permalink)  
Antiguo 13/08/2012, 06:55
 
Fecha de Ingreso: agosto-2012
Mensajes: 23
Antigüedad: 11 años, 8 meses
Puntos: 2
Problemas con FK en mysql

Hola, tengo un problema que me está rompiendo la cabeza, es el siguiente, resulta que tengo estas dos tablas:


-direcciones (cp PK, dir PK, localidad, provincia,)

-empresa (cifnif PK, nombre, codpostal FK, dirección FK, telefono1, telefono2, correo, imagen)

Y quiero crearlas con las respectivas claves foráneas, pero mysql me da un error, la sintaxis es correcta porque la he comprobado mil veces, pero debe haber algo que se me escapa, aquí tenéis las sentencias de creación:

Código MySQL:
Ver original
  1. CREATE TABLE direcciones(`dir` varchar(100) NOT NULL, `cp` int(10) unsigned NOT NULL,`localidad` varchar(50) NOT NULL,`provincia` varchar(50) NOT NULL, PRIMARY KEY(dir,cp))
  2.  
  3. CREATE TABLE empresa(`cifnif` varchar(45) NOT NULL, `nombre` varchar(45) NOT NULL,`codpostal` int(10) unsigned NOT NULL,`direccion` varchar(100)NOT NULL,`telefono1` varchar(9) NOT NULL, `telefono2` varchar(9) NOT NULL, `correo` varchar(45) NOT NULL, `imagen` longblob DEFAULT NULL, PRIMARY KEY(cifnif), FOREIGN KEY(codpostal) REFERENCES direcciones(cp), FOREIGN KEY(direccion) REFERENCES direcciones(dir))


Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 13/08/2012, 08: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: Problemas con FK en mysql

El error que se te produce es por un error conceptual.
Una FK es una columna o conjunto de columnas que refiere a la PK de otra tabla. Pero esto significa que la FK se considera como una unidad lógica, y no como partes. La FK multicampo apunta a la PK multicampo como un todo.
En otras palabras:
Código MySQL:
Ver original
  1. CREATE TABLE direcciones
  2.     (
  3.     `dir` VARCHAR(100) NOT NULL,
  4.     `cp` INT(10) UNSIGNED NOT NULL,
  5.     `localidad` VARCHAR(50) NOT NULL,
  6.     `provincia` VARCHAR(50) NOT NULL,
  7.     PRIMARY KEY(dir,cp));
  8.  
  9. CREATE TABLE empresa(
  10.     `cifnif` VARCHAR(45) NOT NULL,
  11.     `nombre` VARCHAR(45) NOT NULL,
  12.     `codpostal` INT(10) UNSIGNED NOT NULL,
  13.     `direccion` VARCHAR(100)NOT NULL,
  14.     `telefono1` VARCHAR(9) NOT NULL,
  15.     `telefono2` VARCHAR(9) NOT NULL,
  16.     `correo` VARCHAR(45) NOT NULL,
  17.     `imagen` LONGBLOB DEFAULT NULL,
  18.     PRIMARY KEY(cifnif),
  19.     FOREIGN KEY(direccion, codpostal) REFERENCES direcciones(dir, cp));
¿Se ve la diferencia?

Por cierto: En MySQL toda sentencia (especialmente si hay más de una en el script) debe terminar con punto y coma (;).
__________________
¿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 13/08/2012, 08:18
 
Fecha de Ingreso: agosto-2012
Mensajes: 23
Antigüedad: 11 años, 8 meses
Puntos: 2
[SOLUCIONADO] Problemas con FK en mysql

Muchísimas gracias!!, no he puesto los puntos y comas porque estoy trabajando con Qt y lo he copiado directamente, con respecto a tu forma, el caso es que lo estuve probando!! y no me funcionaba, se me escaparía algún detalle... muchas gracias de nuevo!!
  #4 (permalink)  
Antiguo 13/08/2012, 08:34
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: Problemas con FK en mysql

Si te está devolviendo un error, copia y postea el mensaje. A ciegas es un poco difícil decirte qué falla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql, 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 11:53.