遇到一个表设计问题,需求如下:
为了描述人与标签的关系,1个人对应1或n个标签,多个人可对应1个标签,根据人找标签和根据标签找人。
例子:
(人)-- (标签)
小明 -- 诚实、可爱
小丽 -- 可爱
小王、小明 -- 老实
小张、小丽 -- 美丽
小张、小王、小丽 -- 俊俏
此时,
找小明可以找到标签:诚实、可爱、老实
找小明&&小王可以找到:老实
找小张&&小丽可以找到:美丽
找小张&&小丽&&小王可以找到:俊俏
请教:这样的数据表如何设计会很比较合理,查询效率会高些?
本人现在的设计是这样的:
表Person(ID、Name)
表Tag(ID、TagName、PersonIDs)
PersonIDs是Person表中ID的集合,如:[1,2,3,4]这样存储,检索的时候用 like。
困惑:如果此处用like,数据较大的时候查询会很慢...
典型的多对多关系:
Person (PersonId, Name)
Tag (TagId, Name)
PersonTag (PersonId FK1, TagId FK2)
查询Person 'P1'的Tag:
查询具有 Tag 'T1' 的 Person:
查询'P1', 'P2'共同的Tag:
或者: