一 数据库的本质和价值?
Mysql数据库实质最终以文件的形式进行数据存储,解决了永久性存储、管理、操作(SQL)数据的问题,其性能可以满足常规的Web应用,并且在6.0之前是免费的,6.0之后开始收费(被Oracle收购了)。
二 合理设计表关系来解决现实业务关系
日常实际业务当中,我们业务对象和对象之间是存在关系的,这种关系主要体现为:(就拿市民、健康码、核算检测点、核算报告来举例)
- 一对多:一个市民可以有多份核算报告
- 多对多:一个市民可以到多个核算检测点做核算,一个核算检测点也可以为多个市民服务
- 一对一:健康码与市民就是一对一
数据库模型设计其中一个任务就是通过表的合理设计来解决真实的业务关系,通常按照如下经验解决:
- 一对多关系:通过表之间的外键设计来解决
- 多对多关系:通过建立表A和表B之间的关系表C来解决
- 一对一关系:一般不需要多表,单个表字段设计可以解决
三 合理使用约束来保障业务数据的完整性和准确性
- 主键约束
- 唯一约束
- 非空约束
- 外键约束
- 默认值
四 遵循三范式和反三范式让表设计更合理
4.1 三范式
- 字段原子性,不可再拆分
- 一个表描述一个业务对象或者事物
- 消除传递依赖,即由A字段和B字段可以推到出C字段,则可以去除C字段,避免冗余
4.2 反三范式
以空间换时间的思想,通过合理的字段冗余,以减少表之间的join关联,提高SQL查询效率
五 根据业务场景合理设计表索引,以及写出高效SQL的原则
- 查询结果满足业务情况下应少尽少,筛选必须的行和列字段,避免select *
- 常用字段应该添加索引,包括多表关联字段、where筛选字段、order by排序字段、group by分组字段,这部分一定是充分考虑业务需求而设计的
- 避免索引失效,索引字段上运算和函数,以及like时,通配符出现在左侧,都会使索引失效
六 应用举例
6.1 模型设计思路
一般模型设计遵循如下套路:
- 根据业务实际场景识别业务对象、以及对象特点
- 根据业务对象和三范式和反三范式,以及业务对象关系(一对多/多对多)设计表、表字段
- 根据业务添加表字段约束,来规范字段值以及保证数据完整性、准确性
- 根据业务需求添加索引,以便后续保证SQL高性能查询
6.2 案例场景描述
通过模型设计,解决市民做核算的业务场景,市民根据防疫要求不定期到对应核酸检测点进行核算检测。
6.3 模型设计
对标6.1模型设计思路进行设计:
- 业务对象、特点分析 该业务场景下有市民、核算检测点、核算报告三个关键业务对象
- 表、表字段 需要涉及三个表,分别对应市民、核算检测点、核算报告,以及一个关系表(市民和检测点是