软件系统【标签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通过引入映射表,优化了标签与文章之间的关系管理,提高了查询效率和系统的可维护性。这种方案更适合需要高效检索和频繁更新内容的系统。

目录
相关文章
|
20天前
|
SQL 数据库 微服务
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
|
18天前
|
存储 SQL 关系型数据库
现代数据库管理系统的发展与挑战
数据库管理系统(DBMS)作为现代软件开发的核心组成部分,其在数据存储、管理和访问方面的演进至关重要。本文探讨了现代DBMS的发展历程、关键技术特点以及面临的挑战,包括大数据处理、云计算环境下的优化和安全性等方面。 【7月更文挑战第7天】
|
6天前
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用合集之如何实现类似mysql实例中的数据库功能
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
16天前
|
存储 自然语言处理 DataWorks
通过云上数据库三步构建RAG系统
本文介绍了如何使用OpenSearch LLM智能问答版通过云上数据库一站式构建RAG系统。
19302 10
|
3天前
|
消息中间件 缓存 架构师
一个合格的架构师应该怎样处理数据库、调度系统、消息队列、分布式缓存等软件
一个合格的架构师应该怎样处理数据库、调度系统、消息队列、分布式缓存等软件
|
10天前
|
数据库管理 Python
在停车场管理系统工程中,我们可能会涉及到硬件设计、软件编程、数据库管理、用户界面设计等多个方面
在停车场管理系统工程中,我们可能会涉及到硬件设计、软件编程、数据库管理、用户界面设计等多个方面
|
19天前
|
数据库
超算系统构思01----数据库必须有一个公式系统,右侧选择你想要的公式,要明白的地方,公式在计算机上的表达,数据库必须记住的东西是公式,先做公式,必须得做
超算系统构思01----数据库必须有一个公式系统,右侧选择你想要的公式,要明白的地方,公式在计算机上的表达,数据库必须记住的东西是公式,先做公式,必须得做
|
20天前
|
存储 安全 算法
数据库系统工程师笔记(一)计算机系统
数据库系统工程师笔记(一)计算机系统
38 0
|
19天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
17天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。