sponsored links

关系数据库范式的例子

关系数据库范式的例子

Top

Top

Top

Top

4 楼CoolAbu(阿卜-Never Stop(★★★★))回复于 2002-12-20 13:43:33 得分 60

Patrick_DK   (我向西 引北风 晒成一身古铜)   好像是Java版的版主吧??;)我记得你的Java很不错。  
   
  第一范式:消除组中的重复,也就是说列中是否存储了其他列中的信息  
  第二范式:消除部分依赖列,也就是说是否有依赖于一部分主键的列  
  第三范式:消除非依赖列,是否有依赖于非主键的列  
   
  例如:  
   
  学生信息表  
   
  学生ID,姓名,地址,城市,邮政编码,所在年级,性别,参加课程,课程级别,课程ID,名称,描述,教师ID,教  
   
  师姓名,时间表,地点,先决课程  
   
  如果这么多字段在同一个表里,那么这种设计会被认为没有正规化,这里有很多重复的信息,为了把数据库设计转化  
   
  为第一范式,需要把信息分成两个表,并在两个表之间建立关系,如下:  
   
  学生表  
  学生ID,姓名,地址,城市,邮政编码,所在年级,性别  
   
  学生课程表  
  学生ID,课程ID,名称,描述,教师ID,教师姓名,时间表,地点  
   
   
  通过把学生从课程中分离,我们可以消除由不同的逻辑组引入的重复,我们必须满足消除信息重复的目标。接下来,  
   
  从第一范式到第二范式,我们需要消除表中仅仅部分依赖主键的列,这些列应该被分割到不同的表中。在学生课程表  
   
  中,许多列仅仅依赖于课程ID,而不依赖于学生ID,这个表的主键是学生ID+课程ID,因此把这个表分成两个表,如下  
   
  :  
   
  学生课程表  
  学生ID,课程ID,课程级别  
   
   
  课程表  
  课程ID,名称,描述,教师ID,教师姓名,先决课程,时间表,地点  
   
  既然对主键的部分依赖已经消除,数据库就已经满足第二范式了。为了进一步把数据库转化为第三范式,需要把表中  
   
  对构成主键的列的不依赖部分分离出去,教师姓名依赖于教师ID,而不依赖于课程ID,索引,这些列应该被分离以形  
   
  成一个新表,如下:  
   
  教师表  
  教师ID,教师姓名  
   
  最终的课程表如下  
  课程ID,名称,描述,教师ID,时间表,地点  
   
  一旦所有的数据库的设计依赖性都被消除,也就满足了第三范式。  
   
   
  不一定每种数据库设计都要达到第三范式,因为达到第三范式在查询的时候进行大量的连接操作,所以要针对你的情况设计你的数据库。  
   
  都是我一个字一个字敲的,好累,希望对你有些帮助,;) 

Tags: