数据类型:描述字段的类型 , 可以有整型、字符串等
主键:唯一的标识一条记录的字段 , 如下图的学号、课程 ID、成绩 ID 等
外键:引用其他表数据的字段 , 如下图成绩表中灰色底的学号和课程 ID , 引用来自于学生表和课程表
视图:组合一个或多个表输出数据子集 , 具有隐藏数据复杂性 , 查询简单等特性 , 如现在想要设计一个学生成绩的报表 , 就可以针对下图三个表组织一个视图呈现
函数:类似于程序语言的方法 , 一般做简单的按规则数据替换或转换
存储过程:预编译 , 可有输入/输出参数 , 可包含程序流、逻辑处理、事务等操作 , 用于处理比较复杂的操作 , 如数据加工
数据完整性:关联表通过外键要能找到主表数据 , 否则为数据不完整
数据冗余:重复存储了某些内容 , 占用存储空间 , 也会带来不一致的风险
数据库设计步骤
- 需求分析:识别软件需求中的数据的种类、范围、数量、相互间的交流情况和约束条件等
- 概念模型设计:当软件系统的用户需求确定后 , 要根据用户需求抽象出其中常见的对象 , 以及对象间的关系 , 称做 E-R(Entity-Relationship)图;常用实体-关系图表示概念模型;如一个教学信息系统中 , 会抽象出老师、班级、课程、学生等实体 , 并涉及到老师教授课程、老师带领班级、学生所在班级等关系
- 逻辑模型设计:将概念模型细化 , 细化出概念模型中实体的属性 , 实体间关系通过哪些属性体现;如教学信息系统中 , 老师实体包括 ID、姓名、性别等特征 , 通过在课程表上关联老师 ID 建立起关系
- 物理模型设计:将上述模型的实体、属性、关系 , 根据实际的数据库产品 , 落地成对应的物理表 , 并构建起表的字段、主键、外键、约束、默认值、是否可空、视图等
- 验证设计:运行基于上述构建数据库的业务系统 , 来验证设计的数据 CRUD 时的正确性、合理性
- 运行与维护:随着业务需求的不断迭代 , 数据库也需要一直的优化和重新设计 , 以保存数据正确性、合理性 , 还要考虑新旧业务的兼容与扩展
概述
范式(NF , Normal Form) , 是关系数据库的理论基础
主要用于数据库结构的设计提供规则和指导 , 使得设计出的数据具有最好的存储性能、更容易被理解、数据完整性更佳
一共有 6 种 , 一般设计中满足 1NF、2NF、3NF 即可
常见的不满足 3NF 后带的问题有:数据冗余、插入异常、更新异常、删除异常
第一范式(1NF)
规则:要求数据表中所有字段都是原子性不可分割的;一般的设计都能满足 1NF;右图满足 1NF
不遵守带来的问题:后续业务处理不方便 , 如下图左要按省份分类数据
第二范式(2NF)
- 规则:在 1NF 基础上 , 所有非主键列都完全依赖于主键 , 而不是部分 , 能有效减少冗余、保证数据完成性;如下图针对组合主键学号 + 课程 ID , 右图右计满足 2NF
- 不遵守带来的问题:数据冗余、插入异常、更新异常、删除异常;如一个学生有多门课程 , 就冗余多个学生姓名、新设立一门课程因没有学生考试而必须将学生信息置空、删除某个学员可能导致课程都没有了
第三范式(3NF)
- 在 2NF 基础上 , 所有非主键列都直接依赖于主键 , 不能传递依赖 , 也能有效减少冗余、保证数据完整性;如下图针对主键课程 ID , 右图设计满足 3NF
- 往宇航员的血管里种藻类,科学家这个想法太疯狂,来看结果怎么样
- 和真的几乎一样,这个仿生蜻蜓,要实现《沙丘》里的扑翼机了
- |大家都说iPhone好看,其实可能对这个品牌更喜欢才对
- 甩掉字幕看韩剧!只需要这个操作就够啦!
- 云厂商为什么都在冲这个KPI?
- 全面屏|一台没上市的金立手机,从中看到了时代的眼泪
- 模具中凹凸模间隙调整方法,这个你要看看!
- 在这个移动互联网时代|手机系统广告泛滥,为什么iphone能够坚持不加广告?
- 软件|这个男人当了十二年的快递员:金宜财作为京东一号快递员,刘强东给了他什么奖励?
- 格力电器|不要再说Python难了,按照这个学习路线,四周速成Python
