Mysql 最佳数据库模式结构

Mysql 最佳数据库模式结构,mysql,laravel,greatest-n-per-group,query-performance,Mysql,Laravel,Greatest N Per Group,Query Performance,我正在Laravel上构建一个论坛web应用程序 当用户在“主题”页面上时,每个主题都会显示附加的关系数据,例如主题中的帖子数,最后一篇帖子甚至主题最后一篇帖子的作者 考虑到每个主题都有深度嵌套的关系数据,通过关系访问这些属性可以吗?或者我应该将这些数据存储在主题表的单独列中,以实现正常性能 我知道最好将数据直接存储在父表中,但是我必须吗?就性能和规范化而言,什么是最佳实践?就规范化而言,最佳实践是通过关系获取所有数据 就性能而言,您应该缓存计算成本高昂的任何内容 我会编写一个计划作业,每隔几分

我正在Laravel上构建一个论坛web应用程序

当用户在“主题”页面上时,每个主题都会显示附加的关系数据,例如主题中的帖子数最后一篇帖子甚至主题最后一篇帖子的作者

考虑到每个主题都有深度嵌套的关系数据,通过关系访问这些属性可以吗?或者我应该将这些数据存储在主题表的单独列中,以实现正常性能


我知道最好将数据直接存储在父表中,但是我必须吗?就性能和规范化而言,什么是最佳实践?

就规范化而言,最佳实践是通过关系获取所有数据

就性能而言,您应该缓存计算成本高昂的任何内容

我会编写一个计划作业,每隔几分钟用所有主题的新数据更新缓存


这里有关于Laravel和的更多信息。

什么是深度嵌套的关系数据?一个主题有帖子。帖子属于用户。用户有一个徽章。现在获取50个主题及其第一篇和最后一篇文章以及相应的徽章需要访问每个主题的第四级关系。我的意思是,当我说深度嵌套的关系数据时。有没有一个合适的名字呢?追随一段关系并不会“更深”。把它想象成横向的。用户是否只有一个徽章?“第一个和最后一个,加上…”意味着“groupwise max”。我正在为这样的.添加一个标记,从JSON响应的角度考虑。这就是为什么我用“深”这个词。听起来不错。如果这个问题没有更好的解决方案,我会选择这个作为解决方案。但我想知道缓存本身是否会降低服务器的速度。我正在分析Invision社区的数据库结构,发现表中有大量此类列,其中包含有关关系模型的数据。当鼠标悬停在物品上方时,可以查看几乎所有物品的内部。是因为他们使用的框架不如Laravel优化,还是只是不想改变数据库结构?首先,只需使用数据库附带的缓存即可。不要发明你自己的;这将是“过早的优化”。任何框架都会增加复杂性——它限制了您利用底层数据库引擎的能力,同时要求您学习RDBMS和框架。