标签服务设计与查询

案例表设计(举例)

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<AtcId>
  • 构建PageSearch方法A查询包含List<AtcId>的文章列表List<AtcFavored>,以及文章数量FavoredAtcCnt
  • 构建PageSearch方法B查询不包含List<AtcId>的文章列表List<AtcUnFavored>,以及对应数量UnFavoredCnt

此处使用两个Atc表的查询方法在于,优先按照翻页逻辑查询带用户喜欢标签的文章,若在某一页时,用户喜欢的文章不满一页size<PageSize,这时候就需要调用B方法来查询不带用户喜欢标签的文章,来补足这一页数据。

后续思考

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,127评论 19 139
  • # 一度蜜v3.0协议 --- # 交互协议 [TOC] ## 协议说明 ### 请求参数 下表列出了v3.0版协...
    c5e350bc5b40阅读 680评论 0 0
  • 文章图片上传不正常,如需文档,可联系微信:1017429387 目录 1 安装... 4 1.1 配置探针... ...
    Mrhappy_a7eb阅读 6,581评论 0 5
  • 多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。编程其实就是一个将具体...
    嗯哼丶傻大个是你阅读 232评论 0 1
  • 你是不是有这样的烦恼?不甘心过着平庸的生活,却苦于找不到自己的人生理想?或者,明明胸怀大志,却陷入了生活的泥潭,无...
    安文_一心整理阅读 918评论 0 4