¿Cuál es la mejor manera de crear una base de datos en varios idiomas? Crear una tabla localizada para cada tabla hace que el diseño y las consultas sean complejas; en otro caso, agregar una columna para cada idioma es simple pero no dinámico, ayúdenme a comprender cuál es la mejor opción para las aplicaciones empresariales
sql
database
database-design
Arsen Mkrtchyan
fuente
fuente
Respuestas:
Lo que hacemos es crear dos tablas para cada objeto multilingüe.
Por ejemplo, la primera tabla contiene solo datos de idioma neutral (clave principal, etc.) y la segunda tabla contiene un registro por idioma, que contiene los datos localizados más el código ISO del idioma.
En algunos casos, agregamos un campo DefaultLanguage, para que podamos recurrir a ese idioma si no hay datos localizados disponibles para un idioma específico.
Ejemplo:
Con este enfoque, puede manejar tantos idiomas como sea necesario (sin tener que agregar campos adicionales para cada nuevo idioma).
Actualización (14/12/2014): consulte esta respuesta para obtener información adicional sobre la implementación utilizada para cargar datos multilingües en una aplicación.
fuente
id
: D. Para explicar, cada unoid
representa un significado al que puede adjuntar palabras de cualquier idioma en una tabla relacional, por lo que obtiene dos tablas,meaning
(id) yword
(id, meaning_id),id
en laword
tabla representa la palabra id, elid
en elmeaning
representa El significado es universal.Recomiendo la respuesta publicada por Martin.
Pero parece que le preocupa que sus consultas se vuelvan demasiado complejas:
Por lo tanto, podría estar pensando que, en lugar de escribir consultas simples como esta:
... tendrías que empezar a escribir consultas así:
No es una perspectiva muy bonita.
Pero en lugar de hacerlo manualmente, debe desarrollar su propia clase de acceso a la base de datos, que analiza previamente el SQL que contiene su marcado de localización especial y lo convierte al SQL real que deberá enviar a la base de datos.
Usar ese sistema podría verse más o menos así:
Y estoy seguro de que puedes hacerlo aún mejor.
La clave es tener sus tablas y campos nombrados de manera uniforme.
fuente
Creo que este tipo de enfoque funciona para mí:
La tabla ProductDetail contiene todas las traducciones (para el nombre del producto, la descripción, etc.) en los idiomas que desea admitir. Dependiendo de los requisitos de su aplicación, es posible que desee desglosar la tabla de países para usar también idiomas regionales.
fuente
Estoy usando el siguiente enfoque:
Producto
ProductID OrderID, ...
Información del producto
ProductID Título Nombre LanguageID
Idioma
ID de idioma Nombre Cultura, ....
fuente
La solución de Martin es muy similar a la mía, sin embargo, ¿cómo manejaría las descripciones predeterminadas cuando no se encuentra la traducción deseada?
¿Eso requeriría un IFNULL () y otra instrucción SELECT para cada campo?
La traducción predeterminada se almacenaría en la misma tabla, donde un indicador como "isDefault" indica si esa descripción es la descripción predeterminada en caso de que no se haya encontrado ninguna para el idioma actual.
fuente