【问题标题】:MySQL Multi-lingual Database Design (multi-table vs. multi-column)MySQL 多语言数据库设计(多表 vs. 多列)
【发布时间】:2020-11-25 08:10:29
【问题描述】:

目前,该数据库有 2 种不同的语言:英语和法语。知道我将来可能会添加更多语言这一事实​​,这三种解决方案中的哪一种更合适?

#1。为每种语言创建单独的page_translation 表:

   CREATE TABLE page_translation_en (
     id INT,
     page_id INT,
     translation LONGTEXT
   );

   CREATE TABLE page_translation_fr (
     id INT,
     page_id INT,
     translation LONGTEXT
   );
  
   ...

#2。将translation 列添加到pages 表中:

   CREATE TABLE pages (
     id INT,
     page_id INT,
     translation_en LONGTEXT,
     translation_fr LONGTEXT,
     ...

   );

#3。创建一个包含所有翻译的page_translations

CREATE TABLE page_translations (
  id INT,
  page_id INT,
  language_id INT,
  translation LONGTEXT
);

+1M 页面和 3 种不同的语言会影响解决方案 #2 & #3 的查询性能,其中所有翻译都在一个表中?另外,考虑到我想搜索翻译内容...

【问题讨论】:

    标签: database-design


    【解决方案1】:

    +100 万页和 3 种不同的语言会影响解决方案 #2 和 #3(其中所有翻译都在一个表中)的查询性能吗?

    假设典型的页面长度,例如。一篇新闻文章,100 万页并不是一个巨大的数字。在具有合理资源和正确索引的系统上,pagespage_translations 表之间的join 应该很快。解决方案 #2 和 #3 之间的性能差异对于最终用户来说应该可以忽略不计。

    另外,考虑到我想搜索翻译内容...

    在这种情况下,解决方案#3 更容易查询。解决方案 #2 会导致尴尬的 where 子句,例如。 where translation_en like .. or where translation_fr like ..

    PS:我建议研究 WordPress 等开源 CMS 项目的设计。我不能从经验中说出来,但我确信这是他们考虑过很多的设计问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      相关资源
      最近更新 更多