数据库中的几种规范

1、 数据库命名 规范
一个项目组内所有设计数据库的程序员应当共同遵守统一的“数据库命名规范”。在本书的附录B中,我们提供了一个“数据库命名规范”实例,供大家参考。

2、数据库设计范式
关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式,接下来简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另外还有第四范式和第五范式。在你设计数据库时,若能符合这几个范式,你就是数据库设计的高手。
(1)第一范式(1NF)
数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
例如,电话的字段就可能不符合第一正规化,因为每个人可能有一个以上的电话需要记录,这时最简单的做法就是将字段增加,不要用电话当字段名称,用家里电话、手机、办公室电话、分机号码、宿舍电话等。

(2)第二范式(2NF)
规则是符合第一范式,而且没有部分主键功能决定其他属性的现象,也就是主键之外的其他属性都完全的功能相依于主键。
假定选课关系表为SelectCourse(学号,姓名,年龄,课程名称,成绩,学分),关键字为组合关键字(学号,课程名称),因为存在如下决定关系:(学号,课程名称)→(姓名,年龄,成绩,学分)。
这个数据库表不满足第二范式,因为存在如下决定关系:
   (课程名称)→(学分),即知道课程,就可以知道该课程的学分。
   (学号)→(姓名,年龄),即知道了学号,就可以知道该学生的姓名和年龄。
① 数据冗余
同一门课程由n个学生选修,“学分”就重复n1次;同一个学生选修了m门课程,姓名和年龄就重复了m1次。
② 更新异常
若调整了某门课程的学分,数据表中所有行的“学分”值都要更新,否则会出现同一门课程学分不同的情况。
③ 插入异常
假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有“学号”关键字,课程名称和学分也无法记录入数据库。
④ 删除异常
假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
把选课关系表SelectCourse改为如下三个表。
   学生:Student(学号,姓名,年龄)
   课程:Course(课程名称,学分)
   选课关系:SelectCourse(学号,课程名称,成绩)
这样的数据库表是符合第二范式的,消除了数据冗余、更新异常、插入异常和删除异常。

(3)第三范式(3NF)
在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递 函数依赖则符合第三范式。
所谓传递函数依赖,指的是如果存在“A→B→C”的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:关键字段→非关键字段x→非关键字段y。
假定学生关系表为Student(学号,姓名,年龄,所在学院,学院地点,学院电话),关键字为单一关键字“学号”,因为存在如下决定关系:
   (学号)→(姓名,年龄,所在学院,学院地点,学院电话)
这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
(学号)→(所在学院)→(学院地点,学院电话)
把学生关系表分为如下两个表。
   学生:(学号,姓名,年龄,所在学院);
   学院:(学院,地点,电话)。

(4)BCNF范式
BCNF范式(Boyce/Codd Normal Form),是由R.F.Boycy和E.F. Codd共同提出的,可以算成是第三正则化的补充,规则是符合第三正则化原则,并且没有非主键属性可以功能性决定部分主键的现象。
假 设有一个表R,其中的属性有A,B,C,D,E,以A和B为复合主键,R={A,B,C,D,E},如果存在有非主键属性,比如说C可以功能性决定 B,C→B,而B是主键的一部分,这时第三正则化是没有办法分辨出来这种错误的,所以有BCNF正则化规则来把关,同样地,BCNF正则化的 方法也是将原 来的表拆开,成立一个新的关联表R1来装C→B,R1={C,B},但原来的表R还是以(A,B)为复合主键,以B为外键关联到新的表去,以保留原有的信 息。
R={A,B,D,E},R1={C,B},R.B=R1.B

你可能感兴趣的:(数据库)