当前课程知识点:数据库概论 > 第七章 实体关系模型 > 7.2 E-R模型详解 > 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
-3.1 SQL概述
-- SQL概述
-3.1 SQL概述--作业
-3.2 数据定义DDL
--数据定义DDL
-3.2 数据定义DDL--作业
-3.3 SQL数据更新DML
-3.3 SQL数据更新DML--作业
-3.4 复杂SQL查询操作1
-第三章 结构化查询语言SQL--3.4 复杂SQL查询操作1
-3.5 复杂SQL查询操作2
-第三章 结构化查询语言SQL--3.5 复杂SQL查询操作2
-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访问数据库
-9.2 Java访问数据库--作业
-10.1 数据库新技术概述
--Video