织梦CMS - 轻松建站从此开始!

欧博ABG官网-欧博官方网址-会员登入

欧博allbet联系模型

时间:2024-05-26 13:25来源: 作者:admin 点击: 56 次
文章浏览阅读4.4k次,点赞2次,收藏9次。实体-联系数据模型(E - R数据模型)被开发来方便数据库的设计,它是通过允许定义代表数据库全局逻辑结构的企业模式( enterprise schema )来做到的。E - R 模型在将现实企业的含义和交互映射到概念模式上非常有用,由于这种用途,许多数据库

实体-联系数据模型(E - R数据模型)被开发来方便数据库的设计,它是通过允许定义代表数据库全局逻辑结构的企业模式( enterprise schema )来做到的。
E - R 模型在将现实企业的含义和交互映射到概念模式上非常有用,由于这种用途,许多数据库设计工具都利用了来自 E - R 模型的概念。 E - R 数据模型采用了三个基本概念:实体集、联系集和属性。 E - R 模型还有一种相关联的图形表示: E - R 图。 E - R 图( E - R diagram )可以通过图形方式表示数据库的总体逻辑结构。 E - R 模型的广泛使用在很大程度上可能与 E - R 图简单而清晰的特性有关。

实体集

一个实体( entity )是现实世界中可区别于所有其他对象的一个“事物或“对象”。例如,大学中的每个人都是一个实体。每个实体有一组性质,并且某些性质集合的值必须唯一地标识一个实体。例如,一个人可能具有 person_id 性质,其值唯一标识了这个人。因此, person_id 的值677-89-9011将唯一标识出大学中一个特定的人。类似地,课程也可以被看作实体,并且 course_id 唯一标识出了大学中的某个课程实体。实体可以是实实在在的,比如一个人或一本书;实体也可以是抽象的,比如课程、开设的课程段或者航班预订
实体集( entity set )是共享相同性质或属性的、具有相同类型的实体的集合。例如,一所给定大学的所有教师的集合可定义为 instructor 实体集。类似地, student 实体集可以表示该大学中的所有学生的集合。
在建模的过程中,我们通常抽象地使用术语实体集,而不是指某个个别实体的特定集合。我们用实体集的外延( extension )这个术语来指属于实体集的实体的实际集合。因此,大学中教师的实际集合构成了 instructor 实体集的外延。这种区别类似于关系和关系实例之间的区别。
实体集不必互不相交。例如,可以定义大学中所有人员组成的 person 实体集。一个 person 实体可以是 instructor 实体,可以是 student 实体,可以既是 instructor 实体又是 student 实体,也可以都不是。
实体通过一组属性( attribute )来表示属性是实体集中每个成员所拥有的描述性性质为实体集设计一个属性表明数据库存储关于该实体集中每个实体的类似信息,但每个实体在每个属性上可以有它自己的值。 instructor 实体集可能具有的属性是 ID 、 name 、 dept_name 和 salary 。在现实生活中,可能会有更多的属性,如街道号、房间号、州、邮政编码和国家,但是为了简化我们的示例,我们通常省略了这些属性。 course 实体集可能的属性有 course_id 、 title 、 dept_name 和 credits 。
在本小节中,我们只考虑简单的属性——那些不能划分为子部分的属性。
每个实体在它的每个属性上都有一个值( value )。例如,一个特定的 instructor 实体可能在 ID 上的值为12121,在 name 上的值为 Wu ,在 dept_name 上的值为 Finance ,并且在 salary 上的值为90000。
ID 属性用来唯一地标识教师,因为可能会有多位教师拥有相同的名字。在历史上,许多企业发现用政府颁发的标识号作为属性很方便,其值唯一地对人进行了标识。但是,出于安全和隐私的原因,这被认为是不好的做法。一般来说,大学必须为每位教师创建和分配它自己的唯一标识。
因此,数据库包括一组实体集,每个实体集包括任意数量的相同型的实体。一个大学数据库可能包含许多其他的实体集。例如,除了跟踪记录教师和学生外,大学还具有关于课程的信息,用 course 实体集来表示,它带有属性 account_number 、 course_id 、 title 、 dept_name 和 credits 。在真实场景中,一个大学数据库可能会保持数十个实体集。
实体集在 E - R 图中用一个矩形来表示,该矩形分为两个部分第一部分为灰色阴影,它包含实体集的名称第二部分包含实体集所有属性的名称。下图中的 E - R 图显示了 instructor 和 student 两个实体集。与 instructor 关联的属性是 ID 、 name 和 salary 。与 student 关联的属性是 ID 、 name 和 tot_cred 。作为主码部分的属性被加了下划线

