假设我运行一个网站,让用户可以将内容放在网上(有些评论是针对...),并且我在几种语言/国家(语言环境)下运行本网站。此外,我不需要将评论从区域设置访问到另一个区域。
我想知道以下2之间的最佳数据库设计:
为每个区域设置创建一个表:
commentsenGB(id,txt)
commentsfrFR(id,txt)
等...
将所有评论都放在同一个评论中 评论表,但保持跟踪 语言环境/语言:
评论(id,txt,id_lang)
我很确定最好的数据库设计是2)但我考虑的是,在这种情况下,注释表在所有语言环境之间共享,因此,条目数将呈指数级增长(nb_of_locales x更快!)访问表的查询时间会受到影响,不是吗?或者是:
SELECT * FROM comments WHERE id_lang = engb
完全相同的查询(在执行时间方面):
SELECT * FROM commentsenGB
谢谢!
答案 0 :(得分:1)
我会选择第二选项,但关键点是确保您的表格正确索引(因为索引将用于检索您的数据)。
这并不意味着这可能并不意味着在语言列上添加索引(除非您当然需要根据语言检索注释),但可能是由关联的ID(例如,您的评论可能与另一个对象,比如一个论坛主题)。
一般来说,我不会过分担心数据库表变得过大 - 构建的数据库也会处理大量的行,正如您所说,维护附加表的开销可能是个问题,原因有很多种(例如,维护)。
当然,还有另外一点需要考虑 - 您是否需要在评论层面跟踪“语言”?例如,考虑英国的用户可能会用法语输入评论 - 所有这些都取决于您网站的性质。其他选项可能是针对用户跟踪用户位置?
答案 1 :(得分:0)
选择选项2.简单。并考虑一下你每天有多少评论?小于10,000的粗略近似值(如果你有更多,那么网站有足够的现金流来获得更多的资源:D)。 也为language_id创建一个索引,一切都会顺利。