Database design 数据库设计:用户生成内容(评论、帖子等)的国际化

Database design 数据库设计:用户生成内容(评论、帖子等)的国际化,database-design,Database Design,比如说,我运行了一个网站,让用户有机会将内容放到网上(例如,一些评论),并且我使用几种语言/国家(地区)运行该网站。此外,我不需要从一个区域设置访问到另一个区域设置 我想知道以下两种数据库设计之间的最佳数据库设计: 每个区域设置创建一个表: commentsenGB(id,txt) commentsfrFR(id,txt) 等等 将所有评论放在同一个位置 注释表,但保留 区域设置/语言: 注释(id、txt、id_lang) 我很确定最好的db设计是2),但我考虑过,在这种情况下,注释表在所有地

比如说,我运行了一个网站,让用户有机会将内容放到网上(例如,一些评论),并且我使用几种语言/国家(地区)运行该网站。此外,我不需要从一个区域设置访问到另一个区域设置

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

  • 每个区域设置创建一个表:

    commentsenGB(id,txt)

    commentsfrFR(id,txt)

    等等

  • 将所有评论放在同一个位置 注释表,但保留 区域设置/语言:

    注释(id、txt、id_lang)

  • 我很确定最好的db设计是2),但我考虑过,在这种情况下,注释表在所有地区之间共享,因此,条目的数量将成倍增加(nb_of_locales x更快!),并且访问表的查询时间将受到影响,不是吗?或者是:

    SELECT * FROM comments WHERE id_lang = engb
    
    完全相同的查询(按执行时间计算),如下所示:


    谢谢

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

    并不是说这可能不意味着在“语言”列上放置索引(当然,除非您需要根据语言检索评论),而是可以通过相关id(例如,您的评论可能与另一个对象相关,例如论坛主题)

    一般来说,我不会太担心数据库表变得太大-数据库的构建太多,无法处理大量行,正如您所说的,由于各种原因(例如维护),维护额外表的开销可能是一个问题


    当然,还有一个要考虑的问题——你需要在评论级别跟踪“LanguGe”吗?例如,英国中的用户可能会用法语输入评论,这完全取决于网站的性质。其他选项可能是根据用户跟踪用户位置?

    选择选项2。简单想想你每天有多少评论?粗略估计少于10.000(如果你有更多,那么网站有足够的现金流来拥有更多的资源:D)。 为语言id创建一个索引,一切都会顺利进行

    SELECT * FROM commentsenGB