数据库的设计(E-R图,数据库模型图,三大范式)

ER图概念模型转换为关系表逻辑模型(二元联系、三元联系) - suntroop - 博客园 (cnblogs.com)

数据库基本概念

 

 

     实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,不如说“老师与学校的关系”。

      属性:教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。

     元组:表中的一行就是一个元组。

     分量:元组的某个属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库了。

     :表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫  “候选码”。

     候选码(关键字): 若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何真子集都不能再标识,则称该属性组为(超级码)候选码。

     我们从候选码中挑一个出来做老大,它就叫 “主码”(主键、主关键字)。

     全码:如果一个码包含了所有的属性,这个码就是全码。

主码=主键=主关键字,关键字=候选码   候选关键字=候选码中除去主码的其他候选码

主属性:候选码包含的属性(一个或多个属性)

     主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。

     非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。

 

     外码:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码。 

 

 

一、第一范式

1NF是对属性原子性,要求属性具有原子性,不可再分解;

表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......

如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是;

二、第二范式

2NF是对记录惟一性,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖;通俗的说有主键ID

表:学号、课程号、姓名、学分;

这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖与学号,所以不符合二范式。

可能会存在问题:

  • 数据冗余:,每条记录都含有相同信息;
  • 删除异常:删除所有学生成绩,就把课程信息全删除了;
  • 插入异常:学生未选课,无法记录进数据库;
  • 更新异常:调整课程学分,所有行都调整。

正确做法:
学生:Student(学号, 姓名);
课程:Course(课程号, 学分);
选课关系:StudentCourse(学号, 课程号, 成绩)。

三、第三范式

3NF是对字段冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;

表: 学号, 姓名, 年龄, 学院名称, 学院电话

因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

可能会存在问题:

  • 数据冗余:有重复值;
  • 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况 。

正确做法:

学生:(学号, 姓名, 年龄, 所在学院);

学院:(学院, 电话)。

 

posted @ 2022-07-06 15:40  suntroop  阅读(48)  评论(0)    收藏  举报