请问,Github的issue功能里标签tag系统,对应的数据库该怎么设计?

使用场景描述:

我们公司内部的一个系统,员工每次创建一个记录,可以给这个记录加标签。其中,有5个标签是固定的,提前设置好的,员工可以改掉它们,还可以添加自定义的标签。这个标签只有他自己能看到。我觉得这个功能需求跟Github的issue中提供的标签系统很像,但是不知道怎么设计数据库结构。

请问,这个场景下,使用MySQL数据库该怎么设计表结构啊?如果有必要,我们可以使用Redis。

请各位大神帮帮忙。

阅读 3.1k
2 个回答

其实有大概两张表,一张记录表,一张标签表

记录表中也有 tags 字段,用来存储这个记录的tags字段,多个标签用逗号分隔;

还要一张标签表,有一些预设的标签,当有人在记录中添加标签的时候,如果标签表中已经存在的话,就让用户自己选择,如果不存在的话,就在标签表中插入一条新数据

表的设计大概如下:

记录表 (record)

字段名称数据类型说明
idint记录ID
titlevarchar标题
contenttext内容
user_idint创建该记录的员工ID
tagsvarchar所有标签的ID,多个标签用逗号分隔

标签表 (tag)

字段名称数据类型说明
idint标签ID
namevarchar标签名称
user_idint创建该标签的员工ID
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

这种的话,分析实体与实体之间的关系即可。

比如:一个记录可以有多个标签,一个标签可以设置到多个记录上面。很显然这是个多对多的关系。

image.png

通常的做法是做个中间表,这样可以存在两者关系建立时的一些扩展数据。当然如果只是记录标签即可,完全可以去除中间表,直接将标签ID存储至记录表。

至于数据格式,逗号分隔的ID串或者JSON格式都行。


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题