博客tag的一些问题解决
哒哒哒!今天完成了博客tag的添加,当然不是一帆风顺的。就几个问题进行汇总分享一下。
如何设计tag的数据库?
这个问题当然一开始就让我考虑了很久,因为和需求分析阶段的粗糙分析相差还有很多。
原本是打算在tag,blog两张表之外再加上一张blog_tag的表,也是传统的多对多的解决策略。但是仔细分析了个人的需求,额,感觉这样设计就删除和新增tag上对数据库的调用会很繁琐,因为不仅要更新tag库还要更新blog_tag库,如果删除blog内容则还要复杂。
于是选择只建两张表。一张blog,一张tag,这个tag的关系模型是(name,bid),bid为blog的id,name则是标签的名字。通过这种方式使得标签可扩展性也大大增加。不过缺点也很明显,如果这张表比较大的时候检索各项东西都会比较慢,尤其是后期打算设计的按tag搜索功能。
新增的tag表如何与blog融合?
新增了一张表,新增的操作是查询博客列表、查询博客内容需要追加tag数组,然后新建博客也要有追加tag的功能。其中查询博客列表着实困扰了许久。
因为查询操作原本有分页、降序的功能,在这个基础上还要联合外表查询tag,让需求一下子麻烦起来。最开始想到的如下:
SELECT blog.*,tag.name FROM blog
LEFT JOIN tag
ON blog.id=tag.bid
ORDER BY id desc
LIMIT #{param1},#{param2}
一开始乍一看感觉没问题,无非是加个左外联罢了。但是事实上在顺序上有了问题,这样的语句是先外联然后再对结果表分页,这样会导致数据大量减少,全被重复的tag给占用了param2数量的记录。经过实践,如下的方式才是正确的:
SELECT sub.*,tag.name from
(
SELECT blog.* FROM blog
ORDER BY id desc
LIMIT #{param1},#{param2}
) sub
LEFT JOIN tag
ON sub.id = tag.bid
使用了子查询左外联tag表从而使得结果正常处理。
然后是一些小的问题
1. 赋值mybatis的mapper xml文件后,别忘了改namespace
2. @ResponseBody需要数据为json格式,并且前端要带请求头。
好啦,以上就是今天加班加点做完的内容,当然了大部分时间用在了追踪springboot源码上了QAQ,原本打算重写绑定器的,但是失败了233。
今天就到这里,拜拜啦!
相关文章
- 个人博客网站怎么适配手机端夜间模式或深色模式
- WPtouch Pro 简单创建手机博客
- 博客将 Django 1.11+ 升级到 Django 2.2+ 遇到的问题及规避方法
- WordPress博客网站伪静态设置及固定链接设置教程-解决404问题
- 个人免费博客花式搭建指南
- 谁不想要一个自己的博客网站呢 - 搭建博客网站wordpress
- 使用 Hexo 和 GitHub 实现一台电脑的搭建两个博客
- 基于Jekyll与Github Pages搭建博客
- Java个人博客系统ssh个人博客系统家乡特产家乡风景
- Windows Hexo博客安装配置优化(小白篇)
- 我用我的10万条微信聊天记录和280篇博客文章,做了我自己的数字克隆AI
- 优化博客网站性能使用本地Redis缓存(博客redis本地缓存)