entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

Normalizando base de datos con 12,300 registros (continuación)

Bien ahora les adjunto la estructura de mi base de datos para explicar mejor lo que pretendo hacer y cual es mi duda en cuestión

Esta es la estructura de la tabla catálogos originalmente, pero con un idautoincrement que le agregue pues no lo tenia,muestro varios campos que son los primeros pero como ya había comentado a la derecha hay otros 20 y tantos mas,pero se que con esto que me ayuden después yo solo podre tomar todos los demás campos que necesite

Tabla catálogos

https://www.dropbox.com/s/kde2t5d2s0xjhzn/1.png

Si se dan cuenta los autores, tipos y subtipos se repiten por lo que decidí crearme una tabla de autores, tipos, y subtipos, esto con la ayuda de mi colega @gderas2 :)

Tabla autores

https://www.dropbox.com/s/rf6k64hscurq6p6/2.png

Tabla tipos

https://www.dropbox.com/s/fhw7sphin8ge8bg/3.png

Ahora si con esta información que les proporciono, como hago poner en mi tabla catálogos el id del autor que le corresponde, así como el id de tipo???, espero esto ayude @Leonardo-Tadei :)

Saludos!!!

1 Respuesta

3votos

Leonardo-Tadei Puntos227320

Hola iPHP,

Tenés una tabla Catalogos con la estructura del sistema anterior, que es la que querés migrar al sistema nuevo que está normalizado (te falta una tabla para los subtipos de bien todavía para que esté bien normalizado..

Lo que tenés que hacer primero es crear una tabla para el Catalogo en tu nuevo sistema. La estructura sería

Tabla Catalogo_nuevo
id
num_inv
num_cat (no entiendo qué es este dato así que puede variar)
otro_num
id_tipo_bien
id_subtipo_bien
titulo
id_autor

Luego tendrás que hacer un script de migración. El algoritmo para migrar sería:

Mientras (r = registro_catalogo) {
  tipo_bien = r[tipobien]
  buscar tipo_bien en tabla tipos_bien
  si existe, obtener id_tipobien
  sino, insertarlo y obtener id_tipobien.

  // lo mismo para autores
  ...
   // lo mismo para subtipos
  ...
  // insertar el registro del nuevo catalogo
  insertar en Catalogo_nuevo (r[num_inv], r[num_cat], r[otro_num], id_tipobien, id_subtipobien, r[titulo], id_autor)
}

Fijate que en la inserción del registro del Catálogo con su estructura normalizada, le ponés los datos que le son propios de registro de la tabla original, y le ponés los ID que hace referencia a las entidades de las nuevas tablas.

Por la estructura que mostrás, el id_subtipo_bien puede ser nulo, pero todos los demás ID tienen que ser no nulos.

Esta es una tarea muy habitual al hacer sistemas nuevos y que tomen datos de sistemas anteriores que no cumplan con la normalización: hay que construir uno o varios scripts que migren los datos de la estructura vieja a la nueva. Luego, en el nuevo sistema, solo quedarán funcionando las nuevas estructuras de datos.

Saludos cordiales!

0voto

jenchi comentado

y como te fue con el script, en donde lo hiciste ya que yo tmb quiero hacer uno pero no se por donde empezar. podrias pasarme un ejemplo y yo adaptarlo

0voto

Leonardo-Tadei comentado

Hola @jenchi,

podrías basarte en el pseudocódigo que pongo al principio de la respuesta y adaptarlo a tus necesidades. La lógica del problema es la misma!

0voto

iphp comentado

Que tal @jenchi como ya lo ha dicho @Leonardo-Tadei, puedes usar el pseudocodigo que me sugirió, o si con eso aun tienes dudas, dime y con gusto te ayudare!

0voto

jenchi comentado

El pseudocodigo si lo entiendo lo que todavia no se como implementarlo, en php o se puede hacer con un script en mysql. por decia y tu tenias un ejemplo ya en codigo.

0voto

iphp comentado

De acuerdo, mira, la sugerencia que me sugirio leonardo me fue útil para utilizar la siguiente sentencia:

SELECT bienes_materiales.id_bien, bienes_materiales.num_inv,bienes_materiales.id_cat bienes_materiales.otro_num, bienes_materiales.tipo_bien, 

bienes_materiales.subtipo_bien, bienes_materiales.titulo, autores.id_autor

Lo que yo necesitaba era migrar los datos que ya tenia en una base de datos al nuevo diseño que hice, la sentencia anterior me une los datos y sustituye los valores del nombre del autor por el id que le corresponde, después creas una tabla con esa misma sentencia y ya tienes todos lo valores en una nueva tabla con los datos correspondientes.

Espero y si sea la misma situación y eso te funcione.

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta