1NF是对属性的原子性
,要求属性具备原子性,不可再分解;数据库
表:字段一、 字段2(字段2.一、字段2.2)、字段3 ......
如学生(学号,姓名,性别,出生年月日),若是认为最后一列还能够再分红(出生年,出生月,出生日),它就不是一范式了,不然就是;数据库设计
2NF是对记录的唯一性
,要求记录有唯一标识,即实体的唯一性,即不存在部分依赖;ui
表:学号、课程号、姓名、学分;
这个代表显说明了两个事务:学生信息, 课程信息;因为非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖与学号,因此不符合二范式。spa
可能会存在问题:.net
数据冗余:
,每条记录都含有相同信息;删除异常:
删除全部学生成绩,就把课程信息全删除了;插入异常:
学生未选课,没法记录进数据库;更新异常:
调整课程学分,全部行都调整。正确作法:
学生:Student
(学号, 姓名);
课程:Course
(课程号, 学分);
选课关系:StudentCourse
(学号, 课程号, 成绩)。设计
3NF是对字段的冗余性
,要求任何字段不能由其余字段派生出来,它要求字段没有冗余,即不存在传递依赖;code
表: 学号, 姓名, 年龄, 学院名称, 学院电话
由于存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。blog
可能会存在问题:事务
数据冗余:
有重复值;更新异常:
有重复的冗余信息,修改时须要同时修改多条记录,不然会出现数据不一致的状况 。正确作法:ip
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 电话)。
通常说来,数据库只需知足第三范式(3NF
)就好了。
没有冗余的数据库设计能够作到。可是,没有冗余的数据库未必是最好的数据库,有时为了提升运行效率,就必须下降范式标准,适当保留冗余数据。具体作法是:在概念数据模型设计时遵照第三范式,下降范式标准的工做放到物理数据模型设计时考虑。下降范式就是增长字段,容许冗余,达到以空间换时间的目的
。
〖例〗:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,代表该表的设计不知足第三范式,由于“金额”能够由“单价”乘以“数量”获得,说明“金额”是冗余字段。可是,增长“金额”这个冗余字段,能够提升查询统计的速度,这就是以空间换时间的做法。
在Rose 2002
中,规定列有两种类型:数据列和计算列。“金额”这样的列被称为“计算列”,而“单价”和“数量”这样的列被称为“数据列”。
优势:
缺点:
优势:
缺点:
参考资料以下: