Orcle系列——范式

范式——设计关系型数据库的准则。关系型数据库的设计标准就是数据库的范式,包括第一范式,第二范式,第三范式。

第一范式:

目前只要是使用关系型数据库来设计数据库,基本都能够满足数据库设计的第一范式。第一范式(1NF)就是数据库表中的字段都是单一属性的,不可再分。这个单一属性可以使数据库中任何一种基本数据类型,如整数,字符型,日期型等。

第二范式:

第二范式是在第一范式的基础上进一步对关系型数据库进行规范,官方给出的定义是要求在数据库表中不存在非关键字段对任意候选关键字段的部分函数依赖。意思就是说在第二范式中组合主键(AB)里面的A或B与其他字段不能存在组合重复。为解决这个问题,通常的做法是不用组合主键,添加一个编号列,作为唯一主键即可满足第二范式。例如设计一个购物信息表,字段包括客户编号,产品名称,产品数量,产品类型,产品价格等,如果用客户编号和产品名称作为组合主键,那么在组合主键中产品名称和产品类型存在一定的关系,室友产品名称决定产品类型,所以不满足第二范式,如果不满足第二范式,就会出现以下四个问题:数据冗余,更新异常,插入异常,删除异常。

第三范式:

第三范式是在第二范式的基础上对数据库进行规范,第三范式的要求是数据表中不存在非关键字段对任一候选关键字段的传递函数依赖。所谓传递函数依赖,指的是如果存在A决定B,B决定C的决定关系,则C传递函数依赖于A。因此满足第三范式的数据库表应该不存在依赖关系,假定员工信息表为employee(员工编号,姓名,年龄,所在部门,部门电话),使用员工编号作为员工信息的主键,那么就存在决定关系,员工编号就决定了姓名,年龄,所在部门,部门电话这些字段。从上面的关系可以看出,在表中存在一个主键,数据表的设计满足了第二范式的要求。但是没有满足第三范式的要求,因为存在决定关系:员工编号决定了所在部门,所在部门有决定了部门电话,那么就存在了传递函数依赖关系,即员工编号决定部门电话,这样也会出现不满足第二范式时出现的那四个问题。为了满足第三范式的要求,必须把员工信息表拆分为两个表:员工表:员工编号,姓名,年龄,所在部门;部门表:部门名称,部门电话。

拓:除了上面三种范式,还有一种范式经常使用,即鲍依斯-科得范式(BCNF)。它是建立在第三范式的基础上,如果数据库表中不存在任何字段对任一候选关键字段的传递函数依赖,那么就符合此范式。

你可能感兴趣的:(Orcle系列——范式)