1、n设计过程n实体-联系模型n约束n设计问题 n扩展的E-R特性n银行数据库的设计n转换为关系模式n数据库设计nUML设计阶段:1.概念设计阶段2.逻辑设计阶段3.物理设计阶段 设计问题:n冗余n不完整n实体-联系(Entity-Relationship)模型:E-R模型是一种语义模型。在将现实世界事实的含义和相互关联映射到概念模式方面非常有用。n采用三个基本概念:实体集、联系集、属性n一个数据库可以被建模为:l实体的集合l实体间的联系n实体实体是现实世界可区别于所有其他对象的一个“事物”或“对象”。l例子:张三,公司,事件,计划n实体集实体集是相同类型即具有相同性质(或属性)的一个实体集合。l
2、例子:所有人的集合,公司的集合,树的集合,假日的集合n实体集的外延外延是指属于实体集的实体的实际集合。n实体有属性属性,它是实体集中每个成员所拥有的描述性性质。l例子:人有姓名和地址n每个实体的每个属性都有一个值值。instructor_ID instructor_name student-ID student_namen联系联系是指多个实体间的相互关联例子:44553(Peltier)advisor 22222(Einstein)student entity relationship set instructor entityn联系集联系集是相同类型联系的集合l(44553,22222)ad
3、visorn联系集也可以有属性属性。n比如,实体集instructor 和 student 之间的联系集advisor,可以有属性date,以表示教师成为学生的导师的日期n实体在联系中扮演的功能称为实体的角色实体的角色n角色是隐含的,通常不指定n当同样的实体集参与一个联系集多于一次,这类联系集称作是自环的自环的。此时需用角色指明实体是如何参与联系实例的n参与联系集的实体集的数目称为联系集的度度。n二元联系集二元联系集l涉及两个实体集(度为2)。l数据库系统中大多数联系集都是二元的。n涉及两个实体集以上的联系是很少的。4students 在instructor的指导下完成projects。4pr
4、oj_guide 是instructor,student和project之间的三元联系。n实体通过一组属性来表示,属性是实体集中每个成员所拥有的描述性性质l instructor=(ID,name,street,city,salary)course=(course_id,title,credits)n域域每个属性可取值的集合,也称值域值域l实体集的属性是将实体集映射到域的函数n属性类型:l简单简单和复合复合属性l单值单值和多值多值属性4举例:多值属性:phone_numbersl派生派生属性和基基属性4派生属性可以从别的属性派生出来。4派生属性值不存储,而是在需要时计算出来。n映射基数映射基数
5、,或基数比率,表示一个实体通过一个联系集能关联的实体的个数。l在描述二元联系集时非常有用n对二元联系集来说,映射基数必然是以下情况之一:l一对一l一对多l多对一l多对多 一对一一对多注意:A和B中的某些元素可能并不映射到另一集合中的任一元素多对一多对多注意:A和B中的某些元素可能并不映射到另一集合中的任一元素n如果实体集E中的每个实体都参与到联系集R的至少一个联系中,实体集E在联系集R中的参与称为全部全部(totaltotal)的。n如果实体集E中只有部分实体参与到R的联系中,实体集E在联系集R中的参与称为部分(部分(partialpartial)的。n一个实体集的超码超码是一个或多个可以用来
6、唯一地标识实体的属性。n一个实体集的候选码候选码是最小的超码lID 是instructor的候选码lcourse_id是course的候选码n主码主码是被选择用来区分实体的候选码,主码只有一个,但候选码可以有多个。n如果联系集R没有属性与之相关联,那么属性集合 primary-key(E1)primary-key(E2)primary-key(En)描述了集合R 中的一个联系。如果联系集R有属性a1,a2,am 与之相关联,那么属性集合 primary-key(E1)primary-key(E2)primary-key(En)a1,a2,am 描述了集合R中的一个联系。n相关的实体集的主码的集
7、合形成了联系集的超码。在以上的两种情况下,属性集合 primary-key(E1)primary-key(E2)primary-key(En)总是构成联系集的一个超码联系集的一个超码。n(s_id,i_id)是advisor的超码。l表示一对实体集在一个特定的联系集中只能有一个联系。n假如我们想知道学生和导师之间的多次会议日期,我们不能为每个会议建立联系。l可以使用多值属性n决定候选码时必须考虑联系集的映射基数。n在有多个候选码的情况下,选择主码是要考虑联系集的语义。n假设有实体集linstructor,有dept_name属性ldepartment及联系集linst_dept,联系instr
8、uctor和departmentninstructor中的 dept_name 属性是冗余的,因为有一个明确的关系inst_dept来联系 instructors和departmentsl属性重复了联系中的信息,应该从instructor中除去n去除冗余属性后的,大学模式见P156 n矩形代表实体集。n属性在实体矩阵中列出。n构成主码的属性以下划线标明。n菱形代表联系集。n全部参与(用两条线标识):实体集中的每个实体都参与到联系集的至少一个联系中l例:section 全部参与sec_course 4 每个section 都有一个coursen部分参与:某些实体不参与到联系集中的任何一个联系l例
9、:部分instructor 参与到advisor 中n我们在联系集和实体集之间画一个箭头()代表“一”或者一条线段()代表“多”来表示基数约束。ninstructor 与student之间的一对一联系l一个instructor通过advisor至多与一个student相联系 l一个student通过advisor至多与一个instructor相联系ninstructor 与student之间的一对多联系l一个instructor通过advisor与多个student(包括0个)相联系 l一个student通过advisor至多与一个instructor相联系ninstructor 与stude
10、nt之间的多对一联系 l一个instructor通过advisor至多与一个student相联系 l一个student 通过advisor与多个instructor(包括0个)相联系n一个instructor通过advisor与多个student(包括0个)相联系n一个student 通过advisor与多个instructor(包括0个)相联系 n基数限制也可以用参与约束来表示n一个联系的实体集不需要唯一l一个实体集中的元素每次出现都在关系中代表一个“角色”n“course_id”和“prereq_id”被称为角色角色.n我们只允许在一个三元(或三元以上)联系集外有一个箭头来表示基数约束。l
11、例,从proj_guide到instructor的箭头表示每个学生在每个项目上至多有一个导师来指导n如果有多于一个的箭头,那就会有两种解释。l例,R 是 A,B 和C 之间的三元联系集,并且有两个箭头指向B和C,这可以表示为 4每个在A中的实体都与来自B和C的至多一个实体相关联 4每个来自(A,B)的实体对都与来自C的至多一个实体相关联,而每个来自(A,C)的实体对都与来自B的至多一个实体相关联l为了避免混淆,在联系集外我们只允许有一个箭头n一个没有足够的属性形成主码的实体集叫做弱实体集弱实体集。n弱实体集必须与标标识识或属主实属主实体体集(集(owner entity setowner en
12、tity set)关联才有意义。l弱实体集存在依赖于标识实体集n将弱实体集与其标识实体集相连的联系称为标识性联系。标识性联系。l标识联系集以双边框的菱形表示n弱实体集通过一个全部参与的,多对一的联系集与标识实体集联系。n弱实体集的分辨符分辨符是使得我们区分弱实体集中实体的属性集合。也称为该弱实体集的部分码。n弱实体集的主码由标识实体集的主码和该弱实体集的分辨符共同组成。n弱实体集的分辨符用虚下划线表示。n标识联系集以双边框的菱形表示。nsection的主码 (course_id,sec_id,semester,year)n注意:强实体集的主码并不存储于弱实体集。l如果course_id被隐含的存储,section会是一个强实体集,这样section和course 之间的联系集将会重复存储course_id属性n弱实体集可以参与标识性联系以外的其他联系。也可能与不止一个标识实体集关联。n在某些情况下,数据库设计者会选择将一个弱实体集表示为属主实体集的一个多值复合属性:l如果弱实体集只参与标识性联系,而且其属性不多,建模时更适合将其作为属性l反之,更适合将其表示为弱实体集