学习三个范式

来源:互联网 发布:澳洲人工智能专业 编辑:程序博客网 时间:2024/05/16 05:34

第一范式:清除重复的组,从而所有表中的所有记录可以被每个表中的主键唯一标识。换言之,不同于主键的所有字段必须依赖于主键。

通过创建新的表来删除重复的字段,建立主表-明细表结构,主表于明细表为一对多关系,明细表含有外键指向主表,外键包含在明细表的复合主键中。

实际上这是实现关系型数据库必须的一个范式。将表中重复的(但是没确定重复次数)项(如电话1、电话2、电话3等)移出来,建立一对多的两个表。如作者(一)与作者作品(多)。

第二范式:所有非键值必须完全函数依赖于主键。不允许部分依赖。当字段完全依赖与复合主键的一部分时,就会存在部分依赖。

删除原表中重复的值,建立新表。原表与新表为多对一关系。新表含有一个字段组成的主键,原表包含指向新表主键的外键,外键不是原表主键的一部分。

表必须处于第一范式中;所有非键值必须完全函数依赖于主键;必须删除部分依赖,当字段完全依赖于复合主键的一部分时存在这种依赖。——创建新的表,将主键的部分依赖部分和它的依赖字段分离。

第二范式将表中重复的数据分离(第一范式分离的是重复意义的字段)。比如说上例中分离出来的作者作品中,出版商可能就是冗余的,可以分开成作品信息-出版商信息的多对一关系。分离出来的数据一般是静态的数据,比如说出版商的信息是较少更改的,但是会一直出版不同的图书。

第三范式:清除传递依赖——字段函数依赖与另一个字段,而另一个字段依赖于主键。

消除传递依赖暗示为与已有表中的主键间接相关的内容创建新的表。

应该将多对多关系分解为三张表;将表中不直接依赖于主键的部分分离出来或者删除:比如员工表中的部门与所在地,部门依赖于员工ID,所在地依赖于部门,可以将部门与所在地分离出来成为一张表;又比如说订单中的数量、单价、总价之间的关系,可以将总价删除。

第三范式应该通过仔细研究表中字段的业务意义来确定是不是传递依赖。