数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。
关系模式R<U,F>---U为组成关系的属性集合,F为定义在属性上一组函数依赖集。
基于函数依赖的范式:
第一范式(1NF):如果关系模式R<U,F>中的每一个属性都是不可再分的,那么该关系模式属于第一范式。
第二范式(2NF):对于关系模式R<U,F>,若R∈1NF,且每一个非主属性都完全依赖于码,则R是第二范式。
例:
假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
这个数据库表不满足第二范式,因为存在如下决定关系:
(课程名称) → (学分)
(学号) → (姓名, 年龄)
即存在组合关键字中的字段决定非关键字的情况。
存在的问题:
(1) 数据冗余(2) 更新异常(3) 插入异常(4)删除异常
第三范式(3NF):对于关系模式R<U,F>,若R∈2NF,且每个主属性都不传递依赖于码,则R是第三范式。
所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。