文章标签设计方法,文章Tags数据库设计方法举例

下面我们以wordpress和sablog为例,说说wordpress和sablog在tag数据库结构设计和程序方面的差别,希望大家能从中学习文章标签设计方法。

sablog的sablog_articles表

`keywords` varchar(120) NOT NULL default ”,

keywords字段: 以 “,” 分隔所有这篇文章使用到的tag

sablog的sablog_tags表

PHP代码
1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `sablog_tags` (
`tagid` int(11) unsigned NOT NULL auto_increment,
`tag` varchar(100) NOT NULL default '',
`usenum` int(11) NOT NULL default '0',
`aids` text NOT NULL,
PRIMARY KEY  (`tagid`),
KEY `usenum` (`usenum`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8  ;

tag字段: 存放tag名称
usenum字段: 存放使用这个tag的文章总数
aids字段: 以 “,” 分隔所有使用这个tag的文章id

显示文章tag的时候,是这么写的

PHP代码
1
2
3
4
5
6
7
8
$tagdb = explode(',', $article['keywords']);    $articletags = $tmark = '';    for($i=0; $i<count($tagdb); $i++) {    $tagdb[$i] = trim($tagdb[$i]);    $articletags .= $tmark.'<a href="./?action=tags&item='.urlencode($tagdb[$i]).'">'.htmlspecialchars($tagdb[$i]).'</a>';    $tmark = ', ';    }    $article['tags'] = $articletags;

取出sablog_articles表keywords字段,explode后生成链接

显示相关文章的程序部份

PHP代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  $tags = $comma = '';    for($i=0; $i<count($tagdb); $i++) {    $tags .= $comma."'".addslashes($tagdb[$i])."'";    $comma = ',';    }    $query = $DB->query("SELECT aids FROM {$db_prefix}tags WHERE tag IN ($tags)");    $relaids = 0;    while ($tag = $DB->fetch_array($query)) {    $relaids .= ','.$tag['aids'];    }    $relids = explode(',', $relaids);    // 清除重复值的单元并删除当前ID    $relids = array_unique($relids);    $relids = array_flip($relids);    unset($relids[$articleid]);    $relids = array_flip($relids);    $related_tatol = count($relids);    $relids = implode(',',$relids);    if ($related_tatol > 1 && $relids != $articleid) {    $order = in_array($options['related_order'], array('dateline', 'views', 'comments')) ? $options['related_order'] : 'dateline';    $query = $DB->query("SELECT articleid,title,views,comments FROM {$db_prefix}articles WHERE visible='1' AND articleid IN ($relids) ORDER BY ".$order." DESC LIMIT ".intval($options['related_shownum']));    $titledb=array();    while ($title = $DB->fetch_array($query)) {    $title['title'] = trimmed_title($title['title'], $options['related_title_limit']);    $titledb[] = $title;    }    unset($title);    $DB->free_result($query);    }

取出sablog_articles表keywords字段,生成取得aids的查询条件$query = $DB->query(“SELECT aids FROM {$db_prefix}tags WHERE tag IN (‘tag1′,’tag2′,’tag3′)”);

从而得到所有包含tag1,tag2,tag3的文章id, 注意aids字段的内容,上面我已经说明了aids字段: 以 “,” 分隔所有使用这个tag的文章id

wordpress则用到了4张表wp_posts, wp_terms, wp_term_relationships, wp_term_taxonomy
wordpress在新版里,数据库结构有了调整,结构和名称与以前的不一样,category和tag合并了,区别在wp_term_taxonomy里taxonomy字段
category则taxonomy字段内容为category
tag则taxonomy字段内容为post_tag
wp_posts里不存放任何tag数据
wp_terms表用于存放tag和category,结构如下

PHP代码
1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `wp_terms` (
`term_id` bigint(20) NOT NULL auto_increment,
`name` varchar(55) NOT NULL default '',
`slug` varchar(200) NOT NULL default '',
`term_group` bigint(10) NOT NULL default '0',
PRIMARY KEY  (`term_id`),
UNIQUE KEY `slug` (`slug`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

`wp_terms`里的 term_id 和 `wp_term_taxonomy` 里的 term_id 关联
`wp_posts`里的 ID 和 wp_term_relationships 里的 object_id 关联
`wp_term_relationships`里的 term_taxonomy_id 和 `wp_terms` 里的 term_id 关联
先说到这吧,具体的去看数据库,熟练的程序员,由数据库结构,就能知道程序是怎么写的了

wordpress的tag数据库结构要清晰条理得多,sablog的tag数据库结构就不太利于维护,但对于2者在显示方面的性能,我还没有做测试。

自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

文章标签设计方法,文章Tags数据库设计方法举例相关推荐

  1. IDEF1x语义建模方法及其在数据库设计中的应用

    IDEF1x语义建模方法及其在数据库设计中的应用 李俊平 (深圳职业技术学院计算机软件工程系 广东深圳 518055) 摘要:IDEF1x是在E-R方法中引入语义的一种数据库概念建模方法,对E-R方法 ...

  2. (数据库系统概论|王珊)第七章数据库设计-第一节:数据库设计概述

    注意:此部分内容和软件工程的知识点重合较多,更多请点击[免费分享]软件工程核心知识点 本章较分散,各节导航如下 (数据库系统概论|王珊)第七章数据库设计-第二节:需求分析 (数据库系统概论|王珊)第七 ...

  3. 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》...

    一.课程笔记 1.1  软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...

  4. 数据库设计的步骤(数据库设计概述)

    数据库设计概述 数据库设计是指对于一个给定的应用环境,设计一个优良的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据 ...

  5. 餐饮管理系统 mysql数据库设计分析_终稿课程设计_餐饮管理系统数据库设计.docOK版(样例3)...

    <课程设计_餐饮管理系统数据库设计.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)课程设计_餐饮管理系统数据库设计.doc(OK版)>相关文档资源请在帮帮文库(www ...

  6. 面向对象方法中的数据库设计

    转自:http://blog.csdn.net/coffeewoo/article/details/5291582 在面向对象中,是没有数据流这一说法的.业务的完成是由对象及消息来完成的,只有&quo ...

  7. 数据库设计方法与规范 数据库设计过程

    数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求. 数据库设计中需求分析阶段综合各个用 ...

  8. mysql数据库设计的原则_MySQL数据库设计原则

    转自 http://www.supidea.com/post/mysql_design_database.aspx MySQL数据库设计原则 MySQL对于成为一个非常快速的数据库服务器有着当之无愧的 ...

  9. 数据库设计(二)——数据库设计原则

    一.数据库表的设计原则 1.不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计:不同组件间所对应的数据库表之间的关联应尽可能减少,如果不 ...

  10. 数据库设计五要点 让数据库设计更加规范

    通常情况下,可以从两个方面来判断数据库是否设计的比较规范.一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少.若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的.当然这是两个泛泛而谈的 ...

最新文章

  1. java 正則_Java正則表達式入门
  2. go语言goroutine的取消
  3. 开源会议系统openmeetings安装
  4. 强大的独立日期选择器(date picker)插件 - Kalendae
  5. echarts formatter_牛X!用 Echarts 打造一个轮播图!
  6. Web Hacking 101 中文版 十、跨站脚本攻击(一)
  7. MAC下Android的Eclipse开发环境的搭建 转自MacroCheng
  8. 《Android面试宝典》学习笔记(第三章:组件)
  9. mathematica 如何在数组中等间隔插入元素
  10. 微博java版_新浪微博JAVA通用版
  11. Visio 2019/2016中文版零基础入门视频教程
  12. [设计]2019年全国电子设计竞赛A题-电动小车动态无线充电系统
  13. 游戏HTML翻翻乐,大班益智游戏翻翻乐优秀教案
  14. 【华人学者风采】Ting Xu 加州大学伯克利分校
  15. axure sketch 对比_Sketch to Axure RP插件下载
  16. 通用计算机与嵌入式的比较,嵌入式系统与通用计算机系统相比有什么特点?如题 谢谢了...
  17. 纯web端实现条形码识别
  18. SQL Server安全(2/11):身份验证(Authentication)
  19. 无需外源库Python小游戏
  20. 零起点魔兽争霸3UI布局编辑器 预览版

热门文章

  1. Oracle12C 基本操作和使用
  2. 【C#】委托,方法回调,匿名函数,拉姆达表达式
  3. HFSS 3D LAYOUT TDR仿真
  4. 考研数学笔记(更新中)
  5. linux java调优
  6. mysql 通达信公式_公式选股--均线黏合(更多公式关注公众号“斯达克逻辑”)...
  7. 安装Linux启动盘【准备8G以上U盘即可】
  8. hexo入门学习(四):文章(带图片)
  9. 电影TS/TC/SCR/R5/BD/HD/HC版本意思收集(转)
  10. DELL服务器 RAID 配置详解