在这里插入图片描述

联系集

联系( relationship )是多个实体间的相互关联。例如,我们可以定义关联 Katz 教师和 Shankar 学生的 advisor 联系。这一联系指明 Katz 是学生 Shankar 的导师。联系集( relationship set )是相同类型联系的集合
考虑 instructor 和 student 两个实体集。我们定义 advisor 联系集来表示学生和作为他们的导师的教师之间的关联。这一关联如图所示。为了保持图的简洁,只显示了两个实体集的某些属性。

在这里插入图片描述


E - R 模式中的一个联系实例( relationship instance )表示在所建模的现实企业中被命名的实体之间的一种关联。作为一个示例,一位教师 ID 为45565的 instructor 实体 Katz 和一名学生 ID 为12345的 student 实体 Shankar ,都参与到 advisor 的一个联系实例中。这一联系实例表示在大学中 Katz 教师指导 Shankar 学生。
联系集在 E - R 图中用菱形表示,菱形通过线条连接到多个不同的实体集(矩形)。下图中的 E - R 图显示了通过二元联系集 advisor 关联的 instructor 和 student 两个实体集。

在这里插入图片描述


作为另一个示例,考虑 student 和 section 两个实体集,其中 section 表示ー门课的一次开课。我们可以定义 takes 联系集来表示学生及其所选课程段之间的关联。
尽管在前面的示例中,每个联系集都是两个实体集之间的关联,但一般来说,联系集可以表示两个以上实体集的关联
形式化地说,联系集是在n≥2个(可能相同的)实体集上的数学关系。如果 E1 , E2 ,… ,En 为实体集,那么联系集 R 是

在这里插入图片描述


实体集之间的关联被称为参与,即实体集 E1 , E2 ,… ,En参与( participate )联系集 R
实体在联系中扮演的功能被称为实体的角色( role )。由于参与一个联系集的实体集通常是互异的,因此角色是隐含的并且一般并不指定。但是,当联系的含义需要解释时角色是有用的。当参与联系集的实体集并非互异时就是这种情况;也就是说,同样的实体集以不同的角色多次参与一个联系集在这类联系集中,有必要用显式的角色名来指明实体是如何参与联系实例的,这类联系集有时被称作递归的( recursive )联系集。例如,考虑记录大学中所开设的所有课程的信息的 course 实体集。我们用 course 实体的有序对来建模联系集 prereg ,以描述一门课程(C2)是另一门课程(C1)的先修课。每对课程中的第一门课程扮演C1课程的角色,而第二门课程扮演C2先修课的角色。按照这种方式,所有的 prereq 联系通过(C1,C2)对来表示,排除了(C2,C1)对。在 E - R 图中,我们通过在菱形和矩形之间的连线上进行标注来表示角色。下图给出了 course 实体集和 prereq 联系集之间的角色标识 course_id 和 prereg_id 。

在这里插入图片描述


联系也可以具有被称作描述性属性( descriptive attribute )的属性。作为联系的描述性属性的示例,考虑与 student 和 section 实体集相关联的 takes 联系集。我们可能希望存储联系的描述性属性 grade ,以记录学生在开设的课程中获得的成绩。
联系集的属性在 E - R 图中通过未分割的矩形来表示。我们用虚线将此矩形与表示该联系集的菱形相连接。例如,下图显示了 section 和 student 实体集之间的 takes 联系集。我们将描述性属性 grade 附加到 takes 联系集上。一个联系集可以具有多个描述性属性;例如我们还可以在 takes 联系集上存储描述性属性 for_credit ,以记录学生选这门课是为了修学分,或是旁听这门课程(或非正式地随班听课)。

