需求背景
目前主流的博客系统,CMS都有TAG标签系统,不仅加强了内容链接的结构化,而且可以通过TAG来区分文章。 与传统的Keyword模式相比,该Tag模式可以单独设计Map的映射表,提高系统负载和查询效率。
数据库设计方案1
该方案分为两个表。
1 .标签表
2 .文章表
Tag表结构:
复制代码的话就是:
tagID # tag标签的id
标记#标记的内容
num #当前Tag的引用数
文章表格结构:
复制代码的话就是:
ID #文章ID
title #文章标题
tags #tags列表、多个、分割
tagID #tags的id有多个,被分割
.
在这种方式下,Tag标签的主要内容保存在文章表中,对Tag表的压力很小,虽然在添加时只是更新Tag的引用数,但是查询时的效率不够高,不是一个好方法。
数据库设计方案2
第二种方案使用两个Tag表。 一个保存Tag信息,另一个保存映射信息。
Tag表:
复制代码的话就是:
tagID # tag标签的id
标记#标记的内容
num #当前Tag的引用数
标签映射表
复制代码的话就是:
tagid
智能手机
文章的正面
复制代码的话就是:
ID #文章ID
title #文章标题
tags #tags列表、多个、分割
.
每次发布内容或修改内容时,此格式都会更新Tag和Tagmap表。
查询时,需要从Tagmap表中查找响应的文章ID,并使用文章ID查询具体的文章信息。 因为每次查询都使用索引,所以很有效率。
数据库设计方案3
前两个方案使用纯Mysql设计,第三个方案使用Nosql吸引力设计。
基本结构与方案2相同,只需在Tag表和Tagmap表中使用nosql数据库服务器(如mongo/redis ),即可发挥nosql数据库强大的线性查询能力。
1 )第一种方式的表结构设计与方案2完全相同,只是数据库服务器发生了变化。
2 )其他方案当然是发挥Nosql的线性能力设计存储器的Key。 特别是在使用redis的情况下,使用的Key的结构能够完全提高查询效率
参考:
3358 www.cn blogs.com/adandelion/archive/2009/07/29/1533854.html