新手问题 相关联的表中,字段联动处理的最优方法!请指教!!!

qq2729877005 · 2017年08月28日 · 最后由 qq2729877005 回复于 2017年08月30日 · 1440 次阅读

情境:

有两张表:authors 和 customers。

authors 表有两字段:(主键)id,name

articles 表有两字段: (主键)id,author_id 或 author_name

如题,应该存 author_id 好?还是 author_name 好?存 author_id 的话,可以不用考虑作者更名的情况,但每查一篇文章,都要增加一次搜索,在 authoes 表中再查一次该篇文章作者;而存 author_name 的话,自然不必再去查该篇文章作者,但又必须在模型中写回调,在作者更名时,同时修改数据库 acticles 表中属于该作者文章的 author_name 字段。感觉怎样都不好,有没有更优雅的解决方法,求高人指点!!!😭 😭 😭

存 id,name 可以在 view 缓存

存 id , name 可以用 redis 来缓存,然后在 article 的 model 里面加 author_name 方法读缓存

xfstart07 回复

额,看来又得学 redis 了😂

lithium4010 回复

怎么缓存,像二楼所说那样???

qq2729877005 回复

rails cache 也支持 文件缓存的,你可以直接使用 Rails.cache,可以看看 https://rails.guide/book/caching_with_rails.html#caching-with-rails-an-overview 的 27.1.6 低层缓存

还可以存 id,用到 name 的时候 includes 一下 避免 n + 1

lithium4010 回复

这不就跟我说的一样吗?它会增加一条 sql 查询。如图:

如果直接存 user_name 的话,使用第二条查询 Customer.last.user_name 就可以直接找到,不像第一种会增加一次查询,又浪费 (0.8ms) 时间😭

xfstart07 回复

66666,谢谢大侠!之前看 rails 指南的时候只是反复在啃 MVC 的内容,没发现后面还有好东西,看样子得完完整整看看 rails 指南了🤓 🤓

qq2729877005 关闭了讨论。 06月29日 14:33
需要 登录 后方可回复, 如果你还没有账号请 注册新账号