From d2aca883eb3af42423ec876b787c8da55fcaee95 Mon Sep 17 00:00:00 2001 From: astaxie Date: Thu, 6 Dec 2012 17:33:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=8D=81=E4=B8=89?= =?UTF-8?q?=E7=AB=A0=E7=9A=84=E4=B8=80=E4=BA=9B=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 13.1.md | 18 ++-- 13.2.md | 308 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 318 insertions(+), 8 deletions(-) diff --git a/13.1.md b/13.1.md index 137401cf..d1727dd9 100644 --- a/13.1.md +++ b/13.1.md @@ -29,17 +29,19 @@ gopath是一个文件系统的目录,我们可以随便设置一个目录为go 根据上面的应用程序流程设计,博客的目录结构设计如下: |——main.go 入口文件 - |——configs 配置文件和处理模块 + |——conf 配置文件和处理模块 |——controllers 控制器入口 - |——core 最小化的MVC框架 - |——logs 日志处理模块 |——models 数据库处理模块 |——utils 辅助函数库 + |——static 静态文件目录 |——views 视图库 -## 总结 -本小节介绍了博客系统从设置gopath到目录建立这样的基础信息,也介绍了将要采用的MVC模式,博客系统中数据流的执行流程,最后通过这些流程设计了博客系统的目录结构,至此我们完成了一个大框架的搭建,接下来的几个小节我们将会逐个实现。 -## links - * [目录]() - * 上一章: [构建博客系统](<13.md>) +## 框架设计 +为了实现博客的快速搭建,打算基于上面的流程设计开发一个最小化的框架,框架包括路由功能、支持REST的控制器、自动化的模板渲染,日志系统、配置管理。 + +## 总结 +本小节介绍了博客系统从设置gopath到目录建立这样的基础信息,也介绍了将要采用的MVC模式,博客系统中数据流的执行流程,最后通过这些流程设计了博客系统的目录结构,至此我们完成了一个大框架的搭建,接下来的几个小节我们将会逐个实现。 +## links + * [目录]() + * 上一章: [构建博客系统](<13.md>) * 下一节: [数据库设计](<13.2.md>) \ No newline at end of file diff --git a/13.2.md b/13.2.md index f98a79e7..541cc920 100644 --- a/13.2.md +++ b/13.2.md @@ -1,5 +1,313 @@ # 13.2 数据库设计 +我们设计的博客是一个单用户的博客,目前很多用户都采用wordpress作为自己的博客系统,包括我自己也在使用wordpress,我们知道wordpress系统的一个主页乐观的估计也有20余次查询,但这依然无法阻挡这款程序的流行,在去年对全球top10 blogger所使用的系统调查中,wordpress比其他系统有着明显的优势。 +但是我们这次演示的博客系统是一个单用户的系统所以查询肯定不需要20余次,数据库的结构也相对的简单很多,因此单用户系统设计重点在于灵活性和结构化,当我们集中地暴露系统瓶颈,从另一个方面也可以集中精力去解决它。例如把数据库从MySQL改成redis。 + +博客主要分为博文、分类、页面、评论、用户、友情链接、tag,那么我们可以采用内容表存储一些实体相关的信息:文章内容、草稿、页面等信息,meta表保存分类、tag等信息,关系表维护两者的关系,评论表存储用户的评论,用户表存储博客用户的信息。 + +## 内容表 +这张表主要用来存储内容实体信息,主要的表结构如下所示 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
键名类型属性解释
cidint(10)主键,非负,自增post表主键
titlevarchar(200)可为空内容标题
slugvarchar(200)索引,可为空内容缩略名
createdint(10)索引,非负,可为空内容生成时的GMT unix时间戳
modifiedint(10)非负,可为空内容更改时的GMT unix时间戳
texttext可为空内容文字
orderint(10)非负,可为空排序
orderint(10)非负,可为空排序
authorIdint(10)非负,可为空内容所属用户id
typevarchar(16)可为空内容类别
statusvarchar(16)可为空内容状态
passwordvarchar(32)可为空受保护内容,此字段对应内容保护密码
commentsNumint(10)非负,可为空内容所属评论数,冗余字段
+ +## 关系表 +这张表维护着内容表和扩展表之间的关系 + + + + + + + + + + + + + + + + + + + + +
键名类型属性解释
cidint(10)主键,非负内容主键
midint(10)主键,非负扩展表主键
+ +## meta表 +这张表主要用来存储和内容相关联的一些扩展信息,包括tag、分类之类的信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
键名类型属性解释
midint(10)主键,非负扩展表主键
namevarchar(200)可为空名称
slugvarchar(200)索引,可为空扩展缩略名
typevarchar(32)可为空扩展类型
descriptionvarchar(200)可为空扩展描述
countint(10)非负,可为空扩展所属内容个数,冗余字段
orderint(10)非负,可为空扩展排序
+ + +## 评论表 +实体内容表相应的评论信息表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
键名类型属性解释
coidint(10)主键,非负,自增comment表主键
cidint(10)索引,非负post表主键,关联字段
cidint(10)索引,非负post表主键,关联字段
createdint(10)非负,可为空评论生成时的GMT unix时间戳
texttext可为空评论内容
typevarchar(16)可为空评论类型
statusvarchar(16)可为空评论状态
authorvarchar(200)可为空评论用户
+ +## 用户表 +存储博客系统中用户的信息: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
键名类型属性解释
uidint(10)主键,非负,自增user表主键
usernamevarchar(32)唯一用户名
passwordvarchar(32)可为空用户密码
createdint(10)非负,可为空用户注册时的GMT unix时间戳
lastloginint(10)非负,可为空最后登录时间
+## 配置表 +网站的配置信息表: + + + + + + + + + + + + + + + + + + + + + + + + + + +
键名类型属性解释
namevarchar(32)主键配置名称
uidint(10)主键,非负配置所属用户,默认为0(全局配置)
valuetext主键,非负,自增配置值
+ +上面设计了一个完整的博客系统所拥有的一些功能的表,基于这些表我们可以设计出来一个强大的单用户博客,基本能够实现wordpress的一些基础单用户博客的功能。 ## links * [目录]() * 上一章: [项目规划](<13.1.md>)