当前课程知识点:数据库概论 >  第七章 实体关系模型 >  7.2 E-R模型详解 >  Video

返回《数据库概论》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《数据库概论》慕课在线视频列表

Video课程教案、知识点、字幕

同学们

大家好

我是云南大学软件学院的教师何婧

实体之间的联系

本质上就是实体实例之间的联系

例如

教师和开设课程之间teches的联系

表示的就是教师实体中的

任意一名教师和各门课程之间的关系

在我们的实际生活中

一名教师可以讲授多门课程

相应的

一门开设课程表中的课程

有且仅有一位任课教师

这样

教师和开设课程实体之间

就形成了一种一对多的联系

根据联系的不同

我们可以将E-R模型中的联系

划分为三种类型

分别是一对一联系

一对多联系

一对多联系

和多对多联系

在本节中

我将为大家详细介绍什么是基数

怎样通过基数来分析实体之间的联系

以及将不同类型的联系

转换成关系模型的转换规则

这幅图

给出了实体之间联系的直观表示

一个圆点表示一个实体实例

当两个圆点之间有连线时

就表示这两个实体实例之间有联系

参与到联系中的实体实例的个数

称为基数

基数有最大基数和最小基数之分

最大基数

表示实体E中的任意一个实例

最多与实体F中的几个实例有联系

例如

一名教师最多与N门课程存在讲授联系

因此最大基数为N

相应的

最小基数

表示实体E中的任意一个实例

表示实体E中的任意一个实例

最少与实体F中的几个实例有联系

因为有些教师一门课程也没有讲授

所以最小基数为0

教师实体对讲授联系的基数

为(0, N)

同理

开设课程实体对讲授联系的基数

为(1,1)

表示一门课程

至少由一名教师讲授

至多由一名教师讲授

当然

在这里我们要说明

基数的计算和需求相关

假如在需求中

有些开设出来的课程

在一个学期中可以由多名教师交叉上课

那么

开设课程对讲授联系的最大基数就变成N了

现在我们理解了什么是基数

接下来

让我们看看怎样通过基数

来分析E-R模型中联系的类型

根据基数取值的不同

将实体参与到联系中的方式划分为

单值参与

多值参与

强制参与和可选参与

四种类型

当最大基数值为1时

表示单值参与

在图中

实体F对联系R是单值参与

因为

实体F中的任意一个实例

最多与实体E中的一个实例有联系

当最大基数值为N时

表示多值参与

图中

实体E对联系R是多值参与

因为

实体E中的一个实例

最多与实体F中的多个实例有联系

从最小基数值分析

当最小基数值为1时

表示强制参与

如图中

实体F对联系R是强制参与

因为

实体F中的任意一个实例

至少与实体E中的一个实例有联系

当最小基数值为0时

表示可选参与

图中

实体E对联系R是可选参与

因为

实体E中存在一些实例

与实体F中的实例都没有联系

基于以上分析

当实体E和实体F

对联系R都是单值参与时

称它们之间的联系

是一对一联系

例如

员工和医保帐户之间是一对一联系

表示一个员工最多与一个医保帐户有联系

一个医保帐户最多与一个员工有联系

假设参与到联系R中的两个实体E和F

一边是单值参与

一边是多值参与

则称联系R是一对多联系

也叫多对一联系

例如

我们之前分析过的

教师和开设课程之间的讲授联系

是一对多联系

教师实体是多值参与

开设课程实体是单值参与

表示一名教师与多门课程有联系

一门课程只与一名教师有联系

最后

假设参与到联系R中的两个实体E和F

两边都是多值参与

则称联系R是多对多联系

例如

员工和项目之间的工作联系是多对多联系

一名员工最多可以在N个项目上工作

一个项目最多与N名员工有联系

到此为止

一个较完整的E-R模型就构建出来了

我们从现实世界的需求中提取出实体

找到了实体和实体之间的联系

划分出了实体和联系的属性

通过上一节的学习

还掌握了将实体和属性

转换成关系模型的两条转换规则

那么

怎样将不同类型的联系转换成关系模型呢

接下来

我们继续学习新的转换规则

转换规则3

实体E和实体F之间的多对多联系

本身要映射成为一张新的关系表

该表中的列包括实体E的主键列

实体F的主键列

以及联系上的附加属性列

例如

员工和项目之间的工作联系是

一个多对多联系

那么

联系生成一张新表

表中包含员工表的主键列eid

项目表的主键列prid

以及联系上的附加属性percent

并且

eid和prid的组合

就是新表works_on表的主键

为什么要生成一张新表呢

假设

我们将项目编号prid

和工作时长percent信息

直接添加到员工表中

也就是

将员工表修改为包含7个列的一张表

是否可以呢

答案是否定的

因为一个员工可以参与多个项目

那么就需要在员工表中插入多行

从而记录不同的项目编号和工作时长信息

但是

这就导致了员工的基本信息冗余

在后面的课程中我们会看到

数据冗余不仅导致空间浪费

还会带来数据操作上的一些异常

因此

这样的设计是不可取的

转换规则4

当实体E和实体F之间是一对多联系时

需要在多的一方添加外键

例如

教师和开设课程之间的讲授联系

是一对多联系

并且开设课程是多的一方

也就是一名教师最多可以讲授多门课程

而开设出来的任意一门课程

最多只对应一名任课教师

为了在关系模型中

表示出两个实体之间的联系

需要在开设课程表中

添加教师表的主键insid

并将该属性设定成为外键

其取值参照于教师表中的主键insid

