3种高效的Tags标签系统数据库设计方案分享_Mysql

需求背景

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

数据库设计方案1

此方案分为2个表:

1.Tag表
2.文章表

Tag表表结构:

复制代码 代码如下:

tagid # tag标签的ID
tagname #tag内容
num #当前Tag的引用个数

文章表结构:

复制代码 代码如下:

ID #文章ID
title #文章标题
tags #tags列表,多个以,分割
tagid #tags的ID 多个以,分割
...

此种方式Tag标签主要内容保存在 文章表 中,对于Tag表的压力较小,只是添加的时候更新一下Tag的引用数量,但是查询的时候效率不足,不是好办法

数据库设计方案2

第二种方案使用2个Tag表,其中一个保存Tag信息,另一个保存映射信息:

Tag表:

复制代码 代码如下:

tagid # tag标签的ID
tagname #tag内容
num #当前Tag的引用个数

Tagmap表

复制代码 代码如下:

tagid
aid

文章表

复制代码 代码如下:

ID #文章ID
title #文章标题
tags #tags列表,多个以,分割
...

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

查询的时候需要从Tagmap表中查找响应的文章ID,然后使用文章ID去查询具体的文章信息,因为每次查询都是使用索引,所以效率较高。

数据库设计方案3

前两种方案都是使用纯粹的Mysql来设计的,第三种方案将使用Nosql的魅力来设计。

基本结构同方案2,只是在Tag表和Tagmap表中使用mongo/redis这样的nosql数据库服务器,这样可以发挥nosql数据库强大的线性查询能力。

1) 第一种方式的表结构设计与方案2完全相同,只是数据库服务器换了。

2)其他的方案,当然是发挥Nosql的线性能力来设计存储的Key了,尤其是使用redis的时候,使用的Key的结构可以完美的提高查询效率

时间: 2024-08-30 00:58:22

3种高效的Tags标签系统数据库设计方案分享_Mysql的相关文章

帝国CMS系统tags标签出现空tags标签解决办法

具体解决办法 /* e/class/t_functions.php 搜索 */  代码如下 复制代码 $str.=$jg.'<a href="'.$tagsurl.'" target="_blank">'.$r[$i].'</a>'.$br; $jg=$br?'':$showjg; /* 改成 */  代码如下 复制代码 if(!empty($r[$i])){   $str.=$jg.'<a href="'.$tagsurl.

云端海量任务调度系统数据库设计 - 阿里云RDS PostgreSQL案例

标签 PostgreSQL , 任务调度系统 , 数据库设计 , schemaless 背景 任务调度系统中的任务状态管理,通常会用到数据库来存储任务调度的过程状态,控制任务的锁等. <advisory lock 实现高并发非堵塞式 业务锁> 如果是小量任务,是挺好实现的,但是每小时处理几十亿或者几亿的任务,如何设计这样的任务状态管理数据库呢? 挑战 对于一个面向多个用户的任务调度平台(例如云端的任务调度平台,将面向所有租户使用). 较大的挑战是任务数据的写入(海量),另一个是任务状态的更新(

SQL Server 移动系统数据库_mssql2005

说到这个问题,基本上有人就会想到三个问题: 1,什么是系统数据? 2,为什么要移动系统数据库? 3,移动系统数据库我们可以用附加和分离,为什么还要单独拿出来说呢? 对于这三个问题我一个一个讲吧,也算是自己做个笔记. 1,什么是系统数据? 所谓系统数据库就是我们在装SQL Server之后,系统自带的数据库(这样的回答是不是很白痴^_^). 如果你装SQL Server2005或2008在打开一个SQL实例后,就会看到一个数据库--->系统数据库文件夹,里边就是系统自带的数据库,如图: 对于每一个

恢复系统数据库

msdb-包含了有关作业.报警及操作员等信息如果包含系统数据库的介质变了,那么必须重建系统数据库,如果你仍然可以启动SQL Server服务,则可以通过RESTORE语句从系统数据库的备份中恢复数据库. 关于系统数据库的恢复总结如下: 在SQL Server数据库中,系统信息存储在系统数据库中,主要的系统数据库包括: master-从整体上控制用户数据库和SQL Server操作,在创建了任何用户定义的对象后,都要备份它. model-为新数据库提供模版和原型 msdb-包含了有关作业.报警及操

SQL Sever 2000的系统数据库和索引

数据|数据库|索引 SQL Sever 2000的系统数据库和索引   学习人:HSLY 学习书籍:SQL Server 2000入门与提高 撰写日期:2004-7-12 章节:4.1 P44   9.6.1P126   SQL Server 2000 在安装过程中,创建了4个系统数据库,这4个系统数据库是运行SQL Server 2000的基础,建立在这4个系统数据库中的表格奠仪了运行和使用SQL Server的规则.这4个数据库分别是:master, model, tempdb, masdb

备份和恢复系统数据库

    系统数据库保存了有关SQL Server 的许多重要数据信息,这些数据的丢失将给系统带来极为严重的后果,所以我们也必须对系统数据库进行备份.这样一旦系统或数据库失败,则可以通过恢复来重建系统数据库.在SQL Server 中重要的系统数据库主要有master. msdb. distribution. model. 虽然tempdb 也是系统数据库但没有必要对其进行备份,因为SQL Server 每次启动都会重新创建该数据库,而当SQL Server 停止运行时,tempdb 数据库中所有

如何恢复系统数据库?

恢复|数据|数据库                     如何恢复系统数据库如何恢复系统数据库? 关于系统数据库的恢复总结如下: 在SQL Server数据库中,系统信息存储在系统数据库中,主要的系统数据库包括:master-从整体上控制用户数据库和SQL Server操作,在创建了任何用户定义的对象后,都要备份它model-为新数据库提供模版和原型msdb-包含了有关作业.报警及操作员等信息如果包含系统数据库的介质变了,那么必须重建系统数据库,如果你仍然可以启动SQL Server服务,则可

关于系统数据库的恢复和备份技术

备份|恢复|数据|数据库 关于系统数据库的恢复总结如下: 在SQL Server数据库中,系统信息存储在系统数据库中,主要的系统数据库包括: master-从整体上控制用户数据库和SQL Server操作,在创建了任何用户定义的对象后,都要备份它 model-为新数据库提供模版和原型 msdb-包含了有关作业.报警及操作员等信息如果包含系统数据库的介质变了,那么必须重建系统数据库,如果你仍然可以启动SQL Server服务,则可以通过RESTORE语句从系统数据库的备份中恢复数据库. 如果mas

PHP.MVC的模板标签系统之初识PHP.MVC

模板 PHP.MVC的模板标签系统(PhpMVC_Tags)现在提供了3种类型的标签:包含指令,声明和表达式. 包含指令能让我们将内容分隔为许多模块,比如:页眉,页脚或者内容.包含的页面可以是HTML,或者其他标签模板页.据个例子,下面的包含指令能用来包含一个页眉: <@ include 'pageHeader.ssp' @>  声明允许我们在模板种声明一个页面级别的变量,或者甚至其他包含页面.一个声明看起来像以下代码: <@ salesAreaID = "Central Di