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

[SOLUCIONADO] Llave foranea a la llave primaria de la misma tabla

Estas en el tema de Llave foranea a la llave primaria de la misma tabla en el foro de Mysql en Foros del Web. Cordial saludo, Estoy haciendo una tabla y quiero que hacer referencia a la llave foranea de la misma tabla. CREATE TABLE proceso( procesoid serial, nombre ...
  #1 (permalink)  
Antiguo 29/01/2013, 11:08
Avatar de barracuda8220  
Fecha de Ingreso: enero-2013
Ubicación: San Andres Islas
Mensajes: 27
Antigüedad: 11 años, 2 meses
Puntos: 0
Pregunta Llave foranea a la llave primaria de la misma tabla

Cordial saludo,

Estoy haciendo una tabla y quiero que hacer referencia a la llave foranea de la misma tabla.

CREATE TABLE proceso(
procesoid serial,
nombre varchar(50),
procesopadre bigint,
primary key (procesoid),
foreign key procesopadre references proceso(procesoid)
);

me muestra error y no me permite crearla.

Gracias por su ayuda
  #2 (permalink)  
Antiguo 29/01/2013, 11:24
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: Llave foranea a la llave primaria de la misma tabla

Primero: SERIAL no es un tipo de dato de MYSQL.
No existe en este DBMS y me sugiere que estás siguiendo un tutorial que aplica a otro.
Hace un as semanas atrás alguien preguntó con un caso similar y le dijimos lo mismo.
En algunos manuales se indica como sinónimo de un BIGINT UNSIGNED, pero tu no estás respetando el UNSIGNED, y eso generará un error de ejecución.
Es conveniente no usar ese tipo de sinonimos por problemas de compatibilidad.
__________________
¿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 29/01/2013, 11:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Llave foranea a la llave primaria de la misma tabla

Lo que dice gnzsoloyo es cierto.
Prueba con algo así:
Código MySQL:
Ver original
  1. CREATE TABLE `proceso` (
  2.  `nombre` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  3.  `procesopadre` bigint(20) unsigned DEFAULT NULL,
  4.  PRIMARY KEY (`procesoid`),
  5.  KEY `procesopadre` (`procesopadre`),
  6.  CONSTRAINT `proceso_ibfk_1` FOREIGN KEY (`procesopadre`) REFERENCES `proceso` (`procesoid`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


No sé si los tamaños de tus campos son estos o si el charset que usas es UTF-8. Adapta la sintaxis de creación a tus datos.
  #4 (permalink)  
Antiguo 29/01/2013, 14:02
Avatar de barracuda8220  
Fecha de Ingreso: enero-2013
Ubicación: San Andres Islas
Mensajes: 27
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Llave foranea a la llave primaria de la misma tabla

Muchas gracias por su ayuda, me han aclarado varias dudas.

Mi error definitivamente era que en el campo procesopadre solo lo ponía como bigint, sin unsigned, lo cual lo hace un tipo de dato igual al que crea el seudónimo serial

Cita:
Iniciado por gnzsoloyo Ver Mensaje
...
En algunos manuales se indica como sinónimo de un BIGINT UNSIGNED, pero tu no estás respetando el UNSIGNED, y eso generará un error de ejecución....
Ahora, la segunda pregunta necesaria,
Supongo que cuando un proceso tiene abuelos, tatarabuelos, etc, se debe usar recursividad. Saben de una consulta, algoritmo o funcion/procedimiendo que muestre todos los procesos padres de un proceso específico?
  #5 (permalink)  
Antiguo 29/01/2013, 14:20
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: Llave foranea a la llave primaria de la misma tabla

Infortunadamente, no existen consultas recursivas en MYSQL. En Oracle si, pero no es el caso de MySQL.
Esto implica que la solución la debes lograr parcialmente por SQL y parcialmente en 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)

Etiquetas: llave, primaria, 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 23:45.