# 13.2 数据库设计
我们设计的博客是一个单用户的博客,目前很多用户都采用wordpress作为自己的博客系统,包括我自己也在使用wordpress,我们知道wordpress系统的一个主页乐观的估计也有20余次查询,但这依然无法阻挡这款程序的流行,在去年对全球top10 blogger所使用的系统调查中,wordpress比其他系统有着明显的优势。
但是我们这次演示的博客系统是一个单用户的系统所以查询肯定不需要20余次,数据库的结构也相对的简单很多,因此单用户系统设计重点在于灵活性和结构化,当我们集中地暴露系统瓶颈,从另一个方面也可以集中精力去解决它。例如把数据库从MySQL改成redis。
博客主要分为博文、分类、页面、评论、用户、友情链接、tag,那么我们可以采用内容表存储一些实体相关的信息:文章内容、草稿、页面等信息,meta表保存分类、tag等信息,关系表维护两者的关系,评论表存储用户的评论,用户表存储博客用户的信息。
## 内容表
这张表主要用来存储内容实体信息,主要的表结构如下所示
| 键名 |
类型 |
属性 |
解释 |
| cid |
int(10) |
主键,非负,自增 |
post表主键 |
| title |
varchar(200) |
可为空 |
内容标题 |
| slug |
varchar(200) |
索引,可为空 |
内容缩略名 |
| created |
int(10) |
索引,非负,可为空 |
内容生成时的GMT unix时间戳 |
| modified |
int(10) |
非负,可为空 |
内容更改时的GMT unix时间戳 |
| text |
text |
可为空 |
内容文字 |
| order |
int(10) |
非负,可为空 |
排序 |
| order |
int(10) |
非负,可为空 |
排序 |
| authorId |
int(10) |
非负,可为空 |
内容所属用户id |
| type |
varchar(16) |
可为空 |
内容类别 |
| status |
varchar(16) |
可为空 |
内容状态 |
| password |
varchar(32) |
可为空 |
受保护内容,此字段对应内容保护密码 |
| commentsNum |
int(10) |
非负,可为空 |
内容所属评论数,冗余字段 |
## 关系表
这张表维护着内容表和扩展表之间的关系
| 键名 |
类型 |
属性 |
解释 |
| cid |
int(10) |
主键,非负 |
内容主键 |
| mid |
int(10) |
主键,非负 |
扩展表主键 |
## meta表
这张表主要用来存储和内容相关联的一些扩展信息,包括tag、分类之类的信息
| 键名 |
类型 |
属性 |
解释 |
| mid |
int(10) |
主键,非负 |
扩展表主键 |
| name |
varchar(200) |
可为空 |
名称 |
| slug |
varchar(200) |
索引,可为空 |
扩展缩略名 |
| type |
varchar(32) |
可为空 |
扩展类型 |
| description |
varchar(200) |
可为空 |
扩展描述 |
| count |
int(10) |
非负,可为空 |
扩展所属内容个数,冗余字段 |
| order |
int(10) |
非负,可为空 |
扩展排序 |
## 评论表
实体内容表相应的评论信息表
| 键名 |
类型 |
属性 |
解释 |
| coid |
int(10) |
主键,非负,自增 |
comment表主键 |
| cid |
int(10) |
索引,非负 |
post表主键,关联字段 |
| cid |
int(10) |
索引,非负 |
post表主键,关联字段 |
| created |
int(10) |
非负,可为空 |
评论生成时的GMT unix时间戳 |
| text |
text |
可为空 |
评论内容 |
| type |
varchar(16) |
可为空 |
评论类型 |
| status |
varchar(16) |
可为空 |
评论状态 |
| author |
varchar(200) |
可为空 |
评论用户 |
## 用户表
存储博客系统中用户的信息:
| 键名 |
类型 |
属性 |
解释 |
| uid |
int(10) |
主键,非负,自增 |
user表主键 |
| username |
varchar(32) |
唯一 |
用户名 |
| password |
varchar(32) |
可为空 |
用户密码 |
| created |
int(10) |
非负,可为空 |
用户注册时的GMT unix时间戳 |
| lastlogin |
int(10) |
非负,可为空 |
最后登录时间 |
## 配置表
网站的配置信息表:
| 键名 |
类型 |
属性 |
解释 |
| name |
varchar(32) |
主键 |
配置名称 |
| uid |
int(10) |
主键,非负 |
配置所属用户,默认为0(全局配置) |
| value |
text |
主键,非负,自增 |
配置值 |
上面设计了一个完整的博客系统所拥有的一些功能的表,基于这些表我们可以设计出来一个强大的单用户博客,基本能够实现wordpress的一些基础单用户博客的功能。
## links
* [目录]()
* 上一章: [项目规划](<13.1.md>)
* 下一节: [自定义路由器设计](<13.3.md>)