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

零. 简介

博客、 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 查找文章, 使用二级索引, 查找效率高。 索引可以参考笔者的这篇文章:索引的设计

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 02:08:50

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

文章分类和标签的数据库设计

几乎在所有web项目中,都涉及文章分类和标签的设计,应该说这是一个比较常见.典型的案例.站长并不保证我的思路就是最好的,只是分享出来大家一起交流一下,互相促进与提高. 我们假设的开发项目是一个博客系统,最核心的部分就是与文章相关的,那么我们今天讨论如何设计博客系统的文章分类和标签. 1.首先,分类和标签都是要和具体的文章相关联的,当然也可能一些文章既没有分类也没有标签,这一点是大家在写查询的时候容易疏忽的地方.因为我们的第一感觉就是,在查询文章列表的时候关联分类表,查出所有的文章和分类,对应关系

iOS开发之资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0+)

今天博客中,我们就来实现一下一些常用资讯类App中常用的分类选择的控件的封装.本篇博客中没有使用到什么新的技术点,如果非得说用到了什么新的技术点的话,那么勉强的说,用到了一些iOS9以后UICollectionView添加的一些新的特性.本篇博客所涉及的技术点主要有UICollectionView的Cell移动,手势识别,控件封装,闭包回调,面向接口编程,Swift中的泛型等等.这些技术点在之前的博客中也多次使用到,只不过本篇博客使用这些技术点来完成我们的具体需求. 一.实例运行效果 先入为主,

新闻资讯客户端类产品分析

这个是求职篇,决定从本人最常用的客户端--新闻资讯入手. 竞品包括:商业网站代表--“网易新闻”,传统媒体代表--“澎湃新闻”,个人定制代表--“今日头条”,地方新闻代表--“浙江新闻”. 本文从以下几点开始着手: 1.你理解的新闻怎么定义的,哪些属于新闻?     以及各大客户端对“新闻资讯”的定位. 2.这些新闻是怎么通过界面的内容和表现形式引导和呈现大家的? 3.上面各大新闻客户端的亮点和不足有哪些? 先从第一个问题开始: 你理解的“新闻”是什么,包括哪些? 正所谓“有人的地方,就有江湖”

WordPress页面,文章,分类等的条件判断的标签集合

is_home()判断是否为首页. The Front Page 首页头版消息设置is_front_page()判断是否为首页头版消息. (无论是日志或是页面).当系统显示博客主页且管理面板的设置>阅读菜单下 “主页显示为”选项设 为最近发表的文章”,或者’设置>阅读菜单下”主页显示为”选项设为且”主页”是当前被显示的页面时,is_front_page() 标签返回 TRUE. The Administration Panels 管理控制面板is_admin()判断是否为后台管理控制面板. A

《IT蓝豹》PlayNewsStandDemo资讯类新闻客户端框架

PlayNewsStandDemo资讯类新闻客户端框架,支持tab滑动切换,当切换到最左边或者最后边的时候停止滑动本例子切换tab的效果根据AccelerateDecelerateInterpolator来实现,主要根据ViewPager来实现的,自定义PagerSlidingTabStrip,KenBurnsView来实现不错的效果.主要实现类 ScrollTabHolderFragment 继承一个抽象类实现的public abstract class ScrollTabHolderFrag

统计各个分类和标签下的文章数

作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在我们的博客侧边栏有分类列表和标签列表,显示博客已有的全部文章分类.现在想在分类名和标签名后显示该分类或者标签下有多少篇文章,该怎么做呢?最优雅的方式就是使用 django 的 annotate 方法. Model 回顾 回顾一下我们的 model 代码,django 博客有一个 Post 和 Category 模型,分别表示文章和分类: blog/models.py class

资讯类网站的运营思路

资讯站,在指以文章为主的网站,这是互联网站的最基本组成形态之一,也是web1.0的基本表现形式.很多个人或公司建站,都是从资讯站开始的.中国互联网上最具代表的资讯站非新浪莫属.最早的新浪,只专注做一件事,就是把传统媒体的新闻搬到互联网上,从而成为中国最大的新闻门户. 虽然现在大唱web2.0之歌,甚至连新浪也在积极寻求转型,进行二次创业,但是资讯站这种形式绝不会成为历史.相反,在很长一段时间内,它还将继续作为网站的基本形态出现在互联网上,本文将详细介绍如何运营和推广资讯类网站.澳门威尼斯人赌场

<Machine Learning in Action >之二 朴素贝叶斯 C#实现文章分类

def trainNB0(trainMatrix,trainCategory): numTrainDocs = len(trainMatrix) numWords = len(trainMatrix[0]) pAbusive = sum(trainCategory)/float(numTrainDocs) p0Num = ones(numWords); p1Num = ones(numWords) #change to ones() p0Denom = 2.0; p1Denom = 2.0 #c

新闻APP后端系统架构成长之路

前言:一年来从接受APP后端工作到现在可谓一路艰辛,中间踏过无数坑坑洼洼,也从中学到很多很多,之前领导也多次提醒,平时多总结.把经验形成系统,但平时大部分时间一直在忙于开发.处理问题,天天马不停蹄的往前走.眼看着春节将至,16年又过去了,业务有了很大发展,我们系统也愈加完善.之前一直也没有时间静下心来后头看看,眼下随着6.0版本开发上线完毕,稍得片刻喘息,自己也想想,也是时候回头看看.总结一下了. 1,初入圣地 2,筑基:完全重构 3,金丹:踩坑..而且是踩大坑 4,元婴:面临挑战,流量来袭 5