版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a19990412/article/details/84201920
文章目录
基本概念
- 实体:现实世界中客观存在的,可以区别于其他对象的一个对象。例如,大学中每个学生都是一个实体。每个实体都一个标识。,例如大学生都有自己的学号。
- 实体集:具有相同性质的一个实体的集合。
- 外延:比如说,我们用学号,性别,姓名等性质(属性)构成一个实体集,大学生。那实际大学里的学生,就是这个实体集的外延
- 联系:多个实体之间的相互关系。比如,我们可以定义,导师和学生的联系,就是指导
- 联系集: 。其中, 是实体集。其实就是关系对
- 类似于定义了实体集的外延,联系集有“联系实例”。本质上是类似的。换汤不换药。
- 属性:每个属性都有自己可以选取的范围,称之为域(domain)
- 属性分为简单和复合(composite)。简单就是不可分的意思。比如,name这个属性,一般来说我们可以称之为简单的。但是,如果我们需要考虑到有姓和名两块的话。说明这个就是可分的了。那这个就是个复合的
- 属性也可以被分为单值和多值的。
三者的关系:
- 由属性构成了实体
- 由实体构成了联系
约束
E-R模型可以定义一些数据库中的数据必须要满足的约束。
映射基数
听起来很复杂,其实如果只考虑二元联系集的话,就是很久以前就学过的东西了。
- 一对一
- 一对多
- 多对一
- 多对多
(只用二元联系集,主要是觉得这样表达直观些,多元的话,其实只是维度上的扩展而已,都是基于二元的。)
参与约束
参与约束,其实是描绘实体集和联系集的关系的。
- 如果实体集E中的每一个实体都参与到了联系集R的至少一个联系中,那么就称实体集E在联系集R中的参与称为全部的(total)
- 否则就称为是部分的
很直观,也很简单。
E-R图
- E-R diagram
基本结构
- 分割的矩形:矩形表示实体集。分两个部分
- 第一部分(阴影部分):实体集的名字
- 第二部分:实体集包含的所有属性(如果是主码,用下划线来标记)
- 菱形:联系集
- 未分割的矩阵:表示联系集的属性
- 线段 :将实体集和联系集连接起来的线。
- 虚线:将联系集和联系集的属性链接起来的线。
- 双线:显示实体在联系集中的参与度。
- 双菱形:代表链接到弱实体集的标志性联系集。(什么是弱实体集后面会讲)
双线和映射基数
之前讲到了映射基数,其实就是一对一,一对多那些
- 双线,在线段上加箭头的线
双线加箭头的原则
- 如果,通过A实体集, 能够唯一的对应到B实体集中的某个元素的话。那么就是
A->B
。(当然,中间是有菱形的,就是菱形两边的线段,靠近能被唯一确定的实体的那个线段加箭头) - 如果是一对一:那么就是双向的箭头
- 如果是一对多or多对一:就是只有一个箭头是双向的。但是方向不一样
- 如果是多对多:没有箭头,两边的线都是线段。
不加双线的映射基数
E-R图还提供一种不加箭头的。因为加箭头只能知道,多or一。所以,干脆就只用了两个数值来表示。
- 最小的映射数
- 最大的映射数
- 表示方式 ,将左边的这个东西放到线段上(记住没有箭头)
假设 放在靠近实体集A上,表示的是
- A中的元素对应B中的元素,最少 个,最多 个
有一些比较经典的例子。
- A- -<菱形>- -B :这个表示B中的元素,有且唯一对应A中的元素。但是A中的元素,可能对应0个或者任意个B中的元素。这种叫一对多。
- 还比如一对一,那就是两边都是 了。
- 多对多的话,那就是两边都是 了。
复合属性的表示方法
- 简单来说,就是用缩进的方式来表示。
角色
角色这个概念,其实非常有趣。表示一个实体集有可能在某种联系下,同时扮演着两种或以上的角色。
比如:
- 课程集(一个实体集),关于先修课程集(一个联系集)。同时其实扮演着先修课程和后修课程两个角色。但是本质上对应的实体集的外延都是一个集合来的。
非二元关系
如果某个联系集涉及到多个实体集的话,就有多元关系了。
比如:
- 导师集合 和 学生集合 应该是有一个导师教学生的这么个联系。在这个联系下可能还有一个实体集,叫,课程集。表示导师教学生,是在某个课程下的。
但是,在这种情况下的话,考虑到映射基数,就是一个麻烦了。
弱实体集
定义:
- 没有足够的属性以形成主码的实体集称为,弱实体集
类似的给出强实体集的定义
- 有主码的实体集,称为强实体集
弱实体集,会与一个称为标识的实体集相互关联才有意义。
- 也就是说,这个弱实体集,存在依赖
再给出一个定义。
- 在标识和弱实体集之间的联系,就称之为,标识性联系
比如:
- 课程和时间的组合体,就是section。标识,有一门课,在某个时间上。这么个实体集。
- 由于如果section,包含有课程的id的话,那么就会没有主码。因为大学里很多课可能是在同一个时间片段上上课。
- 但是如果有的话,岂不是又重复计算了一遍么?那就是存在冗余。