Bases de Datos - Diseño de bases de datos para sitios multiidioma

 
Vista:

Diseño de bases de datos para sitios multiidioma

Publicado por Ruben (1 intervención) el 06/08/2008 12:43:19
Buenos días foreros

Estoy desarrollando un proyecto web con la típica opción de multidioma (para q nos entendamos: banderitas para poder cambiar de idioma) Y tengo algunas dudas
respecto al posible mejor diseño para la base de datos que contendrá está información. Os pongo un ejemplo de una entidad sujeta a la característica de multilenguaje

entidad: articulo
campo id_articulo
campo titulo_articulo
campo contenido_articulo
campo imagen

cual sería la mejor forma de diseñar esta tabla y otras similares? duplicando los campos sujetos a la característica de multidioma (es decir: titulo_articulo_fr, titulo_articulo_eng, etc)? o sacando esta información a otras tablas? Supongo uno de los criterios a la hora de tomar este tipo de decisiones es futura y posible escalabilidad del sistema (es decir: más adelante se implementarán más idiomas, no?) es recomendable crear una tabla con los posibles idiomas en la BBDD?

En fin, me surgen muchas preguntas respecto al tema y si me pudieseis facilitar un pequeño tutorial o un par de ejemplos de implementación para ver las posibilidades os estaría muy agradecido

un saludo y gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Diseño de bases de datos para sitios multiidiom

Publicado por pacopaz (7 intervenciones) el 08/08/2008 19:03:16
Creo que lo más fácil sería generar un catálogo de idiomas en una tabla:
entidad: Idioma
campo: id_idioma
campo: nombre

Y que cada tabla donde requierás este tipo de traducción tuviera solo las descripciones adicionales, como contenido, cantidad y demás, que no cambiarán para cualquier idioma y definir una tabla que relacione los idiomas con sus textos descriptivos. Algo como este ejemplo:

entidad: Articulo
campo: id_articulo
campo: cantidad
campo: precio
campo: disponible
...

entidad: Textos
campo: id_idioma
campo: id_tabla
campo: tabla
campo: nombre
campo: descripcion

Así, podrías tener información consistente y, lo más importante, sin duplicidad. Así, los queries se formarían, por ejemplo, para el idioma 1:

select
t.nombre, t.descripcion, a.cantidad, a.precio, a.disponible
from
Idioma i inner join Textos t on i.id_idioma = t.id_idioma
inner join Articulo a on a.id_articulo = t.id_tabla and t.tabla = 'A'
where
...

Agrego el campo 'tabla' a la tabla 'Textos' para que sean los textos en forma general para todas las tablas y que en este campo se defina a que tabla te refieres. En este caso estoy suponiendo que t.tabla = 'A' define sólo los textos para la tabla 'Articulos', pero esto depende de ti.

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar