当前课程知识点:数据库概论 > 第七章 实体关系模型 > 7.1-E-R模型概述 > E-R模型概述
同学们
大家好
我是云南大学软件学院的教师何婧
在接下来的课程中
将由我为大家介绍数据库设计的相关知识
通过前面课程的学习
相信大家对数据库已经不再陌生
在我们的日常生活中
随处可以看到数据库的身影
当我们去图书馆借书时
我们要用到图书管理数据库
当我们在每一个学期进行选课时
我们要用到选课数据库
那么
这些数据库究竟是怎么设计出来的
需要掌握哪些原理和方法呢
例如
一个简单的学生-课程数据库
最起码应该包括学生信息
课程信息
以及学生选修课程以后得到的成绩信息
将这些信息
全部放在一张数据表合理吗
为了解答这些问题
在本章我将为大家介绍
数据库设计的E-R模型
和规范化方法
在E-R模型部分
我们重点思考以下问题
怎样分析应用中的数据需求
怎样找到数据库的数据项
怎样将数据项映射成为关系表
E-R模型又称为实体-联系模型
是一种用于描述现实世界的概念模型
最早由美籍华裔科学家Peter Chen
于1976年提出
于1976年提出
在前面的课程中
我们学习了基本的数据建模流程
也就是说
为了将现实世界中的具体事物抽象
组织为某一数据库管理系统
支持的数据模型
人们首先要将现实世界抽象为信息世界
然后将信息世界转换为机器世界
也就是先根据现实世界建立概念模型
再基于概念模型建立数据模型
F-R模型就是一种重要的概念模型
在E-R模型中有三个要素
分别是实体
属性
和联系
在这一节中
我们将重点学习E-R模型的基本概念
E-R图的表示方法
以及E-R模型
到关系模型的基本转换规则
实体是现实世界中具有公共属性
又互相可区分的一组对象的集合
例如
学生-课程数据库中的“学生”
是一个实体
“教师”是一个实体
“课程”是一个实体
每个学生是独立不同的个体
但在系统中我们都需要记录他们的学号
姓名
性别
专业等信息
因此
学生的集合构成一个“学生”实体
一个学生则称为是一个“实体实例”
针对“课程”实体
我们发现
同一门课程会在不同的学年重复开设
也就是说
在教学计划不变的情况下
课程的基本属性
如课程名称
课程性质
课程学分不会发生变化
但是在每一学期的开课表中
该课程的具体上课地点
和上课时间会不一样
任课教师也会不一样
并且还存在同一门课程
在同一学期开设了多个班的情况
基于这些需求分析
我们知道学生-课程数据库中
还应该有开设课程实体
叫做Courses_section
Courses实体表示的是课程的基本信息
Course_section实体则表示的是
课程在各个学期的具体开设信息
同时
为了记录课程的上课教室
又发现了一个Class_rooms实体
可见
怎样发现实体
需要深入分析应用需求
找到需求中隐含的各种数据信息
实体有可能对应一类数据对象
也有可能对应一个业务应用。
属性是描述实体特性或联系特性的数据项
在图中
矩形表示的是实体
椭圆表示的是属性
实体和属性之间用实线连接起来
例如
sid和student_name是学生实体的属性
eid
hobbies
emp_address是员工实体的属性
我们也看到
有些属性的标识不一样
用下划线标识出来的是实体的主属性
例如
sid是学生实体的主属性
eid是员工实体的主属性
由一组简单属性共同描述的属性称为
“复合属性”
例如
学生实体中的student_name它由lname
fname和 midinitial三个属性组成
员工实体中的emp_address由stadress
City
State
zipcode四个属性组成
用双线连接的属性称为“多值属性”
它表示一个实体实例在该属性
可能会有多个不同的取值
例如
员工实体中的hobbies属性
一个员工可能有一个爱好
也可能有多个爱好
小结
在E-R图中
采用矩形表示实体
用椭圆表示属性
属性与对应的实体之间用直线连接
复合属性也用椭圆表示
并与实体直接连接
属于该复合属性的单值属性用椭圆表示
与对应的复合属性直接连接
多值属性也用椭圆表示
并用双实线连接到对应实体
到目前为止
我们对E-R模型中的两个要素
实体和属性进行了学习
那么
怎样将概念模型中的实体和属性
转换成关系模型呢
转换规则1
一个实体映射成为一张关系表
实体的单值属性映射成为表的列
复合属性则将它对应的
多个单值属性映射成为多个列
例如
我们在图中看到的学生和员工实体
分别映射成为了两张表
students中的主属性sid映射为表的主键
复合属性student_name则将它对应的
三个单值属性分别映射成为表中的列
最终students表包含sid
lname
fname
midiaitia四个列
同理
员工表由eid,
Staddress
city
state
zipcode五个列组成
这里
我们是否缺少了什么呢
对的
员工表中还有一个属性hobbies不见了
这是一个多值属性
怎样将它转换成为关系模型
是一个值得思考的问题
将它直接映射成为表中的一个列吗
好像有点问题
在关系模型的定义中
我们学过
关系模型的单元具有原子性
也就是任意一行
在一个列上的值只能有一个
而前面的分析中我们知道
一个员工可能有多个爱好
这个取值显然不止一个
因此
将多值属性映射成为表中的一个列
不符合关系模型的定义
那么
将多值属性hobbies映射成为多个列吗
似乎可以
但是我们又发现
一个员工最多有多少个爱好
并没有确定
那究竟应该映射成为多少个hobbie列
也就无法确定了
列太少
会导致有些员工的hobbie信息无法保存
列太多
又导致大量的空间浪费
因此
下面我们会看到转换规则2
转换规则2
给定一个实体E
其主属性为p
实体E中有一个多值属性a
那么多值属性将映射成为一张新表
新表至少包含两个属性p和a
例如
hobbies
由eid和hobby两个列组成
这张新表的主键是eid和hobby的组合
新表中的eid是一个外键
对应员工表中的主键eid
这样
通过eid保留了employees表
和hobbies表之间的关联关系
而hobbies单独建立一张表
一个员工有多少个爱好
就可以对应hobbies表中的多少行
并可以灵活的添加和删除
解决了前面我们分析到的
复合属性只对应一个列
或者对应多个列存在的问题。
好了
现在我们已经学习了
E-R模型中的实体和属性
接下来
让我们再一起来了解一下联系
从定义中我们可以看出
“联系”表示实体之间的关联关系
在E-R图中联系用菱形表示
例如
教师实体和开设课程实体
之间存在讲授的联系
表示教师和开设的课程之间
存在讲授关系
同理
员工和项目之间存在工作关系
员工和员工之间存在管理关系
但是
我们又看到这三个图示之间有一些不同
works_on联系上还有一个属性percent
联系上的属性称为附加属性
表示当员工和项目之间产生工作关系时
要记录员工在项目上的工作时长
这也就意味着
在实际需求中
一个员工可以在不同的项目上工作
并且在不同项目上工作的时间长度不一样
另外
我们还看到teaches和works_on
都表示的是两个实体之间的联系
叫做二元联系
员工和员工的manages联系则是
同一个实体的实体实例之间存在的联系
称为一元联系
或者环
递归联系
表示作为主管的员工对其他员工
有管理关系
普通员工对主管有汇报关系
现在
我们初步了解了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