二.数据库开发
1.开发数据库流程
2.数据库,数据表,数据字段的命名
3.数据库字符集和排序规则设置
4.数据表的引擎选择
5.数据字段的类型选择
6.数据字段约束的选择
7.数据表索引的使用
8.设计表完成本项目需求
9.业务流程关于数据库
二.数据库开发
1.开发数据库流程
①建立数据库
②建立数据表
③数据库对应的索引
2.数据库,数据表,数据字段的命名
①数据库的命名
- 小写字母和下划线组成
- 说明哪个系统哪个项目在使用
②数据库表的命名
- 小写字母和下划线组成
- 哪个系统的哪个功能数据
③数据字段的命名
- 小写字母和下划线组成
- 最好带表名前缀
3.数据库字符集和排序规则设置
①字符集
- UTF8和UTF8MB4都是unicode的实现形式
- UTF8
- UTF8MB4(使用,不在乎空间)
是对utf8的拓展,能够支持更多的字符,比如emoji
②数据库排序规则
-
排序规则是什么?
即会影响我们的sql语句中涉及比较的查询结果。如order by,where,group by等的查询结果。 -
utf8mb4_unicode_ci
是基于unicode编码来排序,实现准确排序,不区分大小写。为了实现能够处理特殊编码的字符,实现了比较复杂的算法。
精确度高,效率较低。 -
utf8mb4_general_ci (使用,效率高准确度够用)
没有基于unicode编码来排序,在遇到特殊编码字符,可能会遇到不一致的情况。
准确度够用,效率较高
4.数据表的引擎选择
①InnoDB和MyISM引擎对比
- 隔离级别
InnoDB实现四个隔离级别 - 锁
InnoDB实现表级锁+行级锁。MyISM只有表级锁 - 索引与数据
InnoDB数据文件本身就是索引文件。MyISM索引文件和数据文件分离。 - 安全恢复
InnoDB有安全恢复机制redo log。MyISM没有安全恢复机制。
②理解当下多用InnoDB
- 要求
查询速度快,并发要求高,安全要求高。 - 所以
InnoDB支持行级锁,支持四种隔离级别能够更好的支持并发。
InnoDB数据文件本身索引文件,查询速度快。
InnoDB有安全恢复机制,能够支持安全性要求
5.数据字段的类型选择
① 数值类型
- 整型
tinyint 1字节
int 4字节
bigint 8字节 - 浮点型
float 4字节
double 8字节 - 定点型
decimal
②字符串类型
- char 定长字符串
- varchar 变长字符串
③时间类型
- date yyyy-mm-dd 3个字节
- timestamp 年月日时分秒格式 4个字节
- datetime YYYY-MM-DD HH:II:SS 8个字节
④选择数值类型
- 整数类型
0,1类型选用tinyint如状态,如逻辑删除。指明长度为1。
其他统一用bigint(id等)预留数据 - 金额类型数据
由于float和double运算时会有进度损失,故选用decimal(字符串类型存储)。decimal默认为(10,0),需要小数指出其精度。
⑤选择字符串类型
- 对比char和varchar
如果varchar类型的数据更新后由短变长,页内没有更多空间,则只能分页或拆成片段存储
- 存储长度几乎相等
使用CHAR定长字符串类型 - 存储变长字符串
只能用varchar
⑥选择时间类型
- timestamp和datetime 具体时间
不同时区选择timestamp,任何时区都是一个时间选用datetime - 更新时间和创建时间
用timestamp,占用字节少 - 只需要存储年月日
用date - datetime的优点
datetime存储的时间范围广
6.数据字段约束的选择
①约束类型
- PRIMARY KEY
指定该字段可以唯一标识一条数据 - UNIQUE
唯一性约束 - NOT NULL
非空约束 - Default Constraint
默认值约束 - Auto_Increment
自增约束 - Zerofill
零填充空白约束
②实战使用约束
- 主键id
必须为主键,且为自增。 - not null最好有默认值。
7.数据表索引的使用
- 主键id为自动创建的索引
- 频繁为查询条件的字段建立索引
- 频繁更新的字段不适合建立索引
- 表记录过少无需创建索引
- 经常增删改操作的表不需要创建索引
8.设计表完成本项目需求
①user_info(用户基本信息表)
- 用户注册和登录时用mobile和password
- 完成业务
注册登录。
②user_accout(用户账户表)
- 用户注册登录后自动初始化一个账户表
- 用user_id与user_info关联
- 完成业务
余额扣款赠款,冻结金额放款,与唯一user绑定。
③trans_flow(交易流水表)
- 通过user_id与用户关联
- 完成业务
获得所有的交易流水。
④user_demand_info(用户需求信息表)
- 通过user_id和用户信息表关联
- 完成业务
保存发起的需求请求的数据,管理员审核是否同意。
⑤user_solve_info(用户解决需求表)
- 通过user_id和用户信息表关联
- 完成业务
保存发起请求解决需求的数据,管理员审核是否同意。
⑥market_info(展示需求表)
- 通过需求人编号和解决人编号与两个user相关联
- 完成业务
展示需求,让解决需求的人来发起解决需求。
9.业务流程关于数据库
①用户注册并登录
- 用户注册
新增user_info和user_account,保存用户输入的手机号和密码,保存一个用户账户(金额和冻结金额初始为0) - 用户登录
检查手机号和密码是否对应 - 管理员
可以列出user_info的列表查看会员
②用户充值提现
- 充值
对user_account表进行增加余额 - 提现
对user_account表进行减少余额
③用户发起需求
- 发起需求
用户填写标价和需求文档后保存入user_demand_info表中,初始化状态为0未提交,提交后状态设置为1待审核 - 管理员
在申请中列出所有user_demand_info的基本信息,然后点击通过则将user_demand_info需求状态设置为2审核通过,将用户标出的价格从余额中转到冻结金额,产生一条流水,并且产生标的market_info - 标的的产生
根据user_demand_info的信息对market_info表初始化,标的的状态设为0待解决。
④用户解决需求
- 用户进入需求中心
进入标的的详情user_demand_info,单击我要解决,上传解决文档,标的状态改为1正在解决 - 管理员
管理员进入标的管理,查看解决文档,通过解决将标的设置为2已解决,然后将对应标的的需求人的需求改为3:已解决,并且展示解决文档。然后将需求用户的冻结金额转到解决用户的余额中。