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

¡No se ha definido el índice!

Estas en el tema de ¡No se ha definido el índice! en el foro de Mysql en Foros del Web. Hola a todos Os cuento. tengo una bbdd con varias tablas relacionadas entre sí. Os resumo el esquema. tabla 1 id (primary) name (index) tabla ...
  #1 (permalink)  
Antiguo 28/02/2013, 19:13
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
¡No se ha definido el índice!

Hola a todos

Os cuento. tengo una bbdd con varias tablas relacionadas entre sí. Os resumo el esquema.

tabla 1
id (primary)
name (index)

tabla 2
id (primary)
name (index)

mapa_de_tablas
id (primary)
id_tabla_1 (index)
id_tabla_2 (index)


Todo funcionaba perfectamente, hasta que he agregado una cuarta tabla copiando el mismo modelo anterior, con su respectivo mapa, a partir de entonces, ni en la nueva, ni en las anteriores me deja definir las relaciones entre keys y me dice que ¡No se ha definido el índice! (nombre de la columna index que quiero relacionar con su correspondiente primary).

Todas las tablas son InnoDB y sí tienen definidos sus index.
Trabajo con PHpMyAdmin.

Lo único que encontré por ahí es esto http://www.clubdelphi.com/foros/showthread.php?t=50890 que le pasa exactamente lo mismo que a mi, pero que no lo han resuelto, o mejor dicho despues de 5 años no han publicado la respuesta :)

A alguien le ha pasado esto alguna vez ? sabeis que pasa ?

Un saludo y gracias
  #2 (permalink)  
Antiguo 01/03/2013, 08:02
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ¡No se ha definido el índice!

puedes publicar la estructura de esa cuarta tabla please? creo que no tiene mucho sentido hacer tantas tablas relacionadas, no me imagino una estructura "muchos a muchos a muchos", tampoco creo que estes intentando hacer una "tabla 3" agregada en mapa_de_tablas... en fin, publica como están las tablas despues de crear la nueva :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #3 (permalink)  
Antiguo 03/03/2013, 06:50
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
Respuesta: ¡No se ha definido el índice!

Hola stramin

La estructura de la bbdd está basada en el modelo de "toxi" (http://tagging.pui.ch/post/370277457...tabase-schemas) la relación involucra siempre tres tablas por vez en la cual si tenemos tabla 1, tabla 2 y tabla 3, las tablas 1 y 3 se intercomunicarán utilizando la tabla 2 como puente.
A ver si con este gráfico se ve mejor (las casillas de colores son las que están relacionadas entre si).
Como ves, "bookmark" se relaciona con todas utilizando los puentes "map"



No obstante, no creo que tenga que ver con la estructura; ya que a pesar de haber eliminado las modificaciones y volviendo a los origenes de "solo tres tablas" (bookmark, tagmap y tag) el error persiste.

Saludos
  #4 (permalink)  
Antiguo 11/03/2013, 17:11
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
Respuesta: ¡No se ha definido el índice!

Hola de nuevo, sigo sin encontrar el fallo, alguna idea please ?
  #5 (permalink)  
Antiguo 11/03/2013, 17: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: ¡No se ha definido el índice!

La información aportada en el post Nº 3 (los gráficos), no sirve para determinar por qué te falla la creación de relaciones. No nos importa la graficación, nos interesa la estructura de las tablas y ciertos detalles que no nos estás dando, y que surgen de la definición de las tablas.

Danos los CREATE TABLE de cada una de las tablas, y partiremos desde allí.

Si no los tienes, puedes recuperarlos usando :
Código MySQL:
Ver original
  1. SHOW CREATE TABLE bookmark;
  2. SHOW CREATE TABLE category;
  3. SHOW CREATE TABLE categorymap;
  4. SHOW CREATE TABLE family;
  5. SHOW CREATE TABLE familymap;
  6. SHOW CREATE TABLE tagmap;

Cualquier otra cosa es irrelevante, el modelo en que te basas es innecesario revisar, porque el problema no está en ese ejemplo, sino en tu base. Lo que necesitamos es esa informació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)
  #6 (permalink)  
Antiguo 11/03/2013, 18:07
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
Respuesta: ¡No se ha definido el índice!

Hola gnzsoloyo, gracias por la respuesta.

Las tablas las creo directamente en phpmyadmin, pero he sacado esto con los códigos que me has dado. Lo resumo en estas tres tablas que sirven para ilustrar el esquema ya que el resto es más de los mismo.