在这里插入图片描述


复杂的 E - R 设计可能需要拆分成多张可能位于不同页面的图联系集应仅显示在一个位置,但实体集可以在不止一个位置重复出现实体集的属性应在第一次出现时显示。后续出现的实体集应显示为不带属性的,以避免重复信息以及由此产生的在不同出现中显示的属性不一致的可能性
相同的实体集可能会参与到多个联系集中。例如,假设学生可能是某门课程的助教。那么,除了参与 takes 联系集之外, section 和 student 实体集还可能参与 teaching assistant 联系集。
我们之前看到的联系集的形式化定义将联系集定义为联系实例的集合。考虑 student 和 section 之间的 takes 联系。由于集合不能有重复项,因此一名特定学生只能与 takes 联系中的一个特定课程段有一个关联。从而,一名学生只能有一个与某课程段相关联的成绩,在这种情况下这是有意义的。但是,如果我们希望允许一名学生在同一课程段上取得不止一个成绩,我们需要有一个 grades 属性来存储一组成绩;这些属性称为多值属性,我们将在后面看到它们。
advisor 和 takes 联系集给出了二元联系集( binary relationship set )的示例,即涉及两个实体集的联系集数据库系统中的大部分联系集都是二元的。然而,有时联系集会涉及多于两个实体集参与联系集的实体集的数目是联系集的度( degree )。二元联系集的 为2;三元联系集( ternary relationship set )的度为3。
作为一个示例,假设我们有一个代表大学内开展的所有研究项目的 project 实体集,考虑 instrustor 、student 和 project 实体集。每个项目可以有多名参与的学生和多位参与的教师。另外,在项目中工作的每名学生必须有一位相关教师来指导该生在项目中的工作。目前,我们忽略项目和教师之间以及项目和学生之间的前两个联系,而关注在一个特定项目上由哪位教师指导哪名学生。
为了表示这些信息,我们通过 proj_guide 三元联系集将三个实体集联系到一起,它关联 instructor 、 student 和 project 实体集。 proj_guide 的实例表示在一个特定项目上一名特定学生接受了一位特定教师的指导。注意,一名学生在不同项目中可以由不同教师指导,不能将这个联系描述成学生与教师之间的二元关系。
非二元的联系集也可以在 E - R 图中容易地表示。下图展示了三元联系集 proj_guide 的 E - R 图表示形式。

在这里插入图片描述

复杂属性

对于每个属性都有一个可取值的集合,称为该属性的( domain ),或者值集( value set )course_id 属性的域可能是特定长度的所有文本字符串的集合。类似地, semester 属性的域能是集合{秋,冬,春,夏}中的字符串。
E - R 模型中使用的属性可以按照如下的属性类型来进行描述。

简单( simple )和复合( composite )属性。迄今为止在我们的示例中出现的属性都是简单的,也就是说,它们不能被划分为子部分。而复合属性可以被划分为子部分(即其他属性)。例如, name 属性可被构建为一个包括 first_name 、middle_initial和last_name的复合属性。如果用户希望在一些场景中引用整个属性,而在另外的场景中仅引用属性的一部分,则在设计模式中使用复合属性是一种好的选择。假设我们要给 student 实体集增加一个地址。地址可被定义为具有 street、city、state和postal_code属性的复合属性address 。复合属性帮助我们把相关属性集合起来,使模型更清晰
还要注意,复合属性的出现可以是有层次的。在 address 复合属性中,其子属性 street 可以进一步分为street_number、street_name和apartment_number 。下图描述了 instructor 实体集的这些复合属性的示例。

在这里插入图片描述

