sql >> データベース >  >> RDS >> PostgreSQL

多言語文字列を保存するためのベストプラクティス

    まず、データベースロケール を確認します。 さまざまな言語を扱うことができます。 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)
    );
    

    ない マスター言語を特別に扱い、すべての言語バリアントを同じテーブルに保持すると、アプリでの処理が簡単になる場合があります。しかし、それは本当にあなたの要件に依存します。




    1. mysqlでのキーセットページネーションのインデックス作成

    2. MySQL5.0ステートメントでlike句を使用する方法

    3. MariaDBでのLN()のしくみ

    4. 別のSELECTの値に基づいてSELECTする方法