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

Plantear Base de datos para multiples idiomas

Estas en el tema de Plantear Base de datos para multiples idiomas en el foro de Mysql en Foros del Web. Hola, tengo que crear una base de datos para idiomas. Tengo una tabla principal llamada: PRODUCTOS Que tiene: IDPRODUCTO PRECIO DATO1 DATO2 DATO3 Y luego ...
  #1 (permalink)  
Antiguo 24/05/2013, 08:16
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 15 años, 11 meses
Puntos: 3
Plantear Base de datos para multiples idiomas

Hola, tengo que crear una base de datos para idiomas.

Tengo una tabla principal llamada:
PRODUCTOS
Que tiene:
IDPRODUCTO
PRECIO
DATO1
DATO2
DATO3


Y luego tengo otra segunda tabla llamada
DESCRIPCIONESPRODUCTOS
Que tiene:
IDPRODUCTO
NOMBRE -> varchar
DESCRIPCION -> text

La cuestion es que voy a tener al menos 10 idiomas al inicio, y en el futuro seran unos 20 a 25.

El campo que va a estar traducido es el de DESCRIPCION, ya que el nombre no cambiara.

Puedo hacerlo de 2 formas:
1) En DESCRIPCIONESPRODUCTOS añadir un campo IDIOMA, y repetir cada fila en su idioma.
Con esto si tengo 100.000 productos, y tengo 10 idiomas, quiere decir que tendre 1.000.000 de filas o registros...

2) Puedo aladir mas campos, por idioma:
IDPRODUCTO
NOMBRE -> varchar
DESCRIPCION -> text
DESCRIPCIONIDIOMA2 -> text
DESCRIPCIONIDIOMA3 -> text
DESCRIPCIONIDIOMA4 -> text
DESCRIPCIONIDIOMA5 -> text
DESCRIPCIONIDIOMA6 -> text
DESCRIPCIONIDIOMA7 -> text
DESCRIPCIONIDIOMA8 -> text
DESCRIPCIONIDIOMA9 -> text
etc...

Cual me decis que es la mejor forma???

Saludos!!! y GRACIAS!
  #2 (permalink)  
Antiguo 24/05/2013, 10:15
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Plantear Base de datos para multiples idiomas

Hola Pentaxeros:

En realidad no hay una respuesta "correcta" o una "mejor" solución a tu problema... el detalle está en tu lógica de negocio pero hagamos algunos planteamientos.

¿Absolutamente todos los productos van a tener una traducción a todos los idiomas? Si tu respuesta es si... bueno, entonces si podrías pensar en que la opción 2 es la correcta, sin embargo esto difícilmente suele suceder. Además en tu post hablas de que de entrada estarías hablando de 10 idiomas, pero que en un futuro podrías incrementar a 20 o 25... ¿quién te indica que no serían después 30, o 40 idiomas? es decir, estás hablando de que no tienes idea de en realidad cuantos idiomas vas a tener...

De entrada podrías decir, ok, coloco 25 campos por los posibles 25 idiomas que posiblemente voy a tener, pero ¿Qué vas a colocar mientras haces las traducciones? ¿Valores en NULL?, ¿o la misma descripción que en español? cualquiera de las dos respuestas iría en contra de la teoría de modelos E-R, pues NO DEBE HABER CAMPOS NULOS en una tabla NI CAMPOS DUPLICADOS.

En lo particular creo que la mejor opción es la de manejar n tablas, una para cada idioma que quieres implementar... la relación entre las tablas sería 1 a 1, pero no habría desperdicio... podrías pensar que el manejar 100 mil registros o 1 millón de registros sería demasiado, pero en realidad no lo es tanto si tienes también un buen manejo de índices y llaves foráneas.

Insisto, cualquiera de las dos opciones que planteas puede ser la correcta, todo depende en realidad de tu lógica de negocio.

Saludos
Leo.
  #3 (permalink)  
Antiguo 24/05/2013, 11:06
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Plantear Base de datos para multiples idiomas

Hola, lo primero gracias.

Lo de traducir, SI se van a traducir a todos los idiomas simultaneamente, y en Google estaran dadas de alta todas las versiones de la pagina en todos los idiomas, por lo que para indexar, tienen que estar 100% traducidos TODOS...

Con eso en mente, crees que la segunda opción es la mejor?

Porque podría plantear inicialmente 20 columnas de idiomas, y en el futuro, podría añadir mas? O seria un problema hacer un ALTER y añadir mas columnas cuando sea muy grande?

Saludos!
  #4 (permalink)  
Antiguo 24/05/2013, 14:33
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Plantear Base de datos para multiples idiomas

Hola de nuevo Pentaxeros:

Cita:
podría plantear inicialmente 20 columnas de idiomas, y en el futuro, podría añadir mas? O seria un problema hacer un ALTER y añadir mas columnas cuando sea muy grande?
Eso depende de la manera en que programas... Por lo general, agregar una columna a una tabla podría implicar necesariamente hacer modificaciones a tus páginas o programas... mientras que agregar una nueva tabla no tendría por qué afectar en nada lo que tienes hecho...

La razón es muy sencilla, al hacer un CRUD (Create, Read, Update, Delete) tendrías que tomar en cuenta esa nueva columna, lo que implicaría tener que modificar toda la lógica para los procesos que necesitan de esa tabla... en un ambiente productivo esto puede ser bastante costoso, pues corres el riesgo de echar a perder algo que ya está probado...

Sin embargo, si optas por la opción de agregar una tabla nueva por cada idioma, bueno, esto implicaría tener que agregar nuevas páginas, pero este cambio NO AFECTARÍA TODO LO QUE YA ESTÁ HECHO. es decir, el impacto sobre el ambiente productivo sería mínimo.

Insisto otra vez con el punto que marqué desde el inicio, no hay una mejor solución a tu problema... todo depende de tu lógica de negocio. Depende también en gran medida en el acoplamiento que existe entre tu capa de negocios y la capa de datos...

Saludos
Leo.
  #5 (permalink)  
Antiguo 27/05/2013, 07:03
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Plantear Base de datos para multiples idiomas

A nivle de programacion no es problema, ya que los campos de idiomas los voy a plantear por numero digamos

ID
TITULO
1
2
3
4
5
6
7
8
etc...

Y luego en otra tabla IDIOMAS que tendria
1 español
2 ingles
3 frances
... etc

Y para insertar crear, etc me basaria en la tabla IDIOMAS.


Lo que estoy viendo es que es una tonteria lo que tengo planteado actualmente, con 2 tablas
Tabla PRODUCTOS
Que tiene:
IDPRODUCTO
PRECIO
DATO1
DATO2
DATO3

Y luego tabla
DESCRIPCIONESPRODUCTOS
Que tiene:
IDPRODUCTO
NOMBRE -> varchar
1 -> text
2 -> text
3 -> text

Porque tengo que estar realizando INNER JOIN.

Con este planteamiento, que una columna por idioma, creeis que es mejor que las fusione en una sola tabla???
Lo digo porque el 99% de las consultas necesitare datos de ambas tablas, de la tabla PRODUCTOS y de la TABLA DESCRIPCIONESPRODUCTOS

Etiquetas: campo, idiomas, multiples, registros, 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:34.