测量数据库设计



祝您新年平安、健康**

我正在为mysql/php/wordpress设计一个调查数据库,估计有10000000名用户。在几年的时间里,每个用户最终将回答大约5000个问题。这些问题的答案主要是:同意、中立、不同意、不知道作为多选答案。答案没有对错之分。用户将来可以再次尝试这些问题。此外,在每次尝试时,他/她的answer_record都会用新数据进行更新。从数据库性能和数据规范化的角度来看,以下数据库设计是否合理?提前谢谢。

表用户:

  • user_id
  • 用户名
  • 用户电子邮件
  • [其他用户特定字段]

表格_问题:

  • question_id
  • 问题_文本
  • 问题图像
  • question_category1[一个问题可能存在于多个类别中]
  • 问题_类别2
  • 问题_类别3

TABLE_ANSWER:

  • answer_id
  • user_id
  • 问题id
  • 答复同意
  • 答案_中性
  • answer_disagree
  • answer_dontknow
  • 答复日期时间
  • answer_number_of_tempts

真诚,

哈里森。

正确的数据库设计的一部分意味着后退一步,确保如果再添加一个东西,就不必重新设计表,而且离散类型的信息也被分离出来。如果多个列在做相同的事情(但记录不同的答案),则应该将它们拆分到另一个表中,并使用一个链接表。

另外,你真的需要在表名中说Table吗?当然是一张桌子,还有什么呢?

TABLE_USER很好

对于TABLE_QUESTION,您应该删除类别列,而不是创建一个新的表

表类别带有不同类别的信息

并有另一个表

类别_每个问题

  • question_id
  • category_id

允许一个问题有任意数量的类别,您可以通过查询categories_per_question 来查看每个问题有哪些类别

TABLE_ANSWER应分为两个表,

反应

  • response_id
  • user_id
  • 问题id
  • answer_id
  • datetime_responded

和答案

  • answer_id
  • answer_name

答案名称为"同意"、"中立"、"不同意"、不知道或您可能提供的任何其他类型的答案。

如果你想变得有趣,你甚至可以在ANSWERS和table_QUESTION之间有另一个联接表,指示每个问题的答案。

要知道尝试次数和我丢弃的其他信息,可以查询DB,这样它本身就不需要列了。

我知道你想要DB设计方面的帮助,但即使设计完美,如果你的系统没有正确规划扩展(BIG),这也无法合理扩展。

设计得当的API可以无限扩展。

有了这些数字,拥有这个外部并为其构建API的加班费会更便宜,这样你就可以适当地扩展。直接在WordPress中构建一些东西需要你在各个方向上快速扩展,只用于运行PHP、HTTP和MySQL。

如果你在WordPress和你的调查数据库之间建立了一个API,你可以扩展MySQL并在两者之间建立任何数量的系统,Memcache,搜索引擎等

这将使您的系统之间更好地分离,从而实现更有效的扩展。仅在需要时缩放每个。

因此,我也会在这一点上规划您的系统/基础设施。

最新更新