Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/03/2013, 10:31
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 2 meses
Puntos: 447
Respuesta: Base de datos para varios idiomas

Hola rafamadrile...

En realidad el modelado de BD no tiene una única respuesta correcta, es decir, depende de muchos factores que debes considerar para poder decir cuál es el modelo que mejor se aplica a tu BD...

Por ejemplo, todas, absolutamente todas tus páginas van a estar en todos los idiomas??? esto rara vez ocurre, por lo que la opción de colocar una columna adicional por cada idioma no sería conveniente, pues muchos de los registros podrían venir como vacíos, lo cual implica un mal diseño de páginas.

Ahora bien, la opción de duplicar las tablas por cada idioma, puede que tampoco sea del todo apropiada, pues si hay características similares entre las páginas, estarías duplicando información...

En este caso hablando en términos de E-R podrías pensar que tus páginas principales (por ejemplo en español) tienen una relación de 0 a n con tus páginas en otro idioma (por ejemplo Inglés) de tal suerte que tendrías que tener dos tablas... una donde almacenes todas las páginas en español y otra donde tengas aquellas que tienen una traducción, de tal manera que tengas algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM paginas_es;
  2. +------+---------------------------------+--------+------------+
  3. | id   | descripcion                     | color  | otro_campo |
  4. +------+---------------------------------+--------+------------+
  5. |    1 | Esto es una pagina en espanol   | azul   |         12 |
  6. |    2 | Esta pagina no tiene traduccion | green  |         17 |
  7. |    3 | Esta pagina tampoco             | red    |         15 |
  8. |    4 | pero esta si                    | yellow |         19 |
  9. +------+---------------------------------+--------+------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM paginas_in;
  13. +------+-----------------------------------+
  14. | id   | descripcion                       |
  15. +------+-----------------------------------+
  16. |    1 | This is a page written in english |
  17. |    4 | and this too                      |
  18. +------+-----------------------------------+
  19. 2 rows in set (0.00 sec)

Así, puedes unir las dos tablas con un LEFT JOIN y listo. Pero te repito, tendrías que analizar bien la información que vas a almacenar.

saludos
Leo.