分类、标签设计及查询优化

news2025/1/1 16:23:49

文章目录

    • 问题
    • 分类和标签的设计
    • 知名开源系统的设计
      • jive论坛
      • Solo博客系统的设计
      • wordpress的数据库设计
    • 参考链接

问题

在很多业务系统中,都有对对象的分类和标签设计。在数据库层面如何设计相应的表,以及如何做查询优化,是一个比较普遍的问题。

分类和标签的设计

信息离不开搜索和分类,虽然机器学习能做到自动分类,但人工分类系统也是不可少的。
在一个系统中,有多种类型的对象,不同类型的对象都可以做分类。
为了统一处理,我把所有的分类都放到一棵树上。
不同类型的对象的分类对应于一棵子树。

例如,在我的系统中,有(博客,文摘,链接,图片,电子书)几个基本对象类型。
在分类树上,每个分类节点都可以服务于不同类型。

知名开源系统的设计

jive论坛

只有tag,没有分类,tag和帖子(thread)多对多的设计:

CREATE TABLE tag (
  tagID BIGINT NOT NULL,
  title varchar(50) default '',
  assonum int(20) NOT NULL default '0',
  PRIMARY KEY (tagID)
);
CREATE TABLE threadTag (
  threadTagID BIGINT NOT NULL,
  threadID BIGINT NOT NULL,
  tagID BIGINT NOT NULL,
  PRIMARY KEY (threadTagID),
  INDEX jiveThread_tagID_idx (tagID),
  INDEX tagID_jiveThread_idx (threadID)
);

Solo博客系统的设计

在 Solo 中一共有 3 张关联表:

  • archivedate_article:存档-文章关联
  • category_tag:分类-标签关联
  • tag_article:标签-文章关联

wordpress的数据库设计

WordPress数据库的11个数据表,没有单独的tag:

  • wp_commentmeta: 文章评论额外信息表
  • wp_comments: 文章评论信息表
  • wp_links :链接信息表
  • wp_options :基本配置信息表,通常通过get_option来操作,该表通常作为插件存储数据的一个地方。
  • wp_postmeta: 文章额外数据表,例如文章浏览次数,文章的自定义字段等都存储在这里
  • wp_posts :文章信息表,包括了日志、附件、页面等等信息。是WordPress最重要的一个数据表。
  • wp_terms :词汇表,也就是系统中各类对象。如文章、链接、标签的信息表。
  • wp_term_relationships :对象和分类的对应关系,如分类与文章信息表(wp_posts)、链接表(wp_links)的关联表。
  • wp_term_taxonomy: 分类信息表,区分wp_terms信息的分类类型,有category、link_category和tag三种分类类型。
  • wp_usermeta: 用户额外信息表 wp_users 用户基本信息表。存放系统所有用户基本信息。

在这里插入图片描述
三张表结构如下:

CREATE TABLE wp_terms (
 term_id bigint(20) unsigned NOT NULL auto_increment,
 name varchar(200) NOT NULL default '',
 slug varchar(200) NOT NULL default '',
 term_group bigint(10) NOT NULL default 0,
 PRIMARY KEY  (term_id),
 KEY slug (slug($max_index_length)),
 KEY name (name($max_index_length))
) 

CREATE TABLE wp_term_taxonomy (
 term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment,
 term_id bigint(20) unsigned NOT NULL default 0,
 taxonomy varchar(32) NOT NULL default '',
 description longtext NOT NULL,
 parent bigint(20) unsigned NOT NULL default 0,
 count bigint(20) NOT NULL default 0,
 PRIMARY KEY  (term_taxonomy_id),
 UNIQUE KEY term_id_taxonomy (term_id,taxonomy),
 KEY taxonomy (taxonomy)
) 

CREATE TABLE wp_term_relationships (
 object_id bigint(20) unsigned NOT NULL default 0,
 term_taxonomy_id bigint(20) unsigned NOT NULL default 0,
 term_order int(11) NOT NULL default 0,
 PRIMARY KEY  (object_id,term_taxonomy_id),
 KEY term_taxonomy_id (term_taxonomy_id)
) 

参考链接

  • https://www.mezgy.com/201.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/582945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MKS SERVO4257D 闭环步进电机_系列5 CAN指令说明

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口,支持MODBUS-RTU通讯协议,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈&am…

客户案例 | 思腾合力GPU算力节点助力实时云渲染

客户介绍 平行云是国内领先的云化XR概念倡导者与技术先行者,LarkXR是平行云研发的云化XR PaaS平台。LarkXR能够帮助XR领域企业级客户快速实现技术、产品及平台的云化转型,高效使能企业的云化XR业务,有效保护客户的内容安全,让多种…

ANDEAWELL:国产工业RFID替代潮即将到来!

受这两年国外的芯片供应不足,价格上涨后用户难以承受等影响,越来越多的企业选择国产替代芯片。随着国产替代芯片的应用增加,东信源芯、旗连、国芯物联等出货量也开始增加,可以预见的是,国产工业RFID替代潮即将到来! 国…

解决Maven 依赖下载不全的问题 (自测有效)

问题描述:从仓库拉代码下来 发现存在部分依赖下载不了。 解决方案:去中央仓库一个个手动下载。具体步骤如下 1.清除下载一般的依赖 (以下代码是 .bat 文件) echo off rem create by NettQunrem 这里写你的仓库路径 s…

类实例化和实例初始化