单值( single - valued )和多值( multivalued )属性。我们示例中的属性对一个特定实体都只有单独的一个值。例如,对某个特定的学生实体而言, student_ID 属于一个学生 ID 。这样的属性被称作是单值的。而在某些实例中,对一个特定实体而言,一个属性可能对应于一组值。假设我们往 instructor 实体集中添加一个number 属性,每位教师可以有零个、一个或多个电话号码,不同的教师可以有不同数量的电话号码。这种类型的属性被称作是多值的。作为另一个示例,我们往 instructor 实体集中添加一个dependent_name属性,它列出所有的家属姓名。这个属性将是多值的,因为任何一位特定的教师可能有零个、一个或多个家属。

派生属性( derived atribute )。这类属性的值可以从其他相关属性或实体的值派生出来。例如,假设 instructor 实体集有一个 students_advised 属性,它表示一位教师指导了多少名学生。我们可以通过统计与一位教师相关联的所有 student 实体的数目来导出这个属性的值。
作为另一个示例,假设 instructor 实体集具有 age 属性,它表示教师的年龄。如果 instructor 实体集还具有 date of birth 属性,我们就可以从 date of birth 和当前日期计算出 age 。因此 age 就是派生属性。在这种情况下, date of birth 可以称为基( base )属性,或存储的( stored )属性派生属性的值并不存储,而是在需要时被计算出来。下图展示了怎样用 E - R 符号来表示复合属性。

在这里插入图片描述


这里具有成员属性 first_name 、middle_initial和last_name的复合属性 name 代替了 instructor 的简单属性 name 。作为另一个示例,假定我们给 instructor 实体集增加一个地址。地址可以被定义为具有 street 、city 、state和postal_code属性的复合属性 address 。 street 属性本身也是一个复合属性,其成员属性为street_number、street_name和apartment_number 。该图还给出了一个由“ {phone_number)”表示的多值属性phone_number ,以及一个由“age”表示的派生属性age。
当实体在某个属性上没有值时认为该属性取空( null )值空值可以表示“不适用”,即该实体的这个值不存在。例如,没有中间名的人可以将middle_initial 属性设置为空。空还可以表示属性值是未知的未知的值要么是缺失的(值存在,但我们没有该信息),要么是不知道的(我们并不知道该值是否确实存在)
例如,如果一位特定教师的 name 值为空,我们推测这个值是缺失的,因为每位教师肯定有一个名字。 apartment_number 属性的空值可能意味着地址中没有包括公寓号(不适用),公寓号是存在的但是我们并不知道是什么(缺失的),或者我们不知道公寓号是否是该教师地址的一部分(不知道的)。

映射基数

映射基数(mapping cardinality)或基数比率表示一个实体能通过一个联系集关联的另一些实体的数量。映射基数在描述二元联系集时最有用,尽管它们可用于描述涉及多于两个实体集的联系集。
对于实体集A和B之间的二元联系集R来说,映射基数必然是以下情况之一:

一对一( one - to - one )。 A 中的一个实体至多与 B 中的一个实体相关联,并且 B 中的一个实体也至多与 A 中的一个实体相关联。

一对多( one - to - many )。 A 中的一个实体可以与 B 中任意数量(零个或多个)的实体相关联,而 B 中的一个实体至多与 A 中的一个实体相关联。

多对一( many - to - one )。 A 中的一个实体至多与 B 中的一个实体相关联,而 B 中的一个实体可以与 A 中任意数量(零个或多个)的实体相关联。

多对多( many - to - many )。 A 中的一个实体可以与 B 中任意数量(零个或多个)的实体相关联,而且 B 中的一个实体也可以与 A 中任意数量(零个或多个)的实体相关联。

一个特定联系集的适当的映射基数显然依赖于该联系集所建模的现实世界的情况。
作为示例,考虑 advisor 联系集。如果一名学生可以由多位教师指导(比如学生被联合指导的情况),那么此联系集是多对多的。如果一所特定的大学施加了一种约束,一名学生只能由一位教师指导,而一位教师可以指导多名学生,那么 instructor 到 student 的联系集是一对多的。因此,映射基数可用于指定关于在现实世界中允许哪些联系的约束。
在 E - R 图表示法中,我们通过在联系集和相关实体集之间绘制有向线段(→)或无问线段(一)来指明联系上的基数约束。具体来说,以大学为例存在以下情况:

