调查数据库设计

时间:2014-01-01 08:03:26

标签: php mysql wordpress

祝你们过上和平健康的新年。 **

我正在为估计 10,000,000个用户的mysql / php / wordpress进行调查数据库设计。每个用户最终将在几年内回答 5,000个问题。这些问题的答案主要是:同意,中立,不同意,不要知道多项选择答案。没有正确或错误的答案。用户将来可以再次尝试这些问题。此外,在每次尝试时,他/她的answer_record都会使用新数据进行更新。从数据库性能和数据规范化角度来看,以下数据库设计是否合理?提前谢谢。

TABLE_USER:

  • USER_ID
  • 用户名
  • USER_EMAIL
  • [其他用户特定字段]

TABLE_QUESTION:

  • question_id
  • QUESTION_TEXT
  • question_image
  • question_category1 [一个问题可能存在于多个类别中]
  • question_category2
  • question_category3

TABLE_ANSWER:

  • answer_id
  • USER_ID
  • question_id
  • answer_agree
  • answer_neutral
  • answer_disagree
  • answer_dontknow
  • answered_datetime
  • answer_number_of_attempts

此致

哈里森。

2 个答案:

答案 0 :(得分:0)

我意识到你需要DB设计的帮助,但即使设计很完美,如果你的系统没有正确规划进行扩展(BIG),这将无法合理扩展。

正确设计的API可以无限扩展。

使用这些数字,加上外部并为其构建API可以更加便宜,以便您可以正确扩展。直接在WordPress中构建内容需要您在所有方向上快速扩展,以便运行PHP,HTTP和MySQL。

如果您在WordPress和调查数据库之间构建API,那么您可以扩展MySQL并在其间构建任意数量的系统,Memcache,搜索引擎等......

这样可以让您更好地分离系统,从而实现更高效的扩展。 只在需要时缩放每个。

所以我现在也计划你的系统/基础设施。

答案 1 :(得分:-1)

正确的数据库设计的一部分意味着退一步并确保如果再添加一个,则不必重新设计表,也可以分离出离散类型的信息。如果有几列正在做同样的事情(但记录不同的答案),你应该将它们分成另一个表并有一个链接表。

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

TABLE_USER很好

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

TABLE_CATEGORIES 有关不同类别的信息

并有另一张表

CATEGORIES_PER_QUESTION

  • question_id
  • CATEGORY_ID

允许问题包含任意数量的类别,您可以通过查询categories_per_question查看每个问题的问题

TABLE_ANSWER应分为两个表,

RESPONSE

  • RESPONSE_ID
  • USER_ID
  • question_id
  • answer_id
  • datetime_responded

和ANSWERS

  • answer_id
  • answer_name

如果答案名称是“同意”,“中性”,“不同意”,“不知道”或您提供的任何其他答案。

如果你想要花哨,你甚至可以在ANSWERS和TABLE_QUESTION之间建立另一个连接表,指出每个问题可以得到什么答案。

要知道尝试次数以及我删除的其他信息,您可以查询数据库,使其不需要自己的列。