数据库|看到这个数据库设计,我终于明白了我和其他软测人的差距( 二 )


数据类型:描述字段的类型 , 可以有整型、字符串等
主键:唯一的标识一条记录的字段 , 如下图的学号、课程 ID、成绩 ID 等
外键:引用其他表数据的字段 , 如下图成绩表中灰色底的学号和课程 ID , 引用来自于学生表和课程表
视图:组合一个或多个表输出数据子集 , 具有隐藏数据复杂性 , 查询简单等特性 , 如现在想要设计一个学生成绩的报表 , 就可以针对下图三个表组织一个视图呈现
函数:类似于程序语言的方法 , 一般做简单的按规则数据替换或转换
存储过程:预编译 , 可有输入/输出参数 , 可包含程序流、逻辑处理、事务等操作 , 用于处理比较复杂的操作 , 如数据加工
数据完整性:关联表通过外键要能找到主表数据 , 否则为数据不完整
数据冗余:重复存储了某些内容 , 占用存储空间 , 也会带来不一致的风险

数据库设计步骤

  1. 需求分析:识别软件需求中的数据的种类、范围、数量、相互间的交流情况和约束条件等
  2. 概念模型设计:当软件系统的用户需求确定后 , 要根据用户需求抽象出其中常见的对象 , 以及对象间的关系 , 称做 E-R(Entity-Relationship)图;常用实体-关系图表示概念模型;如一个教学信息系统中 , 会抽象出老师、班级、课程、学生等实体 , 并涉及到老师教授课程、老师带领班级、学生所在班级等关系
  3. 逻辑模型设计:将概念模型细化 , 细化出概念模型中实体的属性 , 实体间关系通过哪些属性体现;如教学信息系统中 , 老师实体包括 ID、姓名、性别等特征 , 通过在课程表上关联老师 ID 建立起关系
  4. 物理模型设计:将上述模型的实体、属性、关系 , 根据实际的数据库产品 , 落地成对应的物理表 , 并构建起表的字段、主键、外键、约束、默认值、是否可空、视图等
  5. 验证设计:运行基于上述构建数据库的业务系统 , 来验证设计的数据 CRUD 时的正确性、合理性
  6. 运行与维护:随着业务需求的不断迭代 , 数据库也需要一直的优化和重新设计 , 以保存数据正确性、合理性 , 还要考虑新旧业务的兼容与扩展
范式
概述
范式(NF , Normal Form) , 是关系数据库的理论基础
主要用于数据库结构的设计提供规则和指导 , 使得设计出的数据具有最好的存储性能、更容易被理解、数据完整性更佳
一共有 6 种 , 一般设计中满足 1NF、2NF、3NF 即可
常见的不满足 3NF 后带的问题有:数据冗余、插入异常、更新异常、删除异常
第一范式(1NF)
规则:要求数据表中所有字段都是原子性不可分割的;一般的设计都能满足 1NF;右图满足 1NF
不遵守带来的问题:后续业务处理不方便 , 如下图左要按省份分类数据

第二范式(2NF)
  1. 规则:在 1NF 基础上 , 所有非主键列都完全依赖于主键 , 而不是部分 , 能有效减少冗余、保证数据完成性;如下图针对组合主键学号 + 课程 ID , 右图右计满足 2NF


  2. 不遵守带来的问题:数据冗余、插入异常、更新异常、删除异常;如一个学生有多门课程 , 就冗余多个学生姓名、新设立一门课程因没有学生考试而必须将学生信息置空、删除某个学员可能导致课程都没有了

第三范式(3NF)
  1. 在 2NF 基础上 , 所有非主键列都直接依赖于主键 , 不能传递依赖 , 也能有效减少冗余、保证数据完整性;如下图针对主键课程 ID , 右图设计满足 3NF