Pergunta

Suponha que eu tenha uma tabela com as seguintes colunas (uma lista de palavras):

word: varchar
contributor: integer (FK)

Agora, suponha que eu quisesse ter traduções para cada "palavra". O que seria melhor? Tendo uma segunda tabela?

word: integer (FK)
translation: varchar
contributor: integer (FK)
lang: integer (FK)

Ou tudo na mesma mesa?

word: varchar
translation_for: integer (FK - to the same table)
contributor: integer (FK)
lang: integer (FK)

Suponha que dois cenários, (1) onde eu preciso puxar uma palavra traduzida junto com a palavra original de que foi traduzida, (2) onde eu preciso puxar a palavra traduzida. Nos dois cenários, eu usaria as palavras "originais" muito mais fortemente (ambas Selecionando e Atualização/inserção).

Então, que abordagem seria melhor para cada cenário, ou em geral? Estou inclinado para a primeira abordagem, desde então meu "padrão" seleciona não terá que ser qualificado pelo Lang coluna. O que você acha?

Obrigado!

Foi útil?

Solução

Eu acho que você machucará mais tarde se quiser adicionar um idioma mais tarde, se não normalizar o banco de dados agora. Tenha uma tabela de palavras onde a palavra está no idioma padrão. Tem um ID. Tenha uma tabela de idiomas com um ID (ou seja, espanhol, 2), e uma tabela de tradução que tem a palavra ID, o ID do idioma e, finalmente, a palavra real nesse idioma. Esta é a tabela vinculada.

Use uma visualização para suas consultas, mas para inserções e atualizações, dependendo do seu DBMS, você pode precisar de consultas difíceis.

Isso é apenas assumir que você está tentando fornecer localização e, portanto, provavelmente adicionará mais idiomas posteriormente. Fazer dessa maneira é mais fácil do que ter que modificar seu banco de dados para adicionar colunas sempre que você adicionar um idioma. Se você realmente precisar apenas de uma tradução e duvidar muito de que precisará de outra, apenas adicionar a coluna ficaria bem.

Outras dicas

Como você parece querer que uma "palavra" tenha uma identidade separada de uma "palavra traduzida", acho que a primeira opção atende melhor às suas necessidades.

Normalmente, eu acho que um design mais como:

PK (Key (varchar), Lang (FK)), Word (nvarchar)

Seria mais apropriado - quando você se refere apenas ao texto por sua chave e valor Lang. Mas parece que você está substituindo a tecla pela "palavra original" - para que a torne um pouco diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top