要在数据库设计一个标签系统,给各个实体打上标签。
然后又需要可以体现层次关系,比如红黑树
是属于数据结构
标签的子标签这种结构。
还要考虑到相同意义的标签重定向的情况,比如线段树
和区间树
其实讲的是一个东西,另外就是像国际化或者大小写这样的,Trie
,trie
,字典树
又是一个东西。
现在想法是,给标签设一个parent_id
来指向父标签来表示层次性,另外设一个redirect_id
来进行重定向来做同类标签,然后统一用英文来设标签最后通过翻译来解决不同语言的同义标签问题,因为这个标签
可能也会作为百科词条这样的设计,所以如何解决同义标签问题确实比较纠结。
感觉想并查集一样了,不知道这样设计好不好,有没有更好的设计方法等,因为这个标签也可能会作为百科词条一样的功能,所以想问问一般实际开发中是怎么处理这类问题的。
질문의 디자인은 기본적으로 신뢰할 수 있습니다. 토론할 때 몇 가지 차이점이 있습니다.
라벨 자체가 밋밋하고 헐렁한 느낌이고, 레이어드도 잘 안 어울리는 것 같아요. 기껏해야 세그먼트폴트(segmentfault) 및 많은 웹사이트의 경우처럼 태그에는 계층 구조 대신 카테고리가 있다고 말할 수 있습니다. 그렇지 않으면 전자상거래와 같은 계층적 분류가 됩니다
태그의 국제화는 좀 이상하네요. 중국인도 영어 태그를 많이 설정합니다. 질문에서 언급한 트리나 딕셔너리처럼 중국인들은 다 그렇게 부릅니다. 국제화를 하면 중국어와 영어 라벨을 따로 기록하게 됩니다. 중국어로 로그인할 때 보이는 라벨은 영어로 로그인할 때 보이는 라벨과 전혀 다릅니다. 누군가 중국어로 로그인하여 엔터티에 trie 및 Dictionary tree라는 두 개의 레이블을 추가한다고 가정해 보겠습니다. 영어로 로그인하면 다른 레이블
이제는 이러한 기사와 태그를 저장하기 위해 mongodb, elasticsearch와 같은 문서형 NoSQL을 사용하는 경향이 더 커졌습니다. 관계형 데이터베이스, 특히 mysql(배열 필드를 지원하지 않음)을 사용하여 족쇄를 차고 춤추는 것과 같은 유사한 작업을 수행하는 것은 매우 고통스럽습니다
관련 업계 경험이 없습니다.
@manong의 답변에 동의합니다.
parent_id
을 사용하여 부모-자식 태그 관계를 정의하면 어느 날 하위 태그가 두 개의 다른 상위 태그에 속하게 된다면 당황스러울 것입니다. 관리를 위해 카테고리를 사용하는 것이 더 유연합니다. (물론 현재 비즈니스가 복잡하지 않다면 그러한 장기적인 사항을 고려하지 않는 것이 좋습니다.)태그 국제화...이해할 수 없습니다. .
예를 들어
Chrome
태그를 달았는데 프로그래머들은 다 알지만 국제화하고 나면铬
로 바뀌어 당황스럽습니다...물론 국제화가 필요한지 여부. 귀하의 비즈니스에 따라 다릅니다(결국 유지 관리 비용이 증가합니다). 저는 단지 프로그래머의 관점에서 예를 제시했을 뿐입니다.
redirect_id
은 비교적 빠르고 간단한 구현입니다. 좀 더 유연하다면 중간 관계 테이블을 구축할 수 있습니다.또한 말씀하신 점과 관련하여 알고리즘을 사용하여 판단하지 않는 한 이러한 관계를 표현하려면 사전이 필요합니다(당연히 수동 유지 관리가 필요함).