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

我需要为多语言的Web应用程序创建大型数据库模型。

每次我想如何做到这一点时,我都怀疑我是如何解决为一个领域进行多次翻译的。 一个案例。

管理员可以从后端编辑的语言级别表可以包含多个项目,如:basic,advance,fluent,mattern ...在不久的将来,它可能会是另一种类型。 管理员进入后端并添加一个新的级别,它会将其排序在正确的位置..但我如何处理最终用户的所有翻译?

数据库国际化的另一个问题是,用户研究可能会有所不同,从美国到英国到德国......在每个国家,他们将有他们的水平(这可能会相当于另一个,但最后,不同)。 那么结算呢?

你如何在一个大规模的模型?


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

数据模型

DB Designer Fork的可视化

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

locale.id_locale是一个VARCHAR(5)来管理enen_US ISO语法。

currency.id_currency是用于管理ISO 4217语法的CHAR(3)

你可以找到两个例子: pagenewsletter 。 这两个管理员管理的实体都需要国际化其字段,分别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

请注意,这是一个标准化的数据模型。 如果你有一个巨大的数据集,也许你可以考虑对它进行非规范化来优化你的查询。 您还可以使用索引来提高查询性能(在某些数据库中,外键会自动编入索引,例如MySQL / InnoDB)。


关于此主题的一些以前的StackOverflow问题:

  • 为多语言网站设计数据库模式
  • 什么是多语言数据库设计的最佳实践?
  • 什么是保持多语言数据的最佳数据库结构?
  • 多语言数据库的架构
  • 如何在ORM中使用多语言数据库模式?
  • 一些有用的外部资源:

  • 创建多语言网站:数据库设计
  • 多语言数据库设计方法
  • 推动获得国际行为,为什么它很重要
  • 最好的方法是,对于每个现有的表格,创建一个新的表格,将文本项目移动到该表格中; 新表的PK是旧表的PK和语言一起的。

    在你的情况下:

  • 管理员可以从后端编辑的语言级别表可以包含多个项目,如:basic,advance,fluent,mattern ...在不久的将来,它可能会是另一种类型。 管理员进入后端并添加一个新的级别,它会将其排序在正确的位置..但我如何处理最终用户的所有翻译?

    你现有的表格可能看起来像这样:

    +----+-------+---------+
    | id | price | type    |
    +----+-------+---------+
    |  1 |   299 | basic   |
    |  2 |   299 | advance |
    |  3 |   399 | fluent  |
    |  4 |     0 | mattern |
    +----+-------+---------+
    

    然后它变成两张表格:

    +----+-------+   +----+------+-------------+
    | id | price |   | id | lang | type        |
    +----+-------+   +----+------+-------------+
    |  1 |   299 |   |  1 | en   | basic       |
    |  2 |   299 |   |  2 | en   | advance     |
    |  3 |   399 |   |  3 | en   | fluent      |
    |  4 |     0 |   |  4 | en   | mattern     |
    +----+-------+   |  1 | fr   | élémentaire |
                     |  2 | fr   | avance      |
                     |  3 | fr   | couramment  |
                     :    :      :             :
                     +----+------+-------------+
    
  • 数据库国际化的另一个问题是,用户研究可能不同于美国,英国和德国......在每个国家,他们都有自己的水平(可能会相当于另一个国家,但最后会有所不同)。 那么结算呢?

    所有本地化都可以通过类似的方法进行。 不仅仅是将文本字段移动到新表中,您可以移动任何可本地化的字段 - 只有那些对所有语言环境通用的字段才会保留在原始表中。

  • 链接地址: http://www.djcxy.com/p/37443.html

    上一篇: Database modeling for international and multilingual purposes

    下一篇: Entity Framework with Multiple MySQL Databases