第一范式、字段的原子性,即每个字段都是不可拆分的。
第二范式、非主键列完全依赖于主键
第三范式、不存在传递依赖关系
譬如有三列:账号(主键)+账户类型(存的是码值)+账户类型描述(中文描述)
三者具有原子性,且 账户类型 和 账户类型描述 都可以各自依赖于 账号(主键){即从主键就可以查出该账号的账户类型或者账户类型描述},符合1NF以及2NF,但其关系其实是通过传递依赖实现的(账户类型描述----》账户类型----》账号(主键)),不符合3NF。
应把账户类型描述和账户类型存一个表。账号和账号类型存一个表。才能满足第三范式
但其实在olap的业务层设计的时候往往会把账号、账户类型、账户类型描述等相关联的数据存储到同一个中间层的表中,以便于减少后面取数过程中的表关联数量,可以提高批处理效率以及降低代码复杂度。
再例如 :
业务上我有十个相似的sql需要取账号、账号类型和账号类型描述以及其它不同的数据,此时可以直接从业务层/中间层(整合好了账号、账号类型、账号类型描述----不符合第三范式了呀)出,而不需要进行额外的关联。