软件系统【标签tag功能】的两种数据库设计

简介: 软件系统中的标签功能可采用两种数据库设计。方案一,文章和Tag各一表,Tag信息存储在文章表内(`tags`和`tagids`字段),优点是模型简单,但查询效率低且易引发数据冗余和一致性问题。方案二,增加Tagmap表,用于存储标签-文章映射,利于索引查询和数据更新,适用于高效率需求,但结构更复杂。

软件系统【标签tag功能】的两种数据库设计

需求: 简介: 需求背景 目前主流的博客系统、CMS都会有一个TAG标签系统,不仅可以让内容链接的结构化增强,而且可以让文章根据Tag来区分。相比传统老式的Keyword模式,这种Tag模式可以单独的设计一个Map的映射表来增加系统的负载和查询的效率。

数据库设计方案1:两个表结构

两个表

  • Tag表
  • 文章表

Tag表表结构:

字段 描述
id tag标签的ID
tagname tag内容
num 当前Tag的引用个数

文章表结构:

字段 描述
id 文章ID
title 文章标题
tags tags列表,多个以,分割
tagids tags的ID 多个以,分割

优点

  1. 简化的数据模型:只有两个表,模型简单,易于理解和维护。
  2. 减少表连接:由于标签信息直接存储在文章表中,查询特定文章的标签时不需要进行表连接,可能提高查询速度。
  3. 快速更新:当添加或删除标签时,只需更新Tag表中的引用计数,操作简单快捷。

缺点

  1. 查询效率问题
    • 当需要根据标签查找文章时,由于标签信息存储在文章表的tags字段(以逗号分隔的字符串),需要对字符串进行解析,这可能降低查询效率。
    • 对于复杂的查询,如查找具有多个标签中任意一个的文章,可能需要更复杂的处理逻辑。
  2. 扩展性限制
    • 如果标签数量很多或文章数量很大,文章表中的tagstagids字段可能会变得非常长,影响性能和存储效率。
  3. 数据冗余
    • 每个文章记录都包含标签信息的副本,这可能导致数据冗余和存储空间的浪费。
  4. 数据一致性问题
    • 如果文章表中的tags字段和Tag表中的信息不同步,可能会导致数据一致性问题。
  5. 缺乏灵活性
    • 对于需要对标签进行复杂操作的场景(如标签的层级关系、标签的属性等),这种设计可能不够灵活。
  6. 难以维护
    • 当文章的标签需要更新时,可能需要同时更新文章表和Tag表,增加了维护的复杂性。
  7. 不支持全文搜索
    • 如果数据库或搜索引擎不支持对逗号分隔的字符串字段进行全文搜索,那么实现基于标签的搜索可能会更加困难。
  8. 性能瓶颈
    • 如果系统需要处理大量的标签或高并发的标签查询请求,文章表可能会成为性能瓶颈。

数据库设计方案2

三个表

  • Tag表
  • 文章表
  • tag与文章映射信息表

Tag表表结构:

字段 描述
id tag标签的ID
tagname tag内容
num 当前Tag的引用个数

文章表结构:

字段 描述
id 文章ID
title 文章标题
tags tags列表,多个以,分割

Tagmap表结构:

字段 描述
id 映射ID
tag_id 标签id
a_id 文章id

image-20211124181325452

每次发布内容和修改内容的时候 都去更新一下Tag表和 Tagmap表。

代码端查询过程:

1, 用户输入内容模糊匹配到标签

2, 标签去映射表里,找到多个标签id与文章对应的id.

3, 通过多个文章id, 找到文章

因为每次查询都是使用索引,所以效率较高。

优点

  • 索引使用:每次查询都利用索引,提高了查询效率。
  • 数据更新:发布或修改内容时,只需更新Tag表和Tagmap表,简化了数据维护流程。

结论

数据库设计方案2通过引入映射表,优化了标签与文章之间的关系管理,提高了查询效率和系统的可维护性。这种方案更适合需要高效检索和频繁更新内容的系统。

目录
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
阿里云RDS云数据库全解析:产品功能、收费标准与活动参考
与云服务器ECS一样,关系型数据库RDS也是很多用户上云必买的热门云产品之一,阿里云的云数据库RDS主要包含RDS MySQL、RDS SQL Server、RDS PostgreSQL、RDS MariaDB等几个关系型数据库,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,帮助您解决数据库运维的烦恼。本文为大家介绍阿里云的云数据库 RDS主要产品及计费方式、收费标准以及活动等相关情况,以供参考。
|
7月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
620 79
|
10月前
|
前端开发 数据库
会议室管理系统源码(含数据库脚本)
会议室管理系统源码(含数据库脚本)
188 0
|
5月前
|
安全 关系型数据库 数据管理
阿里云数据库:构建高性能与安全的数据管理系统
阿里云数据库提供RDS、PolarDB、Tair等核心产品,具备高可用、弹性扩展、安全合规及智能运维等技术优势,广泛应用于电商、游戏、金融等行业,助力企业高效管理数据,提升业务连续性与竞争力。
|
7月前
|
SQL 存储 关系型数据库
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!
223 26
|
9月前
|
存储 缓存 自然语言处理
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
274 8
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
|
7月前
|
SQL 监控 安全
数据库安全审计系统
Next-DBM数据库审计系统助力企业解决数据安全难题,提供统一身份管理、全方位监控、智能风险识别、完整审计追溯及精细化权限管控,有效防范数据泄露与内部威胁,保障企业核心资产安全,满足合规要求,提升运维效率。
|
10月前
|
Java 数据库
jsp CRM客户管理系统(含数据库脚本以及文档)
jsp CRM客户管理系统(含数据库脚本以及文档)
209 10
|
8月前
|
SQL 数据库
软考软件评测师——数据库系统应用
本文介绍了关系数据库的基础知识与应用,涵盖候选码定义、自然连接特点、实体间关系(如1:n和m:n)、属性分类(复合、多值与派生属性)以及数据库设计规范。同时详细解析了E-R图转换原则、范式应用(如4NF)及Armstrong公理体系。通过历年真题分析,结合具体场景(如银行信用卡额度、教学管理等),深入探讨了候选键求解、视图操作规范及SQL语句编写技巧。内容旨在帮助读者全面掌握关系数据库理论与实践技能。
|
5月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
434 158