要在数据库设计一个标签系统,给各个实体打上标签。
然后又需要可以体现层次关系,比如红黑树
是属于数据结构
标签的子标签这种结构。
还要考虑到相同意义的标签重定向的情况,比如线段树
和区间树
其实讲的是一个东西,另外就是像国际化或者大小写这样的,Trie
,trie
,字典树
又是一个东西。
现在想法是,给标签设一个parent_id
来指向父标签来表示层次性,另外设一个redirect_id
来进行重定向来做同类标签,然后统一用英文来设标签最后通过翻译来解决不同语言的同义标签问题,因为这个标签
可能也会作为百科词条这样的设计,所以如何解决同义标签问题确实比较纠结。
感觉想并查集一样了,不知道这样设计好不好,有没有更好的设计方法等,因为这个标签也可能会作为百科词条一样的功能,所以想问问一般实际开发中是怎么处理这类问题的。
题主这个设计基本靠谱,有几点分歧供探讨:
标签本身感觉是个平坦和松散的东西,分层次似乎不太搭。最多说标签有个类别category,而不是层次,像segmentfault和很多网站都是如此。否则就搞成电商那种层次化分类了
标签国际化有点奇怪,中国人也会设很多英文标签,就像问题里说的trie和字典树,中国人都会叫。如果我做国际化,会把中文英文标签分开来记录,中文登录看到的标签和英文登录看到的完全是两回事。假设某人中文登录给某个实体加上了trie和字典树两个标签,英文登录时会显示没有任何标签,除非在英文情况下另建标签
我现在是更倾向用mongodb、elasticsearch这种文档型的nosql来存储这种文章、标签的东西。用关系数据库特别是mysql(不支持数组字段)来搞类似的东西很痛苦,像带着镣铐跳舞