新闻资讯类系统 - 稿件分类和标签的设计
新闻资讯类系统 ---- 文章分类和标签的设计
零. 简介
博客、 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 查找文章, 使用二级索引, 查找效率高。 索引可以参考笔者的这篇文章:索引的设计。
版权声明:本文为博主原创文章,未经博主允许不得转载。