一、 三范式
主键: 创建表时可以不设置主键 , 但是没有设置主键的表 , 底层会认为所有的键都是主键 ,所以在创建时使用了所有的字段创建索引 , 在查询时索引的存在几乎没有意义 。
复合主键: 两个或两个以上的字段作为评价一条数据记录的唯一性标志 。
第一范式:
- 强调列的原子性 , 即:列不能分成几列
- 只要是关系型数据库 , 就自然的遵循第一范式
第二范式:
- 首先满足第一范式
- 必须有主键
- 没有包含在主键中的列必须完全依赖于主键, 而不能只依赖主键的一部分
第三范式:
- 首先满足第一范式
- 也属于第二范式的一种情况
- 任何非主键字段不能依赖于其他非主键字段
三范式是在数据库初期使用(时间换取空间) , 能外键关联就外键关联 , 能不冗余数据设计 , 就不冗余。
但是现在的系统对性能要求高, 对存储要求低(空间换时间)
二、 反范式
- 但是现在的系统对性能要求高, 对存储要求低(空间换时间) , 所以出现了一套反范式
- 反范式: 只要违反了第二范式和第三范式 , 就能做到空间换时间 , 获的最大的效率 。