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

Problema con los índices

Estas en el tema de Problema con los índices en el foro de Mysql en Foros del Web. Hola. Estoy haciendo un programa intranet con html, php y mysql. Tal como me expusieron la situación, elegí unas tablas, con unos índices e incluso ...
  #1 (permalink)  
Antiguo 27/08/2013, 05:12
Avatar de replica  
Fecha de Ingreso: noviembre-2004
Mensajes: 68
Antigüedad: 19 años, 5 meses
Puntos: 2
Problema con los índices

Hola.

Estoy haciendo un programa intranet con html, php y mysql.

Tal como me expusieron la situación, elegí unas tablas, con unos índices e incluso realicé un diseño de relaciones entre tablas.

Comienzo a programar, y unas semanas más tarde me dicen que hay que tener otro asunto en cuenta. Este asunto afecta, por índices y claves foráneas, a otras tablas, por lo que hay que modificar una parte del sistema, que afecta a varias tablas.

Pues el caso es que no puedo relacionar las tablas, me da problemas (phpmyadmin no me dice cuál. He pensado que eran por integridad referencial, así que he intentado borrar claves que ya tenía, para intentar incluir las nuevas.

Pues no puedo borrar las claves antiguas, esta vez sí me dice que es por integridad referencial.

Necesito alguna forma de cargarme todas las relaciones de todas las tablas, incluso la definición de las claves primarias (me jode, pero me aguanto), para hacerlas todas desde 0.

¿Alguien puede echarme una mano?
  #2 (permalink)  
Antiguo 27/08/2013, 09:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con los índices

Hola replica:

Lamentablemente, no hay mucho para ayudarte sin saber tu modelo y cómo afectan los nuevos cambios que tienes que introducir a la BD... sin embargo, algunos tips:

primero:

Cita:
Pues el caso es que no puedo relacionar las tablas, me da problemas (phpmyadmin no me dice cuál.
puedes comenzar por cambiar de IDE, es decir, si phpmyadmin es el problema, entonces has las modificaciones con otros administradores (Workbench, SQLYog, o mejor aun, directamente en una consola de MySQL)... de esta manera es posible que obtengas más información acerca del error que está ocurriendo.

Segundo:

Cita:
sí que he intentado borrar claves que ya tenía, para intentar incluir las nuevas.

Pues no puedo borrar las claves antiguas, esta vez sí me dice que es por integridad referencial.
Una alternativa efectivamente es borrar todas las referencias y los índices para comenzar de "cero", pero si tienes información en tus tablas, debes tener cuidado en el orden en que eliminas estos índices y referencias... así, si tienes una dos tablas maestro-detalle, con una referencia FK, lo que tienes que hacer es eliminar primero la referencia FK de tu tabla detalle y en seguida borrar el índice de tu tabla maestro. Si intentas borrar en primer lugar tu índice de la tabla Maestro, entonces te marcará error de integridad.

Tercero:

Código MySQL:
Ver original
  1. Necesito alguna forma de cargarme todas las relaciones de todas las tablas, incluso la definición de las claves primarias (me jode, pero me aguanto), para hacerlas todas desde 0.

Serenidad y paciencia, y mucho cuidado con el uso del lenguaje... en algunos países de latinoamérica tal como te expresas es realmente ofensivo, ojo con eso... Insisto en lo que puse arriba, si ya tienes información en tus tablas y no quieres perder esta información, entonces el proceso de modificar tu modelo puede resultar bastante complicado.

La solución más simple sería:

1. Borrar en primer lugar toda la información de tus tablas, sobre todo la de aquellas que tienen relaciones de llave foránea

2. Borrar (si es necesario) las restricciones FK de estas tablas.

3. Borrar (si es necesario) las restricciones PK de las tablas.

4. Incluir los nuevos índices

5. Reconstruir las restricciones de FK.

6. Cargar nuevamente los datos a tus tablas.

Ahora bien, si no quieres (o no puedes) borrar la información de tus tablas, otra opción es que manejes un esquema "alterno" donde coloques las nuevas restricciones-relaciones. Una vez que tengas el modelo alterno ya modificado y con todas las restricciones-relaciones, entonces intentar "vaciar" el contenido de tu modelo viejo en el nuevo... cuidando por supuesto las nuevas restricciones de integridad... esto te puede llevar un tiempo, pero una vez que lo hagas, simplemente borras tu esquema viejo y renombras tus tablas...

Es un camino largo, pero igual y te puede ayudar.

Saludos
Leo.
  #3 (permalink)  
Antiguo 28/08/2013, 01:34
Avatar de replica  
Fecha de Ingreso: noviembre-2004
Mensajes: 68
Antigüedad: 19 años, 5 meses
Puntos: 2
Respuesta: Problema con los índices

Cita:
Iniciado por leonardo_josue Ver Mensaje

Una alternativa efectivamente es borrar todas las referencias y los índices para comenzar de "cero", pero si tienes información en tus tablas, debes tener cuidado en el orden en que eliminas estos índices y referencias... así, si tienes una dos tablas maestro-detalle, con una referencia FK, lo que tienes que hacer es eliminar primero la referencia FK de tu tabla detalle y en seguida borrar el índice de tu tabla maestro. Si intentas borrar en primer lugar tu índice de la tabla Maestro, entonces te marcará error de integridad.
Por suerte, aún estoy programando, y el sistema no está en producción, así que no hay ningún registro. De todas maneras, lo primero que intenté es lo que dices, borrar las FK para no tener atadas las PK, pero es que no me deja borrar las FK, y, como digo, ni siquiera me advierte el por qué.

Cita:

Tercero:

Código MySQL:
Ver original
  1. Necesito alguna forma de cargarme todas las relaciones de todas las tablas, incluso la definición de las claves primarias (me jode, pero me aguanto), para hacerlas todas desde 0.

Serenidad y paciencia, y mucho cuidado con el uso del lenguaje... en algunos países de latinoamérica tal como te expresas es realmente ofensivo, ojo con eso...
Siento que te ofenda. Aquí en España también son palabras malsonantes, pero están muy arraigadas y se usan con naturalidad. De todas formas, no me excuso.

Cita:
La solución más simple sería:

1. Borrar en primer lugar toda la información de tus tablas, sobre todo la de aquellas que tienen relaciones de llave foránea

2. Borrar (si es necesario) las restricciones FK de estas tablas.

3. Borrar (si es necesario) las restricciones PK de las tablas.

4. Incluir los nuevos índices

5. Reconstruir las restricciones de FK.

6. Cargar nuevamente los datos a tus tablas.

Ahora bien, si no quieres (o no puedes) borrar la información de tus tablas, otra opción es que manejes un esquema "alterno" donde coloques las nuevas restricciones-relaciones. Una vez que tengas el modelo alterno ya modificado y con todas las restricciones-relaciones, entonces intentar "vaciar" el contenido de tu modelo viejo en el nuevo... cuidando por supuesto las nuevas restricciones de integridad... esto te puede llevar un tiempo, pero una vez que lo hagas, simplemente borras tu esquema viejo y renombras tus tablas...

Es un camino largo, pero igual y te puede ayudar.

Saludos
Leo.
Gracias por tu respuesta, por desgracia eso es lo que quería evitar XD. Me puede llevar toda la mañana hacer el cambio, y eso que el diseño no es muy grande.

Etiquetas: php, 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 08:27.