Django BBS项目
1 项目开发流程
1.1 需求分析
人员:架构师 + 产品经理 + 开发组组长
工作:与客户谈需求
目标:形成一个初步的方案。
为了避免客户提出难以实现的需求,一般谈需求前会大致了解客户的需求并准备一套易于实现的方案,在与客户沟通交流过程中逐渐引导客户向设计好的方案上靠。
1.2 项目设计
人员:架构师 + 产品经理 + 开发组组长
工作:
- 架构师选择编程语言、框架、数据库(主数据库、缓存数据库)等。
- 架构师功能划分
将整个项目划分成几个功能模块,找开发组组长开会讨论,为每个组分发任务。 - 提出项目报价
技术层面(开发组组长):确定程序员人数天数;
公司层面(产品经理):是否需要售后、客服等。
交给公司财务、老板确认。 - 产品经理与客户沟通讨论报价。
- 客户后续可能需要添加功能,与产品经理沟通增加预算。
1.3 分组开发
人员:开发组组长 + 组员
工作:
开发组组长分配任务,安排各自负责的功能模块。
组员在架构师设计好的框架中填写代码。
1.4 测试
组员完成代码并自己测试后,交给测试部门进行测试。
1.5 交付上线
方式1
交给对方的运维人员。
方式2
直接上线到我们的服务器上,同时收取维护费用。
2 BBS项目表设计
需求:博客园小项目
编程语言:Python
框架:Django
数据库:MySQL
2.1 用户表
继承AbstractUser类
用户表与个人站点表是一对一关系,外键建议位于查询频率较高的表中。
扩展字段
字段标签 | 字段名 |
---|---|
手机号码 | phone_number |
用户头像 | avatar |
创建日期 | create_date |
个人站点(个人站点表一对一外键) | personal_site |
2.2 个人站点表
字段标签 | 字段名 |
---|---|
站点名称 | site_name |
站点标题 | site_title |
站点样式 | site_style |
2.3 文章标签表(has)
字段标签 | 字段名 |
---|---|
标签名 | name |
个人站点(个人站点表一对多外键) | personal_site |
2.4 文章分类表(is)
字段标签 | 字段名 |
---|---|
分类名 | name |
个人站点(个人站点表一对多外键) | personal_site |
2.5 文章表
字段标签 | 字段名 |
---|---|
文章标题 | title |
文章描述 | description |
文章内容 | content |
发布日期 | create_date |
点赞数 | likes_num |
点踩数 | dislikes_num |
评论数 | comments_num |
个人站点(个人站点表一对多外键) | personal_site |
文章分类(文章分类表一对多外键) | category |
文章标签(文章标签表多对多外键) | tag |
数据库优化
虽然点赞数、点踩数和评论数这三个字段可以通过跨表查询操作从点赞点踩表和文章评论表中获取,但是频繁的跨表查询会降低效率。
解决方法:
在文章表创建点赞数、点踩数和评论数三个普通字段,当点赞点踩表和文章评论表进行创建或删除数据操作时,通过触发器(trigger)同步更新文章表中对应的字段值。
2.6 点赞点踩表
功能:记录哪个用户为哪一篇文章点赞/点踩。
字段标签 | 字段名 |
---|---|
用户外键 | ForeignKey(to=‘UserInfo’) |
文章外键 | ForeignKey(to=‘Article’) |
点赞或点踩 | is_like |
2.7 文章评论表
功能:记录哪个用户为哪一篇文章写了什么评论内容。
这里涉及到根评论和子评论。
根评论:针对文章的评论;
子评论:针对评论的评论。
一个根评论可以有多条子评论,根评论与子评论之间是一对多的关系,但是根评论与子评论使用的是同一张表,这里使用自关联。
自关联是设置自己与自己相关联,对于根评论,该字段为空,对于子评论,该字段是其根评论的主键值。
因此该字段可以为空,需要设置null=True。
ForeignKey(to='Comment', null=True)
ForeignKey(to='self', null=True)
字段标签 | 字段名 |
---|---|
用户外键 | ForeignKey(to=‘UserInfo’) |
文章外键 | ForeignKey(to=‘Article’) |
评论内容 | content |
评论时间 | create_time |
parent | ForeignKey(to=‘self’, null=True) |