MySQL 基础篇
三范式
第一范式( 1NF):字段具有原子性,不可再分。 所有关系型数据库系统都满足第一范式,数据库表中的字段都是单一属性的, 不可再分。
第二范式( 2NF):要求实体的属性完全依赖于主键。 所谓完全依赖是指不能存在仅依赖主键一部分的属性,如果存在, 那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体, 新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之, 第二范式就是属性完全依赖主键。
第三范式( 3NF):满足第三范式( 3NF) 必须先满足第二范式( 2NF)。 简而言之, 第三范式( 3NF)要求一个数据库表中不包含已在其它表中已包含的非主键信息。
简单理解:
- 每一列只有一个单一的值,不可再拆分。
- 每一行都有主键能进行区分。
- 每一个表都不包含其他表已经包含的非主键信息。
三范式带来的问题
充分的满足第一范式设计将为表建立太量的列,数据从磁盘到缓冲区,缓冲区脏页到磁盘进行持久的过程中,列的数量过多会导致性能下降,过多的列影响转换和持久的性能。
过分的满足第三范式化造成了太多的表关联,表的关联操作将带来额外的内存和性能开销。
使用 InnoDB 引擎的外键关系进行数据的完整性保证,外键表中数据的修改会导致 InnoDB 引擎对外键约束进行检查,就带来了额外的开销。