数据库笔记--(第七章)数据库设计与E-R模型
1.设计过程概述
数据需求分析:数据库设计者需要同应用领域的专家和用户进行深入的沟通,产生用户需求规格说明书。
概念设计:定义数据库中表示的实体、实体的属性、实体之间的联系以及实体和联系集之上的约束。概念设计阶段会导致E-R图(实体-联系图)的构建,它提供了对模式的图形化表示。
功能需求规格说明:完善的概念模式还需指明企业的功能需求。在功能需求规格说明(specification of functional requirement)中,用户描述将在数据上进行各类操作(或事物)。操作的例子包括修改或更新数据,搜索并取回特定数据,以及删除数据。设计者可以检查所设计的模式,以确保其满足功能需求。
逻辑设计阶段:将以实体-联系模型定义的概念模式映射到关系模式。
物理设计阶段:指明数据库的物理特征,包括文件组织格式和索引结构的选择等等。
设计一个数据库模式的时候必须确保避免两个主要的缺陷:冗余和不完整。
2.实体-联系模型(E-R模型)
2.1 实体集
具有相同类型(或属性)的一个实体集合。
2.2 联系集
相同类型联系的集合。
2.3 属性
简单和复合属性:复合属性可以划分为更小的部分(其他属性),例如name可以设计为包括first_name, middle_initial, last_name 的复合属性。 address 、street 、 name 复合属性
单值和多值属性:一个属性对于特定实体只有一个值,即单值属性。多值属性例如:每个的教师可以有0个、1个或2个电话号码,不同的教师可以有不同数量的电话号码。 { phone_number } 多值属性
派生属性:可以从别的属性中派生出来。例如:instructor 实体集有属性age 和 date_of_birth ,我们就可以从date_of_birth 计算出 age 。因此age 就是派生属性。 age
3. 约束
3.1 映射基数
一对一:A中的一个实体至多可以与B中一个实体相关联。
一对多:A中的一个实体可以与B中的任意数目(0个或多个)的实体相关联,而B中的一个实体至多与A中的一个实体相关联。
多对多:A中的一个实体可以与B中的任意数目(0个或多个)的实体相关联,而且B中的一个实体也可以与A中的任意数目(0个或多个)的实体相关联。
3.2 参与约束
上图(a)中,A 在联系集中的参与是全部( total participation)的,B 在联系集中的参与是部分(partial participation)的。上图(b),A 和B 在联系集中的都是全部参与。
3.3 码
超码,候选码,主码的概念与关系模式上的的定义相同。
4.实体-联系图
**双线显示实体在联系集中的参与度,双线表明全部参与
**双菱形代表连接到弱实体集的标志性联系集
4.1 映射基数
一对一:
一对多:一名教师可以指导多名学生
多对多:section 和 time_slot 多对多映射,其中section全部参与。
基数约束:每个student最少有一个instructor , 最多也有一个instructor ; 每个instructor 最多可以指导无数个(多个)student , 最少 0 个。
4.2 弱实体集与强实体集
弱实体集:没有足够的属性以形成主码的实体集。 图中section 为弱实体集。其分辨符用虚下划线表示。
相对的,有主码的实体集为强实体集。 例如: course 。
弱实体集与强实体集关联才有意义。此强实体集被称为标识(identifying)或属主实体集(owner entity set)。弱实体集存在依赖于标识实体集。将弱实体集与其标识实体集相连的联系称为标识性联系(identifying relationship) 。
5. E-R图转换为关系模式
以下图为例
5.1 强实体集的表示
student( ID , name , tot_cred )
5.2 复杂属性的强实体集的表示
通过为每个子属性创建一个单独的属性来处理复合属性(并不为复合属性自身创建一个单独的属性)。例如对于复合属性地址,它包含省份,城市等子属性。在转化为关系模式的时候,把这些子属性都拆分出来。
5.3 弱实体集的表示
对于从弱实体集转换而来的模式,该模式的主码由其所依赖的强实体集的主码和弱实体集的分辨符组合而成。 section( course_id , sec_id , semester , year )
5.4 联系集的表示
设R是联系集,那么R的属性是所有参与R的实体集的主码跟R的描述性属性的并集。
多对一的约束:以advisor为例,是student 到 instructor 多对一的 ,它的主码为student 的主码 s_ID。还在联系集advisor上建立了外码约束,属性i_ID参照instructor , 属性s_ID参照student 。