Localização de banco de dados
Eu tenho um número de tabelas de banco de dados que contêmname
edescription
colunas que precisam ser localizadas. Minha tentativa inicial de projetar um esquema de banco de dados que suportaria isso era algo como:
product
-------
id
name
description
local_product
-------
id
product_id
local_name
local_description
locale_id
locale
------
id
locale
No entanto, esta solução requer um novolocal_
tabela para cada tabela que contenhaname
e colunas de descrição que exigemlocalization
. Em uma tentativa de evitar essa sobrecarga, eu redesenhei o esquema para que apenaslocalization
mesa é necessária
product
-------
id
localization_id
localization
-------
id
local_name
local_description
locale_id
locale
------
id
locale
Aqui está um exemplo dos dados que seriam armazenados neste esquema quando há duas tabelas (produto e país) que requerem localização:
país
id, localization_id
-----------------------
1, 5
produtos
id, localization_id
-----------------------
1, 2
localização
id, local_name, local_description, locale_id
------------------------------------------------------
2, apple, a delicious fruit, 2
2, pomme, un fruit délicieux, 3
2, apfel, ein köstliches Obst, 4
5, ireland, a small country, 2
5, irlande, un petite pay, 3
localidade
id, locale
--------------
2, en
3, fr
4, de
Observe que a chave primária composta dolocalization
mesa é(id, locale_id)
, mas a chave estrangeira noproduct
tabela refere-se apenas ao primeiro elemento deste composto PK. Isso parece "uma coisa ruim" do ponto de vista da normalização.
Existe alguma maneira de corrigir esse problema ou, alternativamente, existe um esquema completamente diferente que suporte a localização sem criar uma tabela separada para cada tabela localizável?
Atualizar: Vários entrevistados propuseram uma solução que requer a criação de uma tabela separada para cada tabela localizável. No entanto, isso é precisamente o que estou tentando evitar. O esquema que eu propus acima quase resolve o problema para minha satisfação, mas estou insatisfeito com o fato de que olocalization_id
chaves estrangeiras referem-se apenas a parte da chave primária correspondente nolocalization
mesa.
Obrigado, don