回想一下,数据库已经学过两三年左右了,期间虽然也会断断续续的使用不同的数据库系统,但具体用的时候都直接通过是否冗余直接对设计的结果进行判断了,所以对数据库范式的具体规定似乎忘的差不多了,正好借着这两天有空重新复习了一下。
- 1NF: 数据库表中的字段都是单一属性的,不可再分。单一属性由基本类型构成,包括整形、实数、字符型、逻辑性、日期型等。例如电话的字段就有可能不符合1NF,因为每个人可能拥有一个以上的电话记录,如家庭电话、办公电话等等。
- 2NF: 在符合1NF的基础上,没有部分主键功能决定其他属性的现象,也就是说主键之外的其他属性都完全功能依赖于主键。如关系(学号,姓名,年龄,课程名称,成绩,学分)中,主键为(学号,课程名称),而课程名称->学分,所以该关系不满足2NF。
- 3NF: 在第二范式的基础上,数据表中如果不存在非关键字段对任意候选关键字段的传递依赖,则符合3NF。例如满足3NF的数据库表不应该存在如下关系:关键字段->非关键字段->非关键字段。 如关系(学号,姓名,学院,学院地点)中,学号为主键,其中存在学号->学院->学院地点,因而其不满足3NF。
- BCNF: 符合3NF的基础上,不存在非主键属性决定部分主键的情况。例如关系(A,B,C,D,E)中,A、B为复合主键,如果存在C->B,则该关系不满足BCNF。