当前课程知识点:数据库概论 > 第七章 实体关系模型 > 7.4 E-R模型实例分析 > Video
在较全面的学习了
E –R模型的基本概念之后
让我们来一起分析一些E-R模型的实例
以加强大家对E-R模型的理解
我们先来看一个简单的机票订票数据库
通过对航空订票业务的分析
抽取出了四个实体
分别是乘客
航班
座位和登机口
为了描述方便
航班主要保存航班号和起飞时间
起飞时间由起飞的日期和具体时间组成
其他属性在案例中暂时省略
乘客主要表示的是机票信息
在例子中主要保存票号信息
座位主要保存座位号信息
登机口主要保存登机口号信息
航班和乘客之间具有travels_on联系
表示航班和机票之间的联系
航班和座位之间具有Has_Seat联系
乘客和座位之间具有Seat_Assign联系
航班和登机口之间具有Marshals联系
下面我们对联系进行详细分析
Seats是依赖于航班的弱实体
也就是说
只有当一趟航班确定时
为该航班编排座位才是有意义的
例如
不同的机型对应的座位排序不一样
当航班取消了
对应的座位也就无意义了
航班和座位之间是1对多联系
座位是多的一方
每张机票需要对应一个座位
因此Passengers和Seats之间
具有Seat_Assign联系
并且一张机票至少对应一个座位
最多对应1个座位
而一趟航班上的一个座位
有可能对应0张机票
最多对应一张机票
所以Passengers和Seats之间是1对1联系
并且在Passengers这边是强制参与
在Seats这边是可选参与
Marshals表示每趟航班要有一个登机口
所以航班和登记口之间
具有Marshals联系
表示一趟航班至少要有一个登机口
至多有一个登机口
而一个登机口可能对应0个航班
也可以对应多个航班
登机口和航班之间是1对多联系
并且航班是多的一方
Travels_On联系表示
一趟航班在乘客还没有订票时
对应的乘客也就是机票信息为0
当乘客订票以后会对应多张票
而一张机票至少对应一趟航班
最多对应一趟航班
说明航班和乘客之间是1对多联系
乘客是多的一方
通过数据需求分析E-R模型建立完成了
但是要怎样将E-R模型转换成关系模型呢
就需要用到我们之前学过的转换规则
首先
四个实体
乘客
航班
座位和登机口
分别映射成一张关系表
每个实体有一个主键
航班实体中的复合属性
用它的单值属性代替
转换成两个列
在本例中没有考虑多值属性
然后我们再来分析实体之间的联系
Has_Seat是一个1对多联系
根据转换规则
在Seats表中
添加Flights表的主键flightno
并定义为外键
一个座位至少对应一趟航班
所以该外键不可为空
并且由于Seats是依赖于Flights的弱实体
seatno和flightno共同组成Seats表的主键
Seat_Assign是一个1对1联系
并且一端是强制参与
一端是可选参与
因此
在强制参与的一端添加外键
也就是在乘客表中添加座位表的主键
(seatno,flightno)
共同生成外键
该外键不可为空
Marshals联系是一个1对多联系
航班是多的一端
并且一趟航班至少有一个登机口
所以
在航班表中添加gateno作为外键
并且外键不能取空值
最后
再来分析Travels_On联系
这是一个1对多联系
乘客是多的一方
并且一张票至少对应一趟航班
因此
在乘客表中添加flightno作为外键
并且该外键不能为空
当我们看到flightno在乘客表中已经存在了
就不需要再添加了
好了
现在我们机票订票数据库中的关系模式
就建立好了
一共四张表
根据联系的分析
添加了一些外键
同学们现在理解E-R模型了吗
还有点疑惑的同学也不要着急
让我们再继续分析一个例子
这是一个图书借阅管理数据库
现有需求主要涉及到图书
读者和出版社三个实体
图书的属性有书号
书名
书号具有唯一性
是主属性
读者的属性有借书证号
姓名
身份证号
住址
电话
借书证号具有唯一性
每个读者只能有一个借书证号
它是主属性
出版社的属性有出版社名称
地址
联系电话
出版社名称具有唯一性
是主属性
接下来
我们分析实体之间的联系
每本图书只能有一个出版社出版发行
且至少有一个出版社信息
所以图书的最小基数是1
最大基数也是1
同时
我们知道一个出版社最多会出版多本图书
最少情况下
可能图书馆还没有该出版社出版的图书
最小基数为0
通过分析
图书和出版社之间是1对多联系
并且图书是多的一端
再来看下一段描述
每个读者可以同时借阅多本图书
也可以在不同时候借阅同一本图书
说明读者和图书之间存在借阅联系
并且一个读者可以在不同时间
多次借阅同一本书
同一本书当然可以被不同的读者借阅
因此读者和图书之间的的借阅联系
是多对多联系
同时
由于系统需要记录图书的借阅日期和归还日期
所以
为借阅联系添加两个附加属性
借阅日期和归还日期
将各个分E-R模型
合并后得到的总E-R模型
图书
出版社和读者三个实体
分别映射成一张关系表
图书表包含书号
书名两个列
其中书号是主键
出版社表包含出版社名称
联系电话
地址三个列
出版社名称是主键
读者表包含借书证号
姓名
身份证号
住址四个列
这里
从属性的基数分析看出
读者的电话可能没有
也可能有多个
因此
读者的电话是一个多值属性
根据转换规则2
单独创建一张新的读者电话表
该表由借书证号
电话两个列组成
并且这两个列的组合是新表的主键
再分析图书和出版社之间是1对多联系
一个出版社出版多本图书
因此
在图书表中添加出版社名称作为外键
并且该外键不能取空值
图书和读者之间的借阅联系
是一个多对多联系
根据转换规则3
创建新的借阅关系表
该表由借书证号
书号
借阅日期
归还日期四个列组成
借阅关系的主键应该是什么呢
是借书证号和书号的组合吗
需求中指出
同一个读者
在不同的时间多次借阅同一本书
这就导致借书证号和书号的组合
在借阅表中会重复出现
对的
就是要再添加借阅日期
借书证号
书号和借阅日期的组合
才是具有唯一性的
当然
在实际应用中
如果这么复杂的主键实在不好用
我们也考虑为借阅表单独再添加一个列
借阅编号
将它作为借阅表的主键
好了
通过前面章节的学习
我们已经知道了
怎样从现实世界中抽取数据需求
构建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