请大神帮帮忙,看看怎么设计这样的数据库?类似Github的标签功能。
发布于 2 年前 作者 hz0324 3970 次预览 最后一次回复是 2 年前 来自 问答
使用场景描述:
我们公司内部的一个系统,员工每次创建一个记录,可以给这个记录加标签。其中,有5个标签是固定的,提前设置好的,员工可以改掉它们,还可以添加自定义的标签。这个标签只有他自己能看到。我觉得这个功能需求跟Github的issue中提供的标签系统很像,但是不知道怎么设计数据库结构。
请问,这个场景下,使用MySQL数据库该怎么设计表结构啊?如果有必要,我们可以使用Redis。
请各位大神帮帮忙。
4 回复
我问了一下GPT: 在 MySQL 数据库中,可以设计三张表来实现这个标签功能:
tags 表,用于存储所有的标签,包括固定的标签和用户自定义的标签。表结构如下:
在这个表中,id 是标签的唯一标识符,name 是标签的名称,is_fixed 表示这个标签是否是固定的标签。如果 is_fixed 为 TRUE,则表示这个标签是固定的,否则是用户自定义的标签。这个表中应该先插入固定的标签,再插入用户自定义的标签。
taggings 表,用于记录每个记录与哪些标签相关联。表结构如下:
在这个表中,id 是标签关系的唯一标识符,record_id 是记录的唯一标识符,tag_id 是标签的唯一标识符。这个表中应该插入每个记录和与之相关联的标签。
taggings_private 表,用于记录每个用户自定义的标签与哪些记录相关联。表结构如下:
在这个表中,id 是标签关系的唯一标识符,user_id 是用户的唯一标识符,record_id 是记录的唯一标识符,tag_id 是标签的唯一标识符。这个表中应该插入每个用户自定义的标签和与之相关联的记录。
javascript 代码
CabloyJS开源全栈框架提供的用户标签的设计,跟你描述的场景是一致的,可以参考一下:
aLabel:用户标签表 aAtom:数据表 aAtomLabel:数据与标签关联表 aAtomLabelRef:数据与标签关联展开表。因为一条数据可以对应多个标签,因此需要展开表,方便基于标签的SQL查询
@zhennann 牛逼,我研究一下
@yviscool 多谢,我学习一下