数据库设计:用户生成内容的国际化(评论,帖子......)

时间:2009-12-15 11:50:00

标签: database-design

假设我运行一个网站,让用户可以将内容放在网上(有些评论是针对...),并且我在几种语言/国家(语言环境)下运行本网站。此外,我不需要将评论从区域设置访问到另一个区域。

我想知道以下2之间的最佳数据库设计:

  1. 为每个区域设置创建一个表:

    commentsenGB(id,txt)

    commentsfrFR(id,txt)

    等...

  2. 将所有评论都放在同一个评论中 评论表,但保持跟踪 语言环境/语言:

    评论(id,txt,id_lang)

  3. 我很确定最好的数据库设计是2)但我考虑的是,在这种情况下,注释表在所有语言环境之间共享,因此,条目数将呈指数级增长(nb_of_locales x更快!)访问表的查询时间会受到影响,不是吗?或者是:

    SELECT * FROM comments WHERE id_lang = engb
    

    完全相同的查询(在执行时间方面):

    SELECT * FROM commentsenGB
    

    谢谢!

2 个答案:

答案 0 :(得分:1)

我会选择第二选项,但关键点是确保您的表格正确索引(因为索引将用于检索您的数据)。

这并不意味着这可能并不意味着在语言列上添加索引(除非您当然需要根据语言检索注释),但可能是由关联的ID(例如,您的评论可能与另一个对象,比如一个论坛主题)。

一般来说,我不会过分担心数据库表变得过大 - 构建的数据库也会处理大量的行,正如您所说,维护附加表的开销可能是个问题,原因有很多种(例如,维护)。

当然,还有另外一点需要考虑 - 您是否需要在评论层面跟踪“语言”?例如,考虑英国的用户可能会用法语输入评论 - 所有这些都取决于您网站的性质。其他选项可能是针对用户跟踪用户位置?

答案 1 :(得分:0)

选择选项2.简单。并考虑一下你每天有多少评论?小于10,000的粗略近似值(如果你有更多,那么网站有足够的现金流来获得更多的资源:D)。 也为language_id创建一个索引,一切都会顺利。