1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,MySQL数据库与应用,主讲人:王艳华,数据库设计,1,.,数据库设计,本章内容,数据规范,1st NF,数据规范,2nd NF,数据规范,3rd NF,数据规范化实例,2,.,数据库设计,本章内容,数据规范,1st NF,数据规范,2nd NF,数据规范,3rd NF,数据规范化实例,3,.,数据库设计,数据规范,1st NF,请分析如下的表,在数据库中该如何存储数据呢?,职工号,姓名,电话,办公室电话,家庭电话,001,张明,3303001,3309987,002,李平,3303002,134567
2、33456,行列交叉产生多个值,4,.,数据库设计,数据规范,1st NF,上表不符合数据表存储方式,该如何处理呢?,职工号,姓名,办公室电话,001,张明,3303001,002,李平,3303002,第一种解决方案:舍弃子列中的某一列,表结构如下:,职工号,姓名,家庭电话,001,张明,3309987,002,李平,13456733456,5,.,数据库设计,数据规范,1st NF,第二种解决方案:把表头中电话列去掉,直接改成,4,列,修改后表结构如下:,职工号,姓名,办公室电话,家庭电话,001,张明,3303001,3309987,002,李平,3303002,13456733456,
3、6,.,数据库设计,数据规范,1st NF,通过以上的实例,我们可以归纳出数据规范化,1NF,:,表中已定义了主键(关键字)。,行与列的交叉点只能有一个值。,7,.,数据库设计,本章内容,数据规范,1st NF,数据规范,2nd NF,数据规范,3rd NF,数据规范化实例,8,.,数据库设计,数据规范,2nd NF,例:选课关系,(,学号,课程号,学分,成绩,),SCI,(,SNO,,,CNO,,,CREDIT,,,GRADE,),SNO,CNO,CREDIT,GRADE,001,029,2,79,002,029,2,88,003,029,2,72,002,034,3,89,学分部分依赖课程
4、号,9,.,数据库设计,数据规范,2nd NF,如何处理这种表中数据的部分依赖呢?,SNO,CNO,GRADE,001,029,79,002,029,88,003,029,72,002,034,89,CNO,CREDIT,029,2,034,3,拆分成只有完全依赖的两个表,10,.,数据库设计,数据规范,2nd NF,第二范式:,如果一个表属于,1NF,,且不包含部分依赖性,既没有任何属性只依赖于关键字的一部分,则这个表属于第二范式(常记成,2NF,)。,换句话说,第二范式是,任何属性都完全依赖主键。,11,.,数据库设计,本章内容,数据规范,1st NF,数据规范,2nd NF,数据规范,3
5、rd NF,数据规范化实例,12,.,数据库设计,数据规范,3rd NF,例:学生实体,(,学号,姓名,所在系,系名称,系地址,),STU,(,SNO,SNAME,DNO,DNAME,LOCATION,),SNO,SNAME,DNO,DNAME,LOCATION,001,张明,IM,信息管理,行政,415,042,刘丽,EG,电力工程,行政,502,107,李华平,IM,信息管理,行政,415,109,邓丽娟,HR,人力资源,行政,317,系名称、系地址依赖于所在系,13,.,数据库设计,数据规范,3rd NF,如何解决这种传递依赖呢?,DNO,DNAME,LOCATION,IM,信息管理,行
6、政,415,EG,电力工程,行政,502,HR,人力资源,行政,317,SNO,SNAME,DNO,001,张明,IM,042,刘丽,EG,107,李华平,IM,109,邓丽娟,HR,拆分,14,.,数据库设计,数据规范,3rd NF,通过以上实例总结得到:,一个表属于,2NF,,且不包含传递依赖性,则这个表是第三范式(常记成,3NF,)。,换句话说,没有任何一个非关键属性依赖于另一个非关键属性。,15,.,数据库设计,本章内容,数据规范,1st NF,数据规范,2nd NF,数据规范,3rd NF,数据规范化实例,16,.,数据库设计,数据规范化实例,假设某建筑公司要设计一个数据库,说明如下
7、公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等;,公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等;,公司按工时和小时工资率支付工资,小时工资率由职工职务决定(如,技术员的小时工资率与工程师不同);,公司定期制定一个工资报表如下图:,17,.,数据库设计,数据规范化实例,工程号,工程名称,职工号,姓名,职务,小时,工资率,工时,实发工资,A1,花园大厦,1001,齐光明,工程师,65,13,845.00,1002,李思岐,技术员,60,16,960.00,1004,葛宇洪,技术员,60,19,1140.00,小计,2945.00,A2,立交桥,1
8、001,齐光明,工程师,65,15,975.00,1003,鞠明亮,工人,55,17,935.00,小计,1910.00,A3,临江饭店,1002,李思岐,技术员,60,18,1080.00,1004,葛宇洪,技术员,60,14,840.00,小计,1920.00,18,.,数据库设计,数据规范化实例,首先把表格规范化为符合,1NF,,规范化后如下所示:,工程号,工程名称,职工号,姓名,职务,小时工资率,工时,A1,花园大厦,1001,齐光明,工程师,65,13,A1,花园大厦,1002,李思岐,技术员,60,16,A1,花园大厦,1004,葛宇洪,技术员,60,19,A2,立交桥,1001,
9、齐光明,工程师,65,15,A2,立交桥,1003,鞠明亮,工人,55,17,A3,临江饭店,1002,李思岐,技术员,60,18,A3,临江饭店,1004,葛宇洪,技术员,60,14,19,.,数据库设计,数据规范化实例,表中包含大量的冗余,可能会导致数据异常:,更新异常 例如,修改职工号,=1001,的职务,则必须修改所有职工号,=1001,的行。,添加异常 若要增加一个新的职工时,首先必须给这名职工分配一个工程。(因为主关键字不能为空),删除异常。,20,.,数据库设计,数据规范化实例,采用这种方法设计表的结构,虽然很容易产生工资报表,但是每当一名职工分配一个工程时,都要重复输入大量的数据。这种重复的输入操作,很可能导致数据的不一致性。,21,.,数据库设计,数据规范化实例,用函数依赖图表示所有属性之间存在的函数依赖关系,如下图所示。,工程号,工程名称,职工号,姓名,职务,小时工资率,工时,22,.,数据库设计,数据规范化实例,工程号,工程名称,职工号,姓名,职务,小时工资率,工程号,职工号,工时,符合,2NF,表结构如下:,23,.,数据库设计,数据规范化实例,工程号,工程名称,工程号,职工号,工时,职工号,姓名,职务,职务,小时工资率,符合,3NF,表结构如下:,24,.,亲爱的同学,下节课再见!,25,.,






