データベースを設計する方法は次のとおりです。
i18n
テーブルにはPKのみが含まれているため、フィールドを国際化するには、どのテーブルもこのPKを参照する必要があります。テーブルtranslation
次に、この汎用IDを正しい翻訳リストにリンクする責任があります。
locale.id_locale
VARCHAR(5)
です en
の両方を管理する およびen_US
ISO構文
。
currency.id_currency
CHAR(3)
です ISO4217構文
を管理する 。
2つの例を見つけることができます:page
およびnewsletter
。これらの両方の管理者 エンティティは、それぞれのフィールドを国際化する必要がありますtitle/description
およびsubject/content
。
クエリの例を次に示します。
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
これは正規化されたデータモデルであることに注意してください。巨大なデータセットがある場合は、非正規化 について考えることができます。 クエリを最適化します。インデックスを操作してクエリのパフォーマンスを向上させることもできます(一部のDBでは、外部キーが自動的にインデックスに登録されます。例: MySQL / InnoDB 。