sql >> Databáze >  >> RDS >> Mysql

Databázové modelování pro mezinárodní a vícejazyčné účely

Zde je způsob, jakým bych navrhl databázi:

Vizualizace od DB Designer Fork

i18n tabulka obsahuje pouze PK, takže každá tabulka musí k internacionalizaci pole pouze odkazovat na tento PK. Tabulka translation má potom na starosti propojení tohoto obecného ID se správným seznamem překladů.

locale.id_locale je VARCHAR(5) pro správu obou en a en_US Syntaxe ISO .

currency.id_currency je CHAR(3) ke správě syntaxe ISO 4217 .

Můžete najít dva příklady:page a newsletter . Obě tyto položky jsou spravovány správcem entity potřebují internacionalizovat svá pole, respektive title/description a subject/content .

Zde je příklad dotazu:

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

Všimněte si, že se jedná o normalizovaný datový model. Pokud máte obrovskou datovou sadu, možná byste mohli přemýšlet o denormalizaci pro optimalizaci vašich dotazů. Můžete si také pohrát s indexy, abyste zlepšili výkon dotazů (v některých DB jsou cizí klíče indexovány automaticky, např. MySQL/InnoDB ).



  1. Získejte zřetelný součet spojeného sloupce tabulky

  2. MySQL JOIN pouze k nejnovějšímu řádku?

  3. Mysql vybrat odlišné

  4. MariaDB se po aktualizaci nemůže spustit:[Upozornění] Nelze vytvořit testovací soubor /home/mysql/beta.lower-test