请问一个表结构设计的思路

想在cms设计一个管理tag的模块,要如何设计好?
编辑可以在后台编辑文章的时候编辑该文章的tag
前端用户可以查看该tag的所有文章。

目前,我是这么设计的。
一个文章表,一个中间表(用于存放文章id和tagid的表),一个tag表
文章表里面有一个tag_name字段。这样,在加载文章详细页的时候,不用通过复合查询去通过中间表去获取tag名字了。

但是,在后台,文章tag管理的时候,就出现了一个问题。如果编辑人员去编辑一篇文章的tag,把A标签换成了B标签。那我后台目前是这样处理的,感觉有点怪怪的感觉,但是又没有解决方案。
把标签名更新到文章表里,同时,删除中间表所有该文章下所有的tag关联数据。然后再把新关联的数据插入到数据库里。
我这样做的目的是不用循环去挨个的检查,对比数据,再删除。

所以,请问大佬一下,还有比这更加优秀的解决方案吗?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

Laravel自带的ORM就是自动对比,有的插入,没有的删除,有现成的方式。

不过你现在的方式也没什么问题,只要中间表的主键没有被用到就可以先删除后添加。

只是有个问题,产品的话不要信,说不准哪天就说TAG名称改一下,那你存的名称就没有用了。

可以看TAG表会有多少数据,几十个以内的话,可以在查询列表的时候查出所有TAG,然后循环文章列表用PHP补TAG。

2年前 评论
wakamono (楼主) 2年前
Adachi (作者) 2年前
wakamono (楼主) 2年前
讨论数量: 3

中间表的更新 可以给新的tag和旧的tag取一个差集,然后插入新的 tag,删除不要的tag

友情提示 不要在这种业务上花费太多时间,不要想太多。用有限的时间去学习一些更值得学习的知识

2年前 评论

Laravel自带的ORM就是自动对比,有的插入,没有的删除,有现成的方式。

不过你现在的方式也没什么问题,只要中间表的主键没有被用到就可以先删除后添加。

只是有个问题,产品的话不要信,说不准哪天就说TAG名称改一下,那你存的名称就没有用了。

可以看TAG表会有多少数据,几十个以内的话,可以在查询列表的时候查出所有TAG,然后循环文章列表用PHP补TAG。

2年前 评论
wakamono (楼主) 2年前
Adachi (作者) 2年前
wakamono (楼主) 2年前

楼上给你推荐的应该是中间表sync 对orm的操作

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!