データベースを設計する方法は次のとおりです。
DB Designer Forkによる可視化
テーブルにはi18n
PK のみが含まれているため、どのテーブルもこの PK を参照してフィールドを国際化する必要があります。テーブルtranslation
は、この汎用 ID を正しい翻訳リストにリンクする役割を果たします。
locale.id_locale
とISO 構文VARCHAR(5)
の両方を管理するためのen
です。en_US
currency.id_currency
ISO 4217 構文CHAR(3)
を管理するためのものです。
との 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などのように外部キーが自動的にインデックス化されます)。