mysql - 用于国际和多语言目的的数据库建模

标签 mysql database database-design internationalization multilingual

我需要为多语言的 Web 应用程序创建一个大规模的 DB 模型。

我每次思考如何做到这一点时都有一个疑问,那就是如何解决一个字段的多个翻译问题。一个案例。

管理员可以从后端编辑的语言级别表可以有多个项目,例如:基本、高级、流利、重要...在不久的将来可能会增加一种类型。管理员去后端添加一个新级别,它会在正确的位置对其进行排序.. 但是我如何处理最终用户的所有翻译?

数据库国际化的另一个问题是,用户研究可能会因美国、英国和德国而异……在每个国家/地区,他们都会有自己的水平(可能与另一个国家等价,但最终不同)。那么计费呢?

您如何进行大规模建模?

最佳答案

这是我设计数据库的方式:

Data model

DB Designer Fork 的可视化

i18n 表只包含一个 PK,因此任何表只需要引用这个 PK 来国际化一个字段。然后,translation 表负责将此通用 ID 与正确的翻译列表相关联。

locale.id_locale 是一个 VARCHAR(5) 来管理 enen_US ISO syntaxes .

currency.id_currency 是一个 CHAR(3) 来管理 ISO 4217 syntax .

您可以找到两个示例:pagenewsletter。这两个 admin-managed 实体都需要国际化他们的字段,分别是 title/descriptionsubject/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

请注意,这是一个规范化的数据模型。如果你有一个庞大的数据集,也许你可以考虑 denormalizing it优化您的查询。您还可以使用索引来提高查询性能(在某些数据库中,外键会自动建立索引,例如 MySQL/InnoDB )。

关于mysql - 用于国际和多语言目的的数据库建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10693508/

相关文章:

sql-server - 根据用户访问级别过滤数据的策略

Java SQL输出格式表结果

database - 在给定半径内搜索相应对象位置的酒店(Gem Geocoder)

java - 当数据跨越多个 block 时如何建模分页

mysql - 计算每个销售代表的佣金

mysql - 对于这种情况,数据库设计的最佳方法是什么

MySQL设计一对多?

mysql - 是否有命令将我的数据库保存到文件夹?

mysql - 如何返回一个表中的所有结果以及另一个表中特定字段的计数?

来自已卸载 XAMPP 的 MySQL 数据库?