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

国際的および多言語目的のデータベースモデリング

    データベースを設計する方法は次のとおりです。

    DBDesignerForkによる視覚化

    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



    1. OracleのSOUNDEX()関数

    2. MySQL-計算列で注文するときのパフォーマンス

    3. MySQL:where句の列'column_name'があいまいです

    4. PythonによるSQLインジェクション攻撃の防止