简介
什么是数据库设计?
简单来说,数据库设计就是根据业务系统的具体需要,结合我们所选用的DBMS(数据库管理系统),为业务系统构造出最优的数据存储模型,建立好数据库中的表结构和表之间的关联关系的过程。使其可以对应用系统的数据进行存储,并可以高效的访问已存储的数据。
关系型数据库:MySQL、Oracle、PgSql、SQLServer
NoSQL: redis、MemCache、Mongo
为什么要进行数据库设计?
数据库设计的流程
需求分析
逻辑设计:使用ER图对数据库进行逻辑建模
物理设计:根据数据库自身的特点把逻辑设计转为物理设计,即选用那种数据库系统。
维护优化:
- 新的需求建表
- 索引优化
- 大表拆分
需求分析
数据特点分析:
- 了解系统中所要存储的数据
- 了解数据存储特点
- 了解数据生命周期
数据库实体分析:
- 实体与实体之间的关系(1对1,1对多,多对多)
- 实体所包含的属性有什么
- 那些属性或属性的组合可以唯一标识一个实体
逻辑设计
- 将需求转化为数据库的逻辑模型
- 通过ER图的形式对逻辑模型进行展示
ER图
基本概念
电商网站:用户模块、商品模块、订单模块、购物车模块、供应商模块
设计范式
设计范式概要
第一范式、第二范式、第三范式、BC范式
第一范式(1NF)
第二范式(2NF)
商品表优化
第三范式(3NF)
存在的问题:
(分类,分类描述)对于每一个商品都会进行记录,所以存在数据冗余(相同分类下,分类描述都会冗余)。同时存在数据插入、更新、删除异常。
数据插入异常:如果数据表中没有酒水饮料分类下的商品,那酒水饮料分类的信息在表中也不存在,分类依赖于商品名称而存在。
优化后的表:
BC范式(BCNF)
物理设计
物理设计要做什么
1.选择合适的数据库管理系统
2.定义数据库、表及字段的命名规范
3.根据所选的多DBMS系统选择合适的字段类型
4.反范式化设计(为了读写效率提升,可能会不满足范式要求)
字段类型选择原则
反范式化
反范式化就是为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,而允许存在少量的数据冗余,换句话说就是空间换时间。
符合范式化的表设计
反范式化设计
反范式化优点
1.减少表的关联数量
2.增加数据的读取效率
3.反范式化要适度
维护和优化
1.维护数据字典
加备注COMMENT, 可通过SQL导出
2.维护索引
3.维护表结构
4.在适当时候对表进行水平拆分或垂直拆分
参考
https://www.imooc.com/video/1906