修改了十三章的一些内容
This commit is contained in:
18
13.1.md
18
13.1.md
@@ -29,17 +29,19 @@ gopath是一个文件系统的目录,我们可以随便设置一个目录为go
|
||||
根据上面的应用程序流程设计,博客的目录结构设计如下:
|
||||
|
||||
|——main.go 入口文件
|
||||
|——configs 配置文件和处理模块
|
||||
|——conf 配置文件和处理模块
|
||||
|——controllers 控制器入口
|
||||
|——core 最小化的MVC框架
|
||||
|——logs 日志处理模块
|
||||
|——models 数据库处理模块
|
||||
|——utils 辅助函数库
|
||||
|——static 静态文件目录
|
||||
|——views 视图库
|
||||
|
||||
## 总结
|
||||
本小节介绍了博客系统从设置gopath到目录建立这样的基础信息,也介绍了将要采用的MVC模式,博客系统中数据流的执行流程,最后通过这些流程设计了博客系统的目录结构,至此我们完成了一个大框架的搭建,接下来的几个小节我们将会逐个实现。
|
||||
## links
|
||||
* [目录](<preface.md>)
|
||||
* 上一章: [构建博客系统](<13.md>)
|
||||
## 框架设计
|
||||
为了实现博客的快速搭建,打算基于上面的流程设计开发一个最小化的框架,框架包括路由功能、支持REST的控制器、自动化的模板渲染,日志系统、配置管理。
|
||||
|
||||
## 总结
|
||||
本小节介绍了博客系统从设置gopath到目录建立这样的基础信息,也介绍了将要采用的MVC模式,博客系统中数据流的执行流程,最后通过这些流程设计了博客系统的目录结构,至此我们完成了一个大框架的搭建,接下来的几个小节我们将会逐个实现。
|
||||
## links
|
||||
* [目录](<preface.md>)
|
||||
* 上一章: [构建博客系统](<13.md>)
|
||||
* 下一节: [数据库设计](<13.2.md>)
|
||||
308
13.2.md
308
13.2.md
@@ -1,5 +1,313 @@
|
||||
# 13.2 数据库设计
|
||||
我们设计的博客是一个单用户的博客,目前很多用户都采用wordpress作为自己的博客系统,包括我自己也在使用wordpress,我们知道wordpress系统的一个主页乐观的估计也有20余次查询,但这依然无法阻挡这款程序的流行,在去年对全球top10 blogger所使用的系统调查中,wordpress比其他系统有着明显的优势。
|
||||
|
||||
但是我们这次演示的博客系统是一个单用户的系统所以查询肯定不需要20余次,数据库的结构也相对的简单很多,因此单用户系统设计重点在于灵活性和结构化,当我们集中地暴露系统瓶颈,从另一个方面也可以集中精力去解决它。例如把数据库从MySQL改成redis。
|
||||
|
||||
博客主要分为博文、分类、页面、评论、用户、友情链接、tag,那么我们可以采用内容表存储一些实体相关的信息:文章内容、草稿、页面等信息,meta表保存分类、tag等信息,关系表维护两者的关系,评论表存储用户的评论,用户表存储博客用户的信息。
|
||||
|
||||
## 内容表
|
||||
这张表主要用来存储内容实体信息,主要的表结构如下所示
|
||||
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>键名</td>
|
||||
<td>类型</td>
|
||||
<td>属性</td>
|
||||
<td>解释</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cid</td>
|
||||
<td>int(10)</td>
|
||||
<td>主键,非负,自增</td>
|
||||
<td>post表主键</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>title</td>
|
||||
<td>varchar(200)</td>
|
||||
<td>可为空</td>
|
||||
<td>内容标题</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>slug</td>
|
||||
<td>varchar(200)</td>
|
||||
<td>索引,可为空</td>
|
||||
<td>内容缩略名</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>created</td>
|
||||
<td>int(10)</td>
|
||||
<td>索引,非负,可为空</td>
|
||||
<td>内容生成时的GMT unix时间戳</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>modified</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>内容更改时的GMT unix时间戳</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>text</td>
|
||||
<td>text</td>
|
||||
<td>可为空</td>
|
||||
<td>内容文字</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>order</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>排序</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>order</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>排序</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>authorId</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>内容所属用户id</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>varchar(16)</td>
|
||||
<td>可为空</td>
|
||||
<td>内容类别</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>status</td>
|
||||
<td>varchar(16)</td>
|
||||
<td>可为空</td>
|
||||
<td>内容状态</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>password</td>
|
||||
<td>varchar(32)</td>
|
||||
<td>可为空</td>
|
||||
<td>受保护内容,此字段对应内容保护密码</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>commentsNum</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>内容所属评论数,冗余字段</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
## 关系表
|
||||
这张表维护着内容表和扩展表之间的关系
|
||||
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>键名</td>
|
||||
<td>类型</td>
|
||||
<td>属性</td>
|
||||
<td>解释</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cid</td>
|
||||
<td>int(10)</td>
|
||||
<td>主键,非负</td>
|
||||
<td>内容主键</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>mid</td>
|
||||
<td>int(10)</td>
|
||||
<td>主键,非负</td>
|
||||
<td>扩展表主键</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## meta表
|
||||
这张表主要用来存储和内容相关联的一些扩展信息,包括tag、分类之类的信息
|
||||
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>键名</td>
|
||||
<td>类型</td>
|
||||
<td>属性</td>
|
||||
<td>解释</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>mid</td>
|
||||
<td>int(10)</td>
|
||||
<td>主键,非负</td>
|
||||
<td>扩展表主键</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>varchar(200)</td>
|
||||
<td>可为空</td>
|
||||
<td>名称</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>slug</td>
|
||||
<td>varchar(200)</td>
|
||||
<td>索引,可为空</td>
|
||||
<td>扩展缩略名</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>varchar(32)</td>
|
||||
<td>可为空</td>
|
||||
<td>扩展类型</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>description</td>
|
||||
<td>varchar(200)</td>
|
||||
<td>可为空</td>
|
||||
<td>扩展描述</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>count</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>扩展所属内容个数,冗余字段</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>order</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>扩展排序</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
## 评论表
|
||||
实体内容表相应的评论信息表
|
||||
|
||||
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>键名</td>
|
||||
<td>类型</td>
|
||||
<td>属性</td>
|
||||
<td>解释</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>coid</td>
|
||||
<td>int(10)</td>
|
||||
<td>主键,非负,自增</td>
|
||||
<td>comment表主键</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cid</td>
|
||||
<td>int(10)</td>
|
||||
<td>索引,非负</td>
|
||||
<td>post表主键,关联字段</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cid</td>
|
||||
<td>int(10)</td>
|
||||
<td>索引,非负</td>
|
||||
<td>post表主键,关联字段</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>created</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>评论生成时的GMT unix时间戳</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>text</td>
|
||||
<td>text</td>
|
||||
<td>可为空</td>
|
||||
<td>评论内容</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>varchar(16)</td>
|
||||
<td>可为空</td>
|
||||
<td>评论类型</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>status</td>
|
||||
<td>varchar(16)</td>
|
||||
<td>可为空</td>
|
||||
<td>评论状态</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>author</td>
|
||||
<td>varchar(200)</td>
|
||||
<td>可为空</td>
|
||||
<td>评论用户</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## 用户表
|
||||
存储博客系统中用户的信息:
|
||||
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>键名</td>
|
||||
<td>类型</td>
|
||||
<td>属性</td>
|
||||
<td>解释</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uid</td>
|
||||
<td>int(10)</td>
|
||||
<td>主键,非负,自增</td>
|
||||
<td>user表主键</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>username</td>
|
||||
<td>varchar(32)</td>
|
||||
<td>唯一</td>
|
||||
<td>用户名</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>password</td>
|
||||
<td>varchar(32)</td>
|
||||
<td>可为空</td>
|
||||
<td>用户密码</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>created</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>用户注册时的GMT unix时间戳</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>lastlogin</td>
|
||||
<td>int(10)</td>
|
||||
<td>非负,可为空</td>
|
||||
<td>最后登录时间</td>
|
||||
</tr>
|
||||
</table>
|
||||
## 配置表
|
||||
网站的配置信息表:
|
||||
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>键名</td>
|
||||
<td>类型</td>
|
||||
<td>属性</td>
|
||||
<td>解释</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>varchar(32)</td>
|
||||
<td>主键</td>
|
||||
<td>配置名称</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uid</td>
|
||||
<td>int(10)</td>
|
||||
<td>主键,非负</td>
|
||||
<td>配置所属用户,默认为0(全局配置)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>value</td>
|
||||
<td>text</td>
|
||||
<td>主键,非负,自增</td>
|
||||
<td>配置值</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
上面设计了一个完整的博客系统所拥有的一些功能的表,基于这些表我们可以设计出来一个强大的单用户博客,基本能够实现wordpress的一些基础单用户博客的功能。
|
||||
## links
|
||||
* [目录](<preface.md>)
|
||||
* 上一章: [项目规划](<13.1.md>)
|
||||
|
||||
Reference in New Issue
Block a user