数据库设计最佳实践 - 调查Q& A.

时间:2013-11-22 16:20:57

标签: mysql sql ruby-on-rails database-design ruby-on-rails-4

我目前有一个数据库设置来收集问题的答案(Rails 4.0 + MySQL)。为了解释我们所谓的“网格问题”,例如“您经常在以下每家商店购物?”而不是

question has_many answers
answer belongs_to question
answer belongs_to user

我去了:

question has_many data_fields
data_field has_many answers
answer belongs_to data_field
answer belongs_to user

这样每个问题都有一个或多个数据字段来说明某人所在的商店类型。

我最近有一位数据库顾问坚持认为更好的方法是回到一个简单的answer belongs_to question并在问题表中添加3列来确定1)它是一个定义问题的组,2)'组号'和3)小组内的位置

他的解释是,如果我发现自己需要在所有问题上生成一份报告,那就更简单了 - 我不需要做一个工会来完成这个任务。但是我在说服自己的好处超过了它在渲染问题输入时对用户界面造成的压力,以及生成用于分析的数据。

设置此数据库的最佳方法是什么?我知道这有点主观,但从技术上来说应该有一个最好的做法,所以希望我可以发布这个......

1 个答案:

答案 0 :(得分:1)

代价:

  1. “群组”与“问题”相关。它与答案无关。在定义问题和答案之间的关系时,您不需要考虑“组”。

    问题有很多答案。这是原生的。没有更多的想法。

  2. 跨表查询是不可避免的。当然,如果可能的话,你需要尝试减少它,但如果没有跨表查询,关系数据库将不会保留其名称。

  3. 关于“群组”,正如Mike所说,如果一个问题只有一个组,可以将其作为一个字段放在Question中以提高速度。但是,这仍有缺点。如果用户想要订阅多个组(如Quora),如何在问题中紧密耦合的组中执行该操作,该怎么办?你真的可以在这里消除加入查询吗?

  4. 结论:

    选择最常规的方式,并在您真正遇到瓶颈时稍后优化