第五十三讲 ASP.NET实战编程(六)
* 摘要
。在线电子商务系统
* 技术难点
。基类的设计
。用户控件
。数据绑定
数据库设计范式
。关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,
另有第四范式,第五范式,在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手。
。第一范式(1NF)
。第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属生由基本类型构成,包括整型,实数,字符型,逻辑型,日期型等
。职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里电话电话号码)规范成为1NF有三种方法:
-重复存储职工号和姓名。这样,关键字只能是电话号码。
-职工号为关键字,电话号码分为单位电话和住宅电话两个属性
-职工号为关键字,但强制每条记录只能有一个几电话号码
。第二范式(2NF)
。数据库表中所有非关键字段都完全依赖于任意一组候选关键字。
。假定选课关系表为SelectCource(学号,姓名,年龄,课程名称,成绩,学分),关键字为组合关键字(学号,课程名称),因为存在如下决定关
系:
-(学号,课程名称)->(姓名,年龄,成绩,学分)
。这个数据库表不满足第二范式,因为存在如下决定关系:
-(课程名称)->(学分)
-(学号)->(姓名,年龄)
。(1)数据冗余
-同一门课程由N个学生生选修,“学分”就重复n-1次;同一个学生选修了M门课程,姓名和年龄就重复了M-1次。
。(2)更新异常:
-若调整了某门课程的学分,数据表中所有行的“学分”值都要更新,否则会出现同一门课程学分不同的情况。
。(3)插入异常:
-假设要开设一门新的课程,暂时还没有人选修。这亲,由于还没有“学号”关键字,课程名称和学分也无法记录入数据库。
。(4)删除异常
-假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
。把选课关系表SelectCourse改为如下三个表:
-学生:Student(学号,姓名,年龄)
-课程:Cource(课程名称,学分)
-选课关系:SelectCourse(学号,课程名称,成绩)
。这样的数据库表是符合第二范式的,消除了数据冗余,更新异常,插入异常和删除异常。
。第三范式(3NF)
。在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在“A->B->C”的决定关系,则C传递函数依赖于A。因些,满足第三范式的数据库表应该不存在如下依赖关系。
-关键字段->非关键字段x->非关键字段y
。假定学生关系表为Student(学号,姓名,年龄,所在学院,学院地点,学院电话),关键字为单一关键字“学号”,因为存在如下决定关系:
-(学号)->(姓名,年龄,所在学院,学院地点,学院电话)
。这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
-(学号)->(所在学院)->(学院地点,学院电话)
。把学生关系表分为如下两个表:
-学生:(学号,姓名,年龄,所在学院)
-学院:(学院,地点,电话)