目录
- 主要的思路
- 行列式
- 第一范式:列的原子性,列不能再被分割
- 第二范式:属性完全依赖于某个候选键
- 第三范式:属性不依赖于其它非主属性
- E-R模型
- 例子
- 范式化和反范式化对比
主要的思路
- 二维表
- 四个范式
行列式
其中,二维表很容易理解,二维即指行和列,不做细述,以下将详细讨论四个范式和工作中的业务问题。
第一范式:列的原子性,列不能再被分割
当表中字段存在可再分情况时,对其进行拆分,不满足第一范式。
第二范式:属性完全依赖于某个候选键
首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式:属性不依赖于其它非主属性
首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
满足以上三范式后的最终表为
E-R模型
E表示entry,实体,设计实体就像定义一个类一样,指定从哪些方面描述对象,一个实体转换为数据库中的一个表
R表示relationship,关系,关系描述两个实体之间的对应规则,关系的类型包括包括一对一、一对多、多对多关系也是一种数据,需要通过一个字段存储在表中
例子
1.实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值。
2.实体A对实体B为1对多:在表B中创建一个字段,存储表A的主键值。
3.实体A对实体B为多对多:新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值。
范式化和反范式化对比
类型 | 优点 | 缺点 |
范式化 | 减少了数据冗余,数据表更新操作快、占用存储空间少 | 查询时需要对多个表进行关联,查询性能降低,更难进行索引优化 |
反范式化 | 可以减少表关联,可以更好进行索引优化 | 存在大量冗余数据,数据维护成本更高(删除异常,插入异常,更新异常) |