Bookmark

CREATE TABLE `bookmark` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
`url` varchar(200) COLLATE latin1_spanish_ci NOT NULL,
`description` text COLLATE latin1_spanish_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci

Tag

CREATE TABLE `tag` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tags` varchar(300) COLLATE latin1_spanish_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `tags` (`tags`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci

tagmap

p CREATE TABLE `tagmap` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bookmark_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `bookmark_id` (`bookmark_id`),
KEY `tag_id` (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci

Aquí veo que en tagmap 'bookmark_id' y 'tag_id' están marcadas como KEY, en la interfaz gráfica también aparecen como index ambas, como puedes ver en el siguiente pantallazo sin embargo el error persiste

Saludos !!!

Última edición por nintendito; 11/03/2013 a las 18:08 Razón: typo
  #7 (permalink)  
Antiguo 11/03/2013, 18: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: ¡No se ha definido el índice!

Bien, vamos avanzando.
Estas son, entonces, las tres primeras tablas, que efectivamente, no deberían generar problemas al momento de crear relaciones, en tanto las FK sólo existan en la tabla "tagmap".
Para ello, sería mas o menos así:
Código MySQL:
Ver original
  1. ALTER TABLE `tagmap`
  2.   ADD CONSTRAINT `fk_bookmark` FOREIGN KEY (`bookmark_id` ) REFERENCES `test`.`bookmark` (`id` ) ON DELETE CASCADE ON UPDATE CASCADE,
  3.   ADD CONSTRAINT `fk_tag` FOREIGN KEY (`tag_id` ) REFERENCES `test`.`tag` (`id` ) ON DELETE CASCADE ON UPDATE CASCADE,
  4.   ADD INDEX `fk_bookmark` (`bookmark_id` ASC) ,
  5.   ADD INDEX `fk_tag` (`tag_id` ASC) ;
Esto lo hice directamente en la base, y la relación se creo sin problemas, por lo que si existe algún inconveniente no es debido a la estructura ni la definición de datos.

Ahora bien, en ese mismo primer post, tu mencionas esto:
Cita:
Todo funcionaba perfectamente, hasta que he agregado una cuarta tabla copiando el mismo modelo anterior, con su respectivo mapa, a partir de entonces, ni en la nueva, ni en las anteriores me deja definir las relaciones entre keys
Muestrame cómo sería entonces el create table de esa cuarta tabla, y cómo intentaste crear las FK.
Pero por sobre todo, necesito ver la estructura de esa tabla.

Un tip que si te puedo anticipar es que si la base está actualmente con datos, es altamente probable que haya inconsistencias de datos que no permitan cumplir las restricciones que se intentan poner. Ese es un error muy comú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)
  #8 (permalink)  
Antiguo 11/03/2013, 19:20
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
Respuesta: ¡No se ha definido el índice!

La cuarta tabla ya no existe, cuando empezaron los errores borré todo y empecé de cero otra vez, es decir desde las tres originales que te he pasado.
Lo de los datos lo había probado, con y sin ellos da el mismo error.

Sin embargo, me has mostrado algo que no sabía que podía hacerse. He borrado tagmap y la he creado otra vez pero desde la pestaña SQL con código:

CREATE TABLE tagmap
(
id INT NOT NULL AUTO_INCREMENT,
bookmark_id INT NOT NULL,
tag_id INT NOT NULL,
PRIMARY KEY(id),
INDEX (bookmark_id),
INDEX (tag_id),
FOREIGN KEY (bookmark_id) REFERENCES bookmark(id)ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tag(id)ON DELETE CASCADE ON UPDATE CASCADE
) TYPE = INNODB;

Y parece que ha funcionado (sin haberla probado con datos aún) las relaciones aparecen creadas como muestra el SHOW CREATE

CREATE TABLE `tagmap` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bookmark_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `bookmark_id` (`bookmark_id`),
KEY `tag_id` (`tag_id`),
CONSTRAINT `tagmap_ibfk_1` FOREIGN KEY (`bookmark_id`) REFERENCES
`bookmark` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `tagmap_ibfk_2` FOREIGN KEY (`tag_id`) REFERENCES `tag` (`id`) ON
DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci

Eso sí, en cuanto intento modificarlas, o volverlas a crear desde la interfaz gráfica... ERROR

Última edición por nintendito; 12/03/2013 a las 03:02 Razón: agregar detalles

Etiquetas: phpmyadmin, tabla, tablas
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 01:41.