新闻资讯类系统 ---- 文章分类和标签的设计

零. 简介

博客、 CMS(网易新闻、 腾讯新闻) 之类的系统, 核心就是文章, 一切的一切都围绕着文章进行, 所以设计一个好的文章分类和标签的数据库关系模型, 对后续编码及维护将会起到至关重要的作用。



一. 分类

一篇文章, 比如 《大陆 ** 明星又离婚了》 这属于 「娱乐」 类新闻, 又属于 「中国」 分类下的新闻, 所以文章和分类的关系一般是 1 对 N 。 

数据库表结构设计
article :
        
字段名 注释
id
title 文章标题
author 作者
create_time 创建时间
edit_time 修改时间
creator 创建者
editor 修改者
等等...


category:
字段名 注释
id
article_id 文章 id
category_name 分类名
subcategory_id 子分类(与分类一对多的关系, 不一定需要子分类)
子分类可以依次类推, 想分多细分多细, 看需求

就以只有分类为例(是否含子分类其实原理类似), 这样其实 left join 就可以出来结果, 但是这样的结果不适合展示, 因为多个分类查出的一篇文章就有几行结果(对于 SQL 来说几个分类就几条数据), 所以在后台管理的文章列表页面中, 一次查文章, 还有一次根据文章 id 查出所有分类, 两次查询结果和起来才能显示一条结果,如下表格所示:

标题 分类
《大陆 ** 明星又离婚了》 「大陆」 「娱乐」



二. 标签

还是以 《大陆 ** 明星又离婚了》 为例, 可以打上标签 「明星」、 「大陆」、 「离婚」、 「娱乐」, 是一种 N 对 N 的关系。
标签的作用是什么呢? 一个是你可以根据标签更快地搜索到你想要看到的所有文章, 一个是网站可以利用标签的使用次数展示出热门标签(如某些博客展示一个部分标签, 有的字体大, 有的字体小, 可能就是根据标签的引用数来设置字体大小, 从而突出展示热门标签)。

数据库表结构设计

tag:
字段名 注释
id  
tag_name 标签名
article_number 打上该标签的文章数

article_to_tag (文章和标签关系中间表):

字段名 注释
id  
tag_id 标签 id
article_id 文章 id

为什么要设计中间表呢?
使用一张中间表, 查询从 article_to_tag 查找相应文章 id, 然后根据 id 查找文章, 使用二级索引, 查找效率高。 索引可以参考笔者的这篇文章:索引的设计

你可能感兴趣的:(Java,相关,码字人生)