设计数据库:
    数据库设计是对数据库中实体以及这些实体之间的关系进行规划和结构化的过程
    软件开发的生命周期:
    MySQL 第一章 - 图1
    需求分析、概要设计、详细设计、编码、测试、部署
    1、需求分析阶段:分析客户的业务和数据处理需求
    2、概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整
    3、详细设计阶段:应用三大范式审核数据库结构
    4、代码实现阶段:物理实现数据库,编码实现应用
    5、软件测试阶段:……
    6、上线部署:……
    设计数据库的步骤:
    1、收集信息
    通过对业务人员的访谈等方法,充分了解用户需求,理解数据库需要存储的业务信息(数据)及需要提供的操作
    2、标识实体 (Entity)
    标识数据库要管理的关键对象或实体,实体一般是名词
    3、标识每个实体的属性(Attribute)
    4、标识实体之间的关系(Relationship)
    E-R图:
    E-R图:Entity Relationship Diagram,也称为实体-关系图
    通过一些具有特定含义的图形符号提供了实体类型、属性和联系的方法
    MySQL 第一章 - 图2
    映射基数
    一对一 1:1 一对多 1:N 多对1 N:1 多对多 M:N
    MySQL 第一章 - 图3
    E-R图表示映射关系时,也可以通过添加箭头区分一对多和多对一的箭头指向映射关系为一的实体
    在业务人员与开发人员的沟通中,E-R图能够极大的提高彼此之间的沟通效率
    MySQL 第一章 - 图4
    数据库设计模型转换
    关系型数据库设计分类:
    概念数据模型设计
    逻辑数据模型设计
    物理数据模型设计
    各模型之间的元素对应关系
    MySQL 第一章 - 图5
    数据模型转换方案
    MySQL 第一章 - 图6
    当使用关系型数据库时,物理数据模型即为关系模型
    ER图转数据库模型图
    找标识符 —-通俗解释就是主外键
    基本转换原理
    1、将E-R图中每一个实体转换成一个表,实体的属性转换为表的列,实体的标识符转换为表的主键
    2、将实体关系转化为表之间的引用完整性约束
    3、根据关系的不同类型,通过外键引用主键的方式有所不同
    实现数据模型转换
    MySQL 第一章 - 图7
    MySQL 第一章 - 图8
    使用Visio、PowerDesigner软件
    将实体关系转化为表之间的引用完整性约束
    一对多关系的两个实体
    一般会各自转换为一张表,且后者对应的表引用前者对应的表
    一个表中的主键对应另一个表中可重复的字段
    主键的值是不能重复的,关联的字段是可以重复的
    存在一个值对应一个值(一对一)或者一个值对应多个值(一对多)
    一对一关系的两个实体
    一般是一个主键对应一个不可重复的字段
    多对多关系的两个实体
    除了将多对多关系中的两个实体各自转换为表外,一般还会创建第3个表,称为连接表
    将多对多关系划分为两个一对多关系,将这两个表主键都插入到第3个表中
    使用PowerDesigner绘制数据库模型图:
    实现步骤
    1、创建物理数据模型
    2、绘制模型图
    (1)创建表实体
    (2)添加属性
    (3)添加实体之间的映射关系
    MySQL 第一章 - 图9

    两个实体间连线,箭头指向主表
    生成SQL代码:
    创建数据库模型图后,数据库脚本的方式
    生成单个表的数据库脚本
    MySQL 第一章 - 图10
    批量生成数据库中的所有数据表的脚本
    MySQL 第一章 - 图11
    数据规范化:
    为什么需要数据规范化
    1、信息重复
    2、插入异常
    数据不一致
    3、删除异常
    丢失有效信息
    4、修改异常
    如何数据规范化:
    使用三大范式规范数据库表的设计
    数据库设计范式
    为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则
    实际开发中最为常见的关系型数据库设计范式
    第一范式
    第二范式
    第三范式
    三大范式:
    第一范式
    第一范式的目标是确保每列保持原子性
    如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
    MySQL 第一章 - 图12
    第二范式
    第二范式的目标是确保表中的每列都和主键相关
    要求每个表只描述一件事情
    MySQL 第一章 - 图13
    第三范式
    第三范式的目标是确保每列都和主键列直接相关,而不是间接相关
    如果一个关系满足第二范式,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)
    MySQL 第一章 - 图14
    规范化和性能的关系:
    1、为满足某种商业目标,数据库性能比规范化数据库更重要
    通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间
    通过在给定的表中插入计算列(如成绩总分),以方便查询
    2、在数据规范化同时,要综合考虑数据库的性能
    3、如:
    MySQL 第一章 - 图15
    不要轻易违反数据库设计的规范化原则
    如果处理不好,可能会适得其反,使应用程序运行速度更慢
    本章总结:
    MySQL 第一章 - 图16