1.产品介绍
-
目标:对产品有一个基本的认识
-
产品名称:黑马头条
-
对标竞品:今日头条
-
客户端:
- 1.用户端:android, ios, 移动web
- 作用: 主要用于阅读文章
- 2.自媒体端:移动web
- 作用: 自媒体人编辑、发布文章
- 3.管理后台:pc web
- 作用:进行用户管理、文章审核及管理、评论管理
-
备注:
项目课程主要讲解的是用户端的后端代码逻辑,所以后面的技术方案都是围绕着用户端讲解。
2.原型图与UI图介绍
-
目标:知道原型图和UI图的作用
-
原型图:产品经理制作,是产品的原型设计,表达产品的功能组成。
-
作用:
1.准确表达产品需要的功能,和页面逻辑。 2.后端拿到产品原型后就可以进行数据库设计,业务代码编写。 3.前端拿到后就可以进行页面布局,页面跳转设计。
-
UI图:由UI人员设计,是产品最终的用户能够看到的产品样式效果。
-
作用:
1.决定最终产品的显示效果,可以说产品好不好看,就看UI设计的好不好。 2.前端拿到原型图,只能进行布局,逻辑开发。最终呈现的效果需要结合UI图。 3.比如颜色,尺寸,页面布局的百分比,字号。
3.后端技术架构分析
-
目标:对后端的技术架构有基本的认识。
1.首页展示 2.机器人聊天 3.自媒体发布文章 4.管理后台审核文章
4.开发人员配置
-
目标:对开发一个项目需要的人员配置有一个基本的认识
-
web项目组的基本配置:
项目经理1人 产品1人 后台1-2人 前端1-3人 ui1人 测试1人 助理1人(一般项目组公用)
-
备注:
工作中有两个很重要的点: 1.听清楚问题,了解需求。 2.学会正确说不
5.gitlab和mock网站介绍
gitlab:
网址:http://git.meiduo.site
注册规范: gzjy14_名字拼音
学校提供的gitlab工具,不要存放私人代码,会定期清理。
mock:
http://mock.meiduo.site
学校提供的管理接口文档工具。
备注:
gitlab工具要重点学习,基本上每个公司都会有自己的gitlab网站,功能基本一样。
接口管理,差异性比较大,了解其作用即可。
6.软件开发流程
后端:
技术选型->数据库设计->业务代码编写->单元测试->部署测试服务器->给测试人员测试
黑马头条:
flask + flask-restful + flask-sqlalchemy
7.数据库设计思路(功能的划分)
-
1.阅读原型图,找出所有需要保存的数据
手机号码,频道,我的频道,文章标题,文章图片列表。。。。。。
-
2.根据找出的数据,设计表(表名字,把对应的数据添加到表)
头条中的几个重点关注的表: user_basic 用户基本信息 --> user_profile 用户资料 (1对1关系,垂直分表) user_basic 用户基本信息 --> user_relation 用户关系 (自关联多对多) news_article_basic 文章基本信息 --> news_article_content 文章内容 (1对1关系,垂直分表)
-
3.继续阅读原型图,考虑中间数据,继续完善表结构
-
小结
1.不要一开始就希望尽善尽美, 先出来一个差不多的表结构,然后在逐渐完善。甚至有可能需要重新设计 2.数据库设计是需要靠经验积累,所以要多看原型,多练习设计。 3.多练习后,设计表能力就会慢慢提升,这个不是一蹴而就的。 4.大多时候,数据库设计的好不好,跟对业务的理解程度正相关。
8.创建表–主键选取
-
1.用业务数据做为主键。
比如: 手机号码 缺点: 如果后期手机号码发生改变,所有依赖手机号的数据,都需要改变。
-
2.使用非业务数据
1.手动指定id, bigint类型(建议使用指定id) 2.如果不指定主键id, mysql会自动生成一个不可见的row_id.
-
小结
备注:
一般会使用整形作为主键
无符号tinyint 1字节 范围0到2^8-1
无符号int 4字节 范围0到2^32-1
无符号bigint 8字节 范围0到2^64-1
所以一般会选用bigint做主键类型,便于后面业务增长。
9.创建表–状态数据
-
很多表中,都会存在一个表示状态字段。
比如在黑马头条中: 用户表user_basic.status: 表示用户是否可用 文章news_article_basic.status:表示草稿、待审核、审核通过、审核失败 评论表news_comment.status:表示0-待审核,1-审核通过,2-审核失败,3-已删
-
状态类型选择
一般选择tinyint类型,不同的值表示不同的状态。 建议不要使用enum枚举类型。
-
tinyint和int比较
tinyint虽然比int只是少了3个字节,但是在大数据的情况下,也是一笔不小的硬盘开销 建议使用tinyint类型。
-
int(3) 和 int(6)存储大小是否一样?
答案:是一样的,只是在查询的时候自动补0
10.创建表–字符串数据
-
大多数据都是使用字符串类型,所以懂得合理使用字符串类型是非常重要的。
-
主要介绍两种字符串类型
-
char
不可变,查询效率高。可能浪费空间 效率高的原因: 所以在底层值的位数都是一定的,两字符串的值相减,如果为0,就相等。
-
varchar
可变,查询效率比char低,节省空间
-
小结
1.如果确定字符长度,需要查询效率快的,优先选用char 2.如果不确定长度,选择varchar。后续再优化
11.创建表–json类型
-
在mysql5.7.8版本后,才推出的数据类型。
-
sql
create table test2( name json ); insert into test2(name) value('{""}'); # 插入普通字符串报错 insert into test2(name) value('{"age":1}'); # 插入json字符串成功
-
黑马头条中的使用
黑马头条中文章表中:news_article_basic.cover 数据格式: {"type":0, "images":[]} 备注: json的本质在也是大文本,我们最终cover选择了longtext,这样就需要我们自己去保证数据的正确性。
-
小结
1.json类型的出现,大大便利了我们广大程序员。 2.在一个字段中,存储json数据,这样的场景越来越多。
12.字段的其他参数
not null: 不为空
default: 默认值
comment: 备注(养成好习惯,给每个表都加上备注)
13.索引(重点)
-
索引分类
-
1.普通索引index
-
作用
提高查询效率 alter table user_basic add index password_index (password); alter table user_basic drop index password_index;
-
2.唯一索引
-
作用
1.主键索引: 提高查询效率,并且数据唯一。 2.唯一索引: 提高查询效率,并且数据唯一。
-
3.外键索引
-
作用
1.保证数据的完整性。 2.提高查询效率
-
小结
1.增加索引,提高查询效率,但是增删改会受到影响。 2.会增加额外存储空间。 3.一般只会给经常查询的字段加上索引。
14.数据库存储引擎
-
虚拟机安装的是MariaDB数据库,MariaDB是mysql的社区版本, 使用/操作都是一样的.
-
InnoDB
1.mysql的默认存储引擎 2.支持事务 3.支持外键的完整性约束.
-
MyISAM
1.基于ISAM存储引擎. 2.不支持事务 3.速度更快.
-
MEMORY
1.将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问.
-
黑马头条项目中的使用
黑马头条会用到InnoDB和MyISAM数据库引擎
-
小结
1.如果不知道如何选择存储引擎, 直接使用InnoDB 2.如果不确定是否需要使用MyISAM等数据库引擎,建议先直接使用InnoDB,后面如果有必要再进行更改
15.数据库设计-范式设计&反范式设计
-
范式设计
遵守范式设计的数据库,一定是冗余最少的设计,所以最开始设计的时候最好就遵守范式设计。 <