Mysql
 sql >> база данни >  >> RDS >> Mysql

Моделиране на бази данни за международни и многоезични цели

Ето как бих проектирал базата данни:

Визуализация от DB Designer Fork

i18n таблицата съдържа само PK, така че всяка таблица просто трябва да препраща към този PK, за да интернационализира поле. Таблицата translation след това отговаря за свързването на този общ идентификатор с правилния списък с преводи.

locale.id_locale е VARCHAR(5) да управлявате и двете en и en_US ISO синтаксис .

currency.id_currency е CHAR(3) за управление на синтаксиса на ISO 4217 .

Можете да намерите два примера: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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо MySQL ще изпълни връщане None?

  2. MySQL:Голям VARCHAR срещу TEXT?

  3. Хибернация:объркване на самостоятелно присъединяване?

  4. Как да затворя sqlalchemy връзка в MySQL

  5. Върнете булева от PHP файл към AJAX - бутон Следвайте