数据库三大范式
什么是范式?
范式是设计出一种减少数据冗余 并且结构合理的数据库的一种规则
严格来说数据库有5大范式 满足范式越高数据数据冗余越小。但是查询数据困难,因为获得相关数据要关联太多的表
一般来说满足前3大范式就行了
第一范式
每列都不可再分如学生信息表
这个表就不满足第一范式。因为地址没有最小细分。如果需要查询或者统计广东省的学生信息 获得广州市学生信息 获得广州市天河区的学生信息
第二范式
满足第一范式的情况下表具有唯一标识(主键)并且数据部分列出现大量冗余的时候就抽到另外一张表并且建立外键关系(或者每个表只描述一件事情)
第三范式
使用amstrong推理原则 一个表 有a 列 b列 c列 通过a能推倒出b b又能推倒出c a如果能能直接推倒出c就表示违反了第三范式 不能有传递依赖
例子1
一个下单表
商品id 数量 单价 总金额 有这么几列
通过商品id则是a 数量和单价则是b 总金额则是c 通过a可以查询出单价和数量(b) 通过b又可以得出 c 这里则是有传递依赖 则删除 c列
例子2
员工表
员工id 员工名称 部门id 部门名称
这里 a员工id 可以得到部门id 通过部门id又可以得到部门名称(c) a可以推倒出b b可以推倒出 c 所以c存在传递依赖 删除
有些时候不能一味的根据这个三个范式来设计表。但是在这三大范式的基础上合理的设计表结构 能够有效的减少数据冗余
反三范式 :以空间换时间
反三范式的情况下可以增加查询效率 但是会增加数据维护的复杂度
比如上面的员工表。。通过员工id 可以直接获得部门名称 不需要再通过部门id再查询一次
但是 当部门名称修改的时候 需要 更改所在修改部门的所有用户中保存的部门名称
所以反三范式 也要考虑维护难度