まず、データベースロケール
を確認します。 さまざまな言語を扱うことができます。 UTF-8サーバーエンコーディングを使用します。オプションでLC_COLLATE = 'C'
を設定します 中立的な立場に立つか、母国語の照合を使用してデフォルトの並べ替え順序を設定します。 照合サポート
の章を読むことから始めます。 マニュアルで。
最新バージョンのPostgreSQL(執筆時点では9.1)を使用することを強くお勧めします。これは、優れた照合サポートを備えているためです。
テーブル構造について : 複雑にしないでおく。扱う言語の数が少なく、固定されているようです。次に、各言語の列を作成するだけで済みます。
CREATE TABLE txt (
txt_id serial PRIMARY KEY
,txt text NOT NULL -- master language NOT NULL?
,txt_fr text -- others can be NULL?
,txt_es text
,txt_de text
);
これは、多くの言語でも非常に効果的です。 NULLストレージは非常に安価です。
扱う言語の数が異なる場合は、別のテーブルがより良い解決策になる可能性があります。このソリューションは、文字列が常に存在する「マスター言語」があることを前提としています。
CREATE TABLE txt (
txt_id serial PRIMARY KEY
,txt text NOT NULL -- master language NOT NULL?
);
CREATE TABLE lang (
lang_abbr text PRIMARY KEY -- de, es, fr, ...
,lang text NOT NULL
,note text
);
または、(2文字の)省略形で十分な場合は、enum
タイプ
言語を識別するため。
CREATE TABLE txt_trans (
txt_id int REFERENCES txt(txt_id) ON UPDATE CASCADE ON DELETE CASCADE
,lang_abbr text REFERENCES lang(lang_abbr) ON UPDATE CASCADE
,txt text NOT NULL -- master language NOT NULL?
,CONSTRAINT txt_trans_pkey PRIMARY KEY (txt_id, lang_abbr)
);
ない マスター言語を特別に扱い、すべての言語バリアントを同じテーブルに保持すると、アプリでの処理が簡単になる場合があります。しかし、それは本当にあなたの要件に依存します。