零. 简介
博客、 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 查⽂章,使⽤⼆级索引,查效率⾼。索引可以参考笔者的这篇⽂章:。
发布评论