同时因为开设课程的最小参与基数为1

说明

一门开设出来的课程

至少应该有一名任课教师

所以外键不能为空值

为什么要这样设计呢

根据需求

一门开设出来的课程

最多只对应一名任课教师

那么在开设课程表中

添加外键不会出现数据冗余

相反

如果是在教师表中添加外键

那么

由于一名教师可以讲授多门课程

将会出现教师信息的大量冗余

好了

我们已经学习了多对多联系

和一对多联系的转换规则

下面

我们再来了解一下一对一联系的转换规则

转换规则5

在1一对一联系中

假设实体E是可选参与

实体F是强制参与

那么就在强制参与的一方

即F对应的关系表中添加E的主键

生成F中的一个外键

并且外键不可以取空值

例如

连锁店的各个分店

对应员工表的店长关系

一个连锁店至少有一个店长

至多有一个店长

这边是强制参与

而员工实体中

不是店长的员工

不管理任何分店

最小参与基数是0

是店长的员工最多管理一个分店

最大参与基数是1

那么

员工实体是可选参与关系

因此

在关系模型设计中

应该是在连锁店表这边

添加一个新的属性列

也就是

将员工表的主键列添加到连锁店表中

并设定成连锁店表中的外键

其取值不能为空

转换规则6

在一对一联系中

假设实体E和实体F都是强制参与

那么

就将E和F对应的关系表

直接合并成为一张关系表

也不用再添加额外的外键

例如

每个学生入学的时候

都必须要有一个银行卡号

用于缴纳学费

学生和银行卡号之间是一对一的联系

并且都是强制参与的

那么

我们可以把银行卡号

开户银行等信息

直接添加到学生信息表中

另外

我们还需要注意在一对一联系中

假设E和F都是可选参与的

那么通常就选择

为联系单独创建一张新表

类似于多对多联系的转换方式

例如

每个交警都要配一个对讲机

但是新入职的交警还没有领到对讲机

新买来的对讲机

也还没有分配对应的使用人员

所以

交警实体和对讲机实体之间的

一对一联系是可选参与的

那么

在数据库设计中的处理原则

就是为交警和对讲机之间的领用联系

建立一张新表

到此为止

我们对E-R模型已经有了一个整体的认识

学习了实体

属性和联系的定义和应用

以及

怎样将它们转换成关系模型的转换规则

但是

在E-R模型中还存一些特殊的模型

我们将在下一节做进一步探讨

好了

同学们

我们今天的课程就到这里

下节课再见

数据库概论课程列表:

导论

-数据库概述

--Video

-导论--数据库概述

第一章 数据库基础

-1.1 数据库基础

--Video

-第一章 数据库基础--1.1 数据库基础

第二章 关系运算

-2.1 CAP数据库

--CAP数据库

-第二章 关系运算--2.1 CAP数据库

-2.2 自然关系运算1

-- 自然关系运算1

-第二章 关系运算--2.2 自然关系运算1

-2.3 自然关系运算2

--自然关系运算2

-第二章 关系运算--2.3 自然关系运算2

第三章 结构化查询语言SQL

-3.1 SQL概述

-- SQL概述

-3.1 SQL概述--作业

-3.2 数据定义DDL

--数据定义DDL

-3.2 数据定义DDL--作业

-3.3 SQL数据更新DML

--SQL数据更新DML

-3.3 SQL数据更新DML--作业

-3.4 复杂SQL查询操作1

--复杂SQL查询操作1

-第三章 结构化查询语言SQL--3.4 复杂SQL查询操作1

-3.5 复杂SQL查询操作2

--复杂SQL查询操作2

-第三章 结构化查询语言SQL--3.5 复杂SQL查询操作2

第四章 数据库完整性、视图与安全性

-4.1 数据完整性

--4.1 数据完整性

-4.1 数据完整性--作业

-4.2 完整性约束

--完整性约束

-4.2 完整性约束--作业

-4.3 外键约束

--外键约束

-4.3 外键约束--作业

-4.4 触发器

--触发器

-4.4 触发器--作业

-4.5 视图

--视图

-4.5 视图--作业

-4.6 安全性

--安全性

-4.6 安全性--作业

第五章 索引

-5.1 索引

--Video

-5.2 B+树索引

--Video

第六章 规范化理论

-6.1 函数依赖

--Video

-6.2 Armstrong公理

--Video

-6.3 无损分解

--Video

-6.4 范式举例

--Video

-6.5 三种范式

--Video

-6.5 三种范式--作业

第七章 实体关系模型

-7.1-E-R模型概述

--E-R模型概述

-7.2 E-R模型详解

--Video

-7.3 E-R模型的拓展

--Video

-7.4 E-R模型实例分析

--Video

第八章 事务处理

-8.1 事务的ACID性质介绍

--ACID介绍

-8.1 事务的ACID性质介绍--作业

-8.2 事务经历

--事务经历

-8.2 事务经历--作业

-8.3 可串行化调度和前趋图

--可串行化调度和前趋图

-8.3 可串行化调度和前趋图--作业

-8.4 两阶段封锁

--两段锁协议

-8.4 两阶段封锁--作业

-8.5 隔离级别

--隔离级别

-8.5 隔离级别--作业

-8.6 事务恢复

--事务恢复

-8.6 事务恢复--作业

第九章 数据库应用与开发

-9.1 数据库使用介绍

--数据库使用介绍

-9.2 Java访问数据库

--Java访问数据库

-9.2 Java访问数据库--作业

第十章 其他数据库技术概述

-10.1 数据库新技术概述

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。