一对一( one - to - one )。我们从联系集到两个实体集各画一条有向线段。例如,在图7-11a中,指向 instructor 和 student 的有向线段表示一位教师最多可以指导一名学生,并且一名学生最多可以有一位导师。

一对多( one - to - many )。我们从联系集到联系的“一”侧画一条有向线段。因此,在图7-11b中,有一条从 advisor 联系集到 instructor 实体集的有向线段,以及一条到 student 实体集的无向线段。这表示一位教师可以指导多名学生,但一名学生最多只能有一位导师。

多对一( many - to - one )。我们从联系集到联系的“一”侧画一条有向线段。因此,在图7-11c中,有一条从 advisor 联系集到 instructor 实体集的无向线段,以及一条到 student 实体集的有向线段。这表示一位教师最多可以指导一名学生,但一名学生可以有多位导师。

多对多( many - to - many )。我们从联系集到两个实体集各画一条无向线段。因此,在图7-11d中,从advisor联系集到instructor和student实体集都有无向线段。这表示一位教师可以指导多名学生,并且一名学生可以有多位导师。

在这里插入图片描述


如果实体集 E 中的每个实体都必须参与到联系集 R 中的至少一个联系中,那么实体集 E 在联系集 R 中的参与就被称为是全部的。如果 E 中一些实体可能不参与到 R 的联系中,那么实体集 E 在联系集 R 中的参与就被称为是部分的
例如,一所大学可能要求每名学生至少有一位导师;在 E - R 模型中,这相当于要求每个 student 实体通过 advisor 联系至少与一位教师相关联。因而, student 在 advisor 联系集中的参与是全部的。而一位教师不是必须要指导学生。因此,可能只有某些 instructor 实体通过 advisor 联系同 student 实体集相关联,那么 instructor 在 advisor 联系集中的参与是部分的。我们用双线表示一个实体在联系集中的全部参与
E - R 图还提供了一种方式来描述更复杂的约束,这种约束限制了每个实体参与联系集中的联系的次数线段上可以有一个关联的最小和最大基数,用l…h的形式表示,其中l表示最小基数, h 表示最大基数最小值为1表示实体集全部参与联系集,即实体集中的每个实体在该联系集中的至少一个联系中出现最大值为1表示实体至多参与一个联系,而最大值为*代表没有限制
例如,考虑下图。 advisor 和 student 之间的线段有1…1的基数约束,这意味着基数的最小值和最大值都是1。也就是说,每名学生必须有且只有一位导师。 advisor 和 instructor 之间的线段有0.*的限制,说明一位教师可以有零名或多名学生。因此, advisor 联系是从 instructor 到 student 的一对多联系,更进一步地讲, student 在 advisor 中的参与是全部的,这意味着一名学生必须有一位导师。

在这里插入图片描述


很容易将左侧的边上的0…曲解为advisor 联系是从 instructor 到 student 的多对一联系,这正好和正确的解释相反。
如果两条边都有最大值1,那这个联系是一对一的。如果我们在左侧的边上指定基数限制为1…,就可以说每位教师必须指导至少一名学生。
上图中的 E - R 图的另一种替代方式是画一条从 student 到 advisor 的双线,以及一个从 advisor 到 instructor 的箭头,来替换所显示的基数约束。这种替换方式可以强制实施同图中所示约束完全一样的约束。
在非二元的联系集中,我们可以指定多对一联系的某些类型。假设一名学生在一个项目上最多只能由一位教师指导。这种约束可以通过从 proj_guide 指向 instructor 的箭头来表示。
我们至多允许一个箭头从一个非二元的联系集指出,因为在 E - R 图中,从一个非二元联系集指出两个或更多的箭头可以用两种方式来解释。

(责任编辑:)
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:
发布者资料
查看详细资料 发送留言 加为好友 用户等级: 注册时间:2024-12-22 10:12 最后登录:2024-12-22 10:12
栏目列表
推荐内容