Qual é a melhor maneira de criar banco de dados multilíngue? Para criar tabela localizada para cada tabela, o design e a consulta são complexos; caso contrário, adicionar colunas para cada idioma é simples, mas não dinâmico, por favor, ajude-me a entender qual é a melhor escolha para aplicativos corporativos
sql
database
database-design
Arsen Mkrtchyan
fonte
fonte
Respostas:
O que fazemos é criar duas tabelas para cada objeto multilíngue.
Por exemplo, a primeira tabela contém apenas dados com neutralidade de idioma (chave primária, etc.) e a segunda tabela contém um registro por idioma, contendo os dados localizados mais o código ISO do idioma.
Em alguns casos, adicionamos um campo DefaultLanguage, para que possamos retornar a esse idioma se nenhum dado localizado estiver disponível para um idioma especificado.
Exemplo:
Com essa abordagem, você pode lidar com quantos idiomas forem necessários (sem precisar adicionar campos adicionais para cada novo idioma).
Atualização (14/12/2014): consulte esta resposta para obter informações adicionais sobre a implementação usada para carregar dados multilíngues em um aplicativo.
fonte
id
: D. Para explicar, cadaid
um representa um significado ao qual você pode anexar palavras de qualquer idioma em uma tabela relacional, para obter duas tabelasmeaning
(id) eword
(id, meaning_id),id
naword
tabela representa a palavra id,id
nameaning
representa o significado que é universal.Eu recomendo a resposta postada por Martin.
Mas você parece estar preocupado com o fato de suas consultas ficarem muito complexas:
Então você deve estar pensando que, em vez de escrever consultas simples como esta:
... você precisaria começar a escrever consultas assim:
Não é uma perspectiva muito bonita.
Mas, em vez de fazê-lo manualmente, você deve desenvolver sua própria classe de acesso ao banco de dados, que pré-analisa o SQL que contém sua marcação de localização especial e o converte no SQL real que você precisará enviar ao banco de dados.
Usar esse sistema pode ser algo como isto:
E tenho certeza que você pode fazer ainda melhor isso.
A chave é ter suas tabelas e campos nomeados de maneira uniforme.
fonte
Acho que esse tipo de abordagem funciona para mim:
A tabela ProductDetail contém todas as traduções (por nome do produto, descrição etc.) nos idiomas que você deseja oferecer suporte. Dependendo dos requisitos do seu aplicativo, convém dividir a tabela País para usar os idiomas regionais também.
fonte
Estou usando a próxima abordagem:
produtos
ProductID OrderID, ...
Informação do produto
ProductID Título Nome LanguageID
Língua
IdiomaID Nome Cultura, ....
fonte
A solução de Martin é muito semelhante à minha, no entanto, como você lidaria com as descrições padrão quando a tradução desejada não for encontrada?
Isso exigiria um IFNULL () e outra instrução SELECT para cada campo?
A tradução padrão seria armazenada na mesma tabela, onde um sinalizador como "isDefault" indica se essa descrição é a descrição padrão, caso não tenha sido encontrada nenhuma para o idioma atual.
fonte