E-R模型和E-R图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a19990412/article/details/84201920

基本概念

  • 实体:现实世界中客观存在的,可以区别于其他对象的一个对象。例如,大学中每个学生都是一个实体。每个实体都一个标识。,例如大学生都有自己的学号。
  • 实体集:具有相同性质的一个实体的集合。
  • 外延:比如说,我们用学号,性别,姓名等性质(属性)构成一个实体集,大学生。那实际大学里的学生,就是这个实体集的外延
  • 联系:多个实体之间的相互关系。比如,我们可以定义,导师和学生的联系,就是指导
  • 联系集 { ( e 1 , e 2 , . . , e n ) e i E i } \{(e_1,e_2,..,e_n)| e_i \in E_i\} 。其中, E i E_i 是实体集。其实就是关系对
  • 类似于定义了实体集的外延联系集有“联系实例”。本质上是类似的。换汤不换药。
  • 属性:每个属性都有自己可以选取的范围,称之为域(domain)
  • 属性分为简单和复合(composite)。简单就是不可分的意思。比如,name这个属性,一般来说我们可以称之为简单的。但是,如果我们需要考虑到有姓和名两块的话。说明这个就是可分的了。那这个就是个复合的
  • 属性也可以被分为单值和多值的。

三者的关系:

  • 由属性构成了实体
  • 由实体构成了联系

约束

E-R模型可以定义一些数据库中的数据必须要满足的约束。

映射基数

听起来很复杂,其实如果只考虑二元联系集的话,就是很久以前就学过的东西了。

  • 一对一
  • 一对多
  • 多对一
  • 多对多

只用二元联系集,主要是觉得这样表达直观些,多元的话,其实只是维度上的扩展而已,都是基于二元的。

参与约束

参与约束,其实是描绘实体集联系集的关系的。

  • 如果实体集E中的每一个实体都参与到了联系集R的至少一个联系中,那么就称实体集E在联系集R中的参与称为全部的(total)
  • 否则就称为是部分的

很直观,也很简单。

E-R图

  • E-R diagram

基本结构

  • 分割的矩形:矩形表示实体集。分两个部分
    • 第一部分(阴影部分):实体集的名字
    • 第二部分:实体集包含的所有属性(如果是主码,用下划线来标记
  • 菱形:联系集
  • 未分割的矩阵:表示联系集的属性
  • 线段 :将实体集和联系集连接起来的线。
  • 虚线:将联系集和联系集的属性链接起来的线。
  • 双线:显示实体在联系集中的参与度。
  • 双菱形:代表链接到弱实体集的标志性联系集。(什么是弱实体集后面会讲

双线和映射基数

之前讲到了映射基数,其实就是一对一,一对多那些

  • 双线,在线段上加箭头的线

双线加箭头的原则

  • 如果,通过A实体集, 能够唯一的对应到B实体集中的某个元素的话。那么就是A->B。(当然,中间是有菱形的,就是菱形两边的线段,靠近能被唯一确定的实体的那个线段加箭头
  • 如果是一对一:那么就是双向的箭头
  • 如果是一对多or多对一:就是只有一个箭头是双向的。但是方向不一样
  • 如果是多对多:没有箭头,两边的线都是线段。

不加双线的映射基数

E-R图还提供一种不加箭头的。因为加箭头只能知道,多or一。所以,干脆就只用了两个数值来表示。

  • 最小的映射数 l l
  • 最大的映射数 h h
  • 表示方式 l . . h l..h ,将左边的这个东西放到线段上(记住没有箭头)

假设 l . . h l..h 放在靠近实体集A上,表示的是

  • A中的元素对应B中的元素,最少 l l 个,最多 h h
有一些比较经典的例子。
  • A- 0.. 0..* -<菱形>- 1..1 1..1 -B :这个表示B中的元素,有且唯一对应A中的元素。但是A中的元素,可能对应0个或者任意个B中的元素。这种叫一对多。
  • 还比如一对一,那就是两边都是 1..1 1..1 了。
  • 多对多的话,那就是两边都是 0.. 0..* 了。

复合属性的表示方法

  • 简单来说,就是用缩进的方式来表示。

角色

角色这个概念,其实非常有趣。表示一个实体集有可能在某种联系下,同时扮演着两种或以上的角色。
比如:

  • 课程集(一个实体集),关于先修课程集(一个联系集)。同时其实扮演着先修课程和后修课程两个角色。但是本质上对应的实体集的外延都是一个集合来的。

非二元关系

如果某个联系集涉及到多个实体集的话,就有多元关系了。

比如:

  • 导师集合学生集合 应该是有一个导师教学生的这么个联系。在这个联系下可能还有一个实体集,叫,课程集表示导师教学生,是在某个课程下的。

但是,在这种情况下的话,考虑到映射基数,就是一个麻烦了。

弱实体集

定义:

  • 没有足够的属性以形成主码的实体集称为,弱实体集

类似的给出强实体集的定义

  • 有主码的实体集,称为强实体集

弱实体集,会与一个称为标识的实体集相互关联才有意义。

  • 也就是说,这个弱实体集,存在依赖

再给出一个定义。

  • 标识弱实体集之间的联系,就称之为,标识性联系

比如:

  • 课程和时间的组合体,就是section。标识,有一门课,在某个时间上。这么个实体集。
  • 由于如果section,包含有课程的id的话,那么就会没有主码。因为大学里很多课可能是在同一个时间片段上上课。
  • 但是如果有的话,岂不是又重复计算了一遍么?那就是存在冗余。

猜你喜欢

转载自blog.csdn.net/a19990412/article/details/84201920