[color=darkblue][align=center][size=medium]数据库三范式简述[/size][/align][/color]
1NF:字段原子性,数据库表中的字段都是[color=red]单一属性,不可再分[/color].
例如: 表中含有"地址"字段,但是"地址"还可以拆分成为:国家、省份、城市等.这就说明这类字段还可以拆分,所以不满足第一范式.但是如果涉及到的是姓名时,可能根据实际的需要,将姓和名单独的分开,也可以不分开;
2NF:满足第一范式的基础上,除主键以外每一列都[color=red]依赖[/color]于主键.
例如: 一张描述学生的表,有学生学号、学生姓名、性别、辅导员等字段.显然辅导员与学员学号没有依赖关系,应该把辅导员称放在老师表中。简而言之是,与主键没有依赖关系的字段放在一个表中;
3NF:满足第一、二范式的技术上,除主键以外的列都[color=red]直接依赖[/color]于主键(不存在传递依赖).
例如: 一张描述学生的表,有学生学号,学生姓名,所在学校,学校电话.关键字为"学生学号",因为存在如下关系: (学生姓名,所在学校,学校电话) ¬—依赖—(学生学号) 此时这个数据库是满足1NF、2NF,但是不满足3NF,因为存在如下传递依赖:( 学生学号)→(所在学校)→(学校电话)
存在非关键字段"学校电话"对关键字段"学生学号"的传递函数依赖
如果拆成如下则满足上面的三个范式:
学生:学生姓名、学生学号、所在学校;
学校:学校名、学校电话;
满足范式要求设计的数据库结构清晰,同时可避免数据冗余和操作异常.但是,在适当的情况下进行适当的数据冗余反而使操作简单化而不会产生操作异常.
商品表的表结构:
商品名称 商品型号 单价 数量 金额
电视机 29吋 2,500 40 100,000
“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。
1NF:字段原子性,数据库表中的字段都是[color=red]单一属性,不可再分[/color].
例如: 表中含有"地址"字段,但是"地址"还可以拆分成为:国家、省份、城市等.这就说明这类字段还可以拆分,所以不满足第一范式.但是如果涉及到的是姓名时,可能根据实际的需要,将姓和名单独的分开,也可以不分开;
2NF:满足第一范式的基础上,除主键以外每一列都[color=red]依赖[/color]于主键.
例如: 一张描述学生的表,有学生学号、学生姓名、性别、辅导员等字段.显然辅导员与学员学号没有依赖关系,应该把辅导员称放在老师表中。简而言之是,与主键没有依赖关系的字段放在一个表中;
3NF:满足第一、二范式的技术上,除主键以外的列都[color=red]直接依赖[/color]于主键(不存在传递依赖).
例如: 一张描述学生的表,有学生学号,学生姓名,所在学校,学校电话.关键字为"学生学号",因为存在如下关系: (学生姓名,所在学校,学校电话) ¬—依赖—(学生学号) 此时这个数据库是满足1NF、2NF,但是不满足3NF,因为存在如下传递依赖:( 学生学号)→(所在学校)→(学校电话)
存在非关键字段"学校电话"对关键字段"学生学号"的传递函数依赖
如果拆成如下则满足上面的三个范式:
学生:学生姓名、学生学号、所在学校;
学校:学校名、学校电话;
满足范式要求设计的数据库结构清晰,同时可避免数据冗余和操作异常.但是,在适当的情况下进行适当的数据冗余反而使操作简单化而不会产生操作异常.
商品表的表结构:
商品名称 商品型号 单价 数量 金额
电视机 29吋 2,500 40 100,000
“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。