标签服务设计与查询

案例表设计(举例)

user : id | name | pw | ....
atc : id | title | ....
atc_tag : id | title | ...
atc_tag_ref : id | atc_id | atc_tag_id | ....
user_favor_atc_tag : id | user_id | tag_id | deleted | ...

目标

根据用户喜好查询文章列表

  • 翻页逻辑
  • 带用户喜欢标签的文章优先排序

实现方式

方案一

当数据量均很少时,可一次查询atc列表,然后比对其tag和用户favor_tag。

不建议:不管数据量多少,都应该按照完整模式来考虑问题,实际项目中既有可能atc是数据量大的一方,tag等也可能是数据量大的一方。

方案二
  • 优先构建方法获取用户的喜欢的文章标签列表;
  • 根据用户喜欢的标签列表查询包含此类标签的文章List
  • 构建PageSearch方法A查询包含List的文章列表List,以及文章数量FavoredAtcCnt
  • 构建PageSearch方法B查询不包含List的文章列表List,以及对应数量UnFavoredCnt

此处使用两个Atc表的查询方法在于,优先按照翻页逻辑查询带用户喜欢标签的文章,若在某一页时,用户喜欢的文章不满一页size

后续思考

  • 实际项目对于类似于标签服务的数据库设计,尽可能不要偷懒,而将tag作为属性加在Atc表中,不然在大量数据查询时,会造成效率低下;

  • 实际项目中还需要考虑的问题诸如:Atc的创建时间问题、文章是否被收藏、文章的点赞数量等

你可能感兴趣的:(标签服务设计与查询)