假设您正在为下一次堆栈溢出设计数据库架构,更具体地说,是处理问题评级的架构部分。
我假设您会使用如下表格:
评分(question_id、user_id、评分)
...这将记录评分并确保没有用户对同一问题投票两次。
该表本身就可以处理评级数据,但可能会导致查询速度缓慢。
考虑到性能,您是否会考虑将每个问题的评分总和存储在问题表中,即使该数据是多余的,因为它是从评分表中的数据派生的?
最佳答案
我通常会首先从标准化模型开始,而不是对问题表中的评分总和进行非标准化。
然后,当应用程序运行得足够好时,我会进行一些性能测试,以确定应用程序是否足够好地处理负载 - 与我预期在生产中的负载相比。
如果它不能很好地处理负载,我会检查瓶颈 - 并纠正最重要的瓶颈,直到应用程序运行良好。
应用程序投入生产后,如果网站有大量 opf 用户,则需要进行一些额外的优化。
为了让事情变得简单:
- 不要过度优化
- 让您的应用程序正常运行
- 一旦有效,就对其进行基准测试
- 如果/需要时进行优化
最后,是的,也许,将问题表的评分总和非标准化可能会有所帮助;但你需要这样做吗?
这才是真正的问题;-)
关于performance - 为了性能而允许数据库中存在冗余数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191774/