数据库范式
数据库设计一般要符合3NF,根据实际情况而定,数据库设计要符合实际业务,所以业务
符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。当然,在实际中,往往为了性能上或者应对扩展的需要,经常 做到2NF或者1NF,但是作为数据库设计人员,至少应该知道,3NF的要求是怎样的。
1、第一范式
第一范式(1NF):确保每列保持原子性
列1唯一确定列2, 列3, 列4, ...,即列2, 列3, 列4, ...不能再分裂出其它列。
假设有关系模式列1: 订单名; 列2: 商品。一个订单下可以有多个商品,即列2: 商品可以分裂成商品A, 商品B, 商品C, ...,所以列1: 订单名; 列2: 商品这样的关系模式不符合第一范式。
1、第二范式
第二范式(2NF): 确保表中的每列都和主键相关
满足2NF的前提是必须满足1NF。此外,关系模式需要包含两部分内容,一是必须有一个(及以上)主键;二是没有包含在主键中的列必须全部依赖于全部主键,而不能只依赖于主键的一部分而不依赖全部主键。
定义听起来有点绕,不慌,直接看图,只有全部的非主键列依赖于全部主键,才满足第二范式。
1、第三范式
满足3NF的前提是必须满足2NF。另外关系模式的非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列m既依赖于全部主键,又依赖于非主键列n的情况。
定义听起来还是有点绕,不慌,直接看图,只要非主键内部存在传递依赖,就不满足第三范式。