就算不写main方法里面的3句,也会执行5 1 10 6 因为main方法所在的类需要先加载和初始化 执行顺序如下:先初始化父类再初始化子类 静态实例变量显示赋值和静态代码块代码从上到下顺序执行(根据书写顺序) 子类的实例化方法&am…

【9 Vue全家桶 – Vuex状态管理】

1 什么是状态管理 其实是数据管理但是为了更好的指出是由于状态的变化导致数据的变化(响应式数据),我们称之为状态管理. 2 Vuex的状态管理 组件只能直接读取state,而不能直接修改state,必须通过mutation才能修改.(pinia可以直接读取和修改state) 3 Vuex的安装 npm install …

ModDrop++:一种具有受试者内部协同训练的动态滤波网络,用于具有缺失模态的多发性硬化病变分割

文章目录 ModDrop: A Dynamic Filter Network with Intra-subject Co-training for Multiple Sclerosis Lesion Segmentation with Missing Modalities摘要本文方法Dynamic Head with Filter ScalingIntra-subject Co-training 实验结果 ModDrop: A Dynamic Filter Network wit…

1:面向对象

文章目录 1:与equals的区别2:写算法题的时候边界条件最后考虑3:高内聚低耦合4:父类引用指向子类对象5:如何重写equals方法6:java是如果实现跨平台的7:HashMap中的重点注意事项8:局部…

快速入门Python语言:人生苦短,我用Python~~Python语言经验分享

⭐方向一:“你是如何学习/自学 Python 的?” 我通过自学的方式学习Python。我的自学方法具有良好的灵活性和自控力,在这个过程中,我注重打下坚实的基础,确保学习的深度与广度,以提高对Python语言和编程的认…

[答疑]UMLChina的Logo是不是不对劲

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> Lynn 2023-4-6 13:55 潘老师,咱umlchina的标记是不是不太对劲,火柴人指向用例的箭头是三角形似乎不合uml的标准。 UMLChina潘加宇 是的。如果按U…

张驰咨询:六西格玛绿带培训如何帮助酒店降低成本和提高客户满意度?

六西格玛是一种质量管理方法,旨在通过减少缺陷和提高效率来提高客户满意度。在酒店行业中,六西格玛可以帮助酒店降低成本和提高客户满意度的方法有:减少浪费、提高效率、优化客户体验、降低维护成本等等。下面张驰咨询给大家分享两个真实案例…

免改造数据安全技术,实现企业关键数据资产保护落地

4月26日,腾讯安全联合中国信通院“数据安全推进计划”共同在深圳举办了数据安全研讨会。炼石网络创始人兼CEO白小勇受邀出席,分享了“免改造数据安全的实践与思考”的议题,与中国信息通信研究院云计算与大数据研究所高级业务主管龚诗然、腾讯…

SpringMvc源码分析

概述 用户的请求,是如何被 DispatcherServlet 处理的 先看图 从图中可以看到请求首先是被 DispatcherServlet 所处理,但是实际上,FrameworkServlet 先被触发 我们看下处理各种请求的方法 Overrideprotected final void doGet(HttpServletR…

JavaEE进阶(5/28)SpringMVC

目录 1.什么是SpringMVC? 2.学习SpringMVC学习了什么? 3.SpringMVC核心1 4.SpringBoot传递参数 5.SpringBoot传递对象参数 6.SpringBoot传递表单 7.SpringBoot后端参数重命名 8.SpringBoot后端用来接收json对象 1.什么是SpringMVC? 1.…

如何在手机和平板中浏览三维实景模型?

对于数据量庞大的三维实景模型,想要在手机和平板中进行在线浏览并实现实时交互,一般平台很难实现这些功能。 四维轻云是一款操作简单、支持在线协作、在线展示及在线分享的三维实景模型在线浏览平台。在四维轻云平台中,用户可以创建项目&…

人生苦短,我用Python:如何入门Python的世界

人生苦短,我用Python:如何入门Python的世界 Python是一门非常简洁、易读、高效的编程语言,适合初学者入门。自从1991年问世以来,Python已经在全球范围内成为了众多工程师、科研人员、数据分析师等人群的首选编程语言。本文将详细…

数据库DBMS并发控制

pgsql(PostgreSQL)常用命令行操作_pgsql常用命令_石头wang的博客-CSDN博客 事务的操作和事务的性质 操作演示 三种典型数据不一致现象: 串行调度和可串行调度 串行调度 顾名思义 就是可以进行调度的意思 可串行调度 就是 一种和串行调度等价的并行调…

Quest 3初体验,或是苹果MR最大竞争对手

随着苹果MR临近,我们从彭博Mark Gurman了解到更多消息。昨日,Mark Gurman发布了Quest 3上手体验文章,并认为Quest 3可能是苹果MR头显最大的竞争对手。 1,Meta是XR头显领导者 尽管WWDC 23苹果MR将会成为最大的主角,但…

Android音视频开发2:So库适配总结

名词解析 Android NDK 是在SDK前⾯⼜加上了原⽣⼆字,即Native Development Kit,因此⼜被Google称为 NDK。C/C编写代码。so 为共享库,是shared object。 前⾔ ⽇常开发我们经常会使⽤到第三库,涉及到底层的语⾳,视频等都需要…

【虚拟机】VMware虚拟机安装Windows 10系统 详细教程

大家好,我是雷工! 由于购买的电脑自带系统为windows11家庭版,而有些软件无法在家庭版中安装,所以考虑用虚拟机再装个Windows10专业版系统。 前一段时间在Windows11 家庭版上安装的KingSCADA软件运行时总反应很慢,准备…