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

目录
相关文章
|
1天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
20 3
|
1天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
10 2
|
13天前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
44 3
|
14天前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
16 2
|
15天前
|
安全 NoSQL 关系型数据库
阿里云数据库:构建高性能与安全的数据管理系统
在企业数字化转型过程中,数据库是支撑企业业务运转的核心。随着数据量的急剧增长和数据处理需求的不断增加,企业需要一个既能提供高性能又能保障数据安全的数据库解决方案。阿里云数据库产品为企业提供了一站式的数据管理服务,涵盖关系型、非关系型、内存数据库等多种类型,帮助企业构建高效的数据基础设施。
34 2
|
16天前
|
存储 NoSQL 关系型数据库
数据库管理系统
【10月更文挑战第8天】
41 1
|
1天前
|
XML 数据库 数据格式
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
5 0
|
12天前
|
运维 NoSQL BI
简道云搭载阿里云MongoDB数据库,帮助数以万计企业重构业务系统
通过与MongoDB和阿里云团队的合作,让简道云少走了弯路,保障了线上服务的长期稳定运行,提高了吞吐效率,并相应降低了线上运行成本
|
15天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
50 3
Mysql(4)—数据库索引
|
1天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
10 2