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

Problemas con foreign key

Estas en el tema de Problemas con foreign key en el foro de Mysql en Foros del Web. Hola a todos,tengo problemas con una tabla de las que estoy intentando crear y buscando por internet parece ser que tengo un problema con la ...
  #1 (permalink)  
Antiguo 19/01/2013, 10:37
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Problemas con foreign key

Hola a todos,tengo problemas con una tabla de las que estoy intentando crear y buscando por internet parece ser que tengo un problema con la foreign que intento crear en dicha tabla.

La primera tabla es codigopostal que defino de la siguiente manera y se crea bien:
Código MySQL:
Ver original
  1. create table codigopostal(idCodPostal tinyint(5) NOT NULL auto_increment,
  2. CodPos varchar(5) NOT NULL DEFAULT '' ,
  3. Localidad varchar(50) NOT NULL DEFAULT '' ,
  4. Provincia varchar(50) NOT NULL DEFAULT '' ,
  5. PRIMARY KEY (idCodPostal),
  6. KEY (CodPos),
  7. UNIQUE (idCodPostal)
La segunda es clientes que tiene una foreign key a codigo postal y también se crea bien
Código MySQL:
Ver original
  1. nombre varchar(50) NOT NULL DEFAULT '' ,
  2. apellido1 varchar(50) NOT NULL DEFAULT '' ,
  3. apellido2 varchar(50),
  4. todocliente varchar(250)NOT NULL DEFAULT '' ,
  5. Identificacion varchar(10) NOT NULL DEFAULT '' ,
  6. email varchar(50),
  7. tel varchar(9),
  8. tienecontratos  TINYINT(1),
  9. fk_CodPostal tinyint(5),
  10. PRIMARY KEY(idCliente),
  11. KEY(Identificacion),
  12. UNIQUE (idCliente),
  13. FOREIGN KEY(fk_CodPostal) REFERENCES codigopostal(idCodPostal))
Y por ultimo la tabla contratos que es donde tengo el problema. Estoy intentando crearle una foreign a clientes pero me aparece el error 150
Código MySQL:
Ver original
  1. create table contratos (id_Contrato tinyint(5) unsigned NOT NULL auto_increment,
  2. FechaCon date NOT NULL default '0000-00-00',
  3. Descripcion varchar(255) NOT NULL DEFAULT '' ,
  4. BaseImp double NOT NULL DEFAULT '0' ,
  5. ImporTot double NOT NULL DEFAULT '0' ,
  6. Pagado tinyint(1) NOT NULL DEFAULT '0',
  7. fk_cliente tinyint(5),
  8. PRIMARY KEY(id_Contrato),
  9. FOREIGN KEY(fk_cliente) REFERENCES clientes(idCliente))
A ver si me podeis decir donde está el error, porque soy novata en mysql y no me entero todavía muy bien.

Gracias

Última edición por gnzsoloyo; 19/01/2013 a las 10:53 Razón: Etiquetas de código incorrectas. Usar Highlight "MySQL" o "SQL"
  #2 (permalink)  
Antiguo 19/01/2013, 10:52
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 con foreign key

Tienes dos problemas:
- El error de creación de FK es debido a que en un caso estás declarando un TINYINT UNSIGNED y en el otro es TINYINT. Los tipos de dato con y sin signo no tienen el mismo rango de representación de números, por lo que son incompatibles para las FK.
- El segundo error es de elección de dato. Un TINYINT UNSIGNED puede representar valores entre 0 y 255, mientras que el TINYINT tiene su rango entre -128 a +127. ¿Realmente vas a tener tan pocos numeros de código postal?

Nota bene: El numero entre paréntesis del TINYINT(5), no representa la cantidad de dígitos representables. Se usa para 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 19/01/2013, 11:18
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Problemas con foreign key

He puesto unsigned en el otro campo y ya me ha funcionado.
Lo cierto, es que no es una base de datos real,sino un ejercicio, por eso he puesto ese rango porque el volumen de datos será pequeño.
Si fuese real, tampoco me funcionaría bien aunque aumentase el rango ya que existen codigos postales repetidos para diferentes poblaciones.

Gracias gnzsoloyo por tu ayuda.

Etiquetas: key, 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 13:28.