Zde je způsob, jakým bych navrhl databázi:

Vizualizace od DB Designer Fork
i18n tabulka obsahuje pouze PK, takže každá tabulka musí k internacionalizaci pole pouze odkazovat na tento PK. Tabulka translation má potom na starosti propojení tohoto obecného ID se správným seznamem překladů.
locale.id_locale je VARCHAR(5) pro správu obou en a en_US Syntaxe ISO
.
currency.id_currency je CHAR(3) ke správě syntaxe ISO 4217
.
Můžete najít dva příklady:page a newsletter . Obě tyto položky jsou spravovány správcem entity potřebují internacionalizovat svá pole, respektive title/description a subject/content .
Zde je příklad dotazu:
select
t_subject.tx_translation as subject,
t_content.tx_translation as content
from newsletter n
-- join for subject
inner join translation t_subject
on t_subject.id_i18n = n.i18n_subject
-- join for content
inner join translation t_content
on t_content.id_i18n = n.i18n_content
inner join locale l
-- condition for subject
on l.id_locale = t_subject.id_locale
-- condition for content
and l.id_locale = t_content.id_locale
-- locale condition
where l.id_locale = 'en_GB'
-- other conditions
and n.id_newsletter = 1
Všimněte si, že se jedná o normalizovaný datový model. Pokud máte obrovskou datovou sadu, možná byste mohli přemýšlet o denormalizaci pro optimalizaci vašich dotazů. Můžete si také pohrát s indexy, abyste zlepšili výkon dotazů (v některých DB jsou cizí klíče indexovány automaticky, např. MySQL/InnoDB ).