繁体   English   中英

数据库设计最佳实践–调查问答

[英]Database design best practice – Survey Q&A

我目前有一个数据库设置来收集问题的答案(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

因此,每个问题都有1个或多个data_fields可以说明某人购物的每种商店。

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

他的解释是,如果我发现自己需要针对所有问题生成报告,这将使其变得更简单–我不需要工会来完成此任务。 但是我很难说服自己,在提供问题输入以及生成用于分析的数据时,其好处要超过它给用户界面带来的压力。

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

考虑:

  1. “组”与“问题”有关。 它与答案无关。 定义问题和答案之间的关系时,无需考虑“组”。

    问题有很多答案。 那是本机。 没有更多的想法。

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

  3. 正如Mike所说,关于“组”,如果一个问题只有一个组,可以将其作为“问题”字段来提高速度。 但是,这仍然有缺点。 如果用户要订阅多个组(例如Quora),该如何在Question中紧密耦合的组中进行呢? 您真的可以在这里消除联接查询吗?

结论:

选择最常规的方法, 然后在遇到瓶颈时进行优化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM