isayme / blog

https://blog.isayme.org
MIT License
10 stars 2 forks source link

数据库Schema设计: Attribute Pattern #42

Open isayme opened 5 years ago

isayme commented 5 years ago

需要解决的问题

场景一: Trello 官方支持多个插件, 插件的名称描述信息都是英文, 为了降低母语非英语的用户入门难度, 当此类用户访问插件信息的时候最好展示其母语版本的标题描述. 问题一: 同一个字段需要存在多个不同语言的版本

场景二: 电影会有个上映时间信息, 不通国家地区的上映时间不同, 需要单独记录. 问题二: 同一个字段需要存在多个不同地区的版本

总结: 数据库如何设计以应对统一字段不同场景下的不同版本?

解决方式

场景一 为例, 如何解决同一个字段需要存在多个不同语言的版本.

方式一: 不同场景下分别增加一个字段

{
  title_en: "",
  title_fr: "",
  title_de: ""
}

优点

缺点

方式二: 使用独立的表记录多语言信息

{
  title: "",
  title_translate_id: ""
}

// translation
{
  _id: "",
  text_en: "",
  text_fr: "",
  text_de: ""
}

优点

缺点

(荐)方法三: Attribute Pattern

{
  title: "",
  titles: [
    {
       lang: "en",
       text: "",
    }, 
    {
       lang: "fr",
       text: "",
    }, 
    {
       lang: "de",
       text: "",
    }
  ]
}

优点

缺点

参考资料