E-R模型、E-R分析介绍

1 简介

1.1 ER模型的作用

以建筑房屋的例子,说明建筑师、建筑工人和原材料商的作用,强调数据库规划师、数据库操作人员和数据库管理系统的作用,指出ER模型是种基于关系模型的数据库整体规划方法。

1.2 ER模型的概念

模型来源于数据概念模型,说明ER模型是一种概念模型设计方法。

ER来源于英文单词“实体”和“联系”,说明它主要是利用这两个图例的绘制进行表达和设计。由美籍华人陈平山设计。Codd的范式方法不甚适用于全局性设计,除此以外,还有其他一些概念模型设计方法。

1.3 ER模型的设计方法

从用户需求调研开始,结合学籍信息系统的案例说明。

1)调研用户需求,得到几点基本要求,如“查找和修改学生的基本信息”,“查找和修改学生成绩信息”。

2)识别用户需求中的数据内容,忽略功能性内容,并再次调研以确定数据的含义,如什么是学生基本信息。最终得到如下数据:学号,姓名,性别,生日,身高、课程名、成绩。判断这些数据是否合格,只需判断它们是否可以再次细分(准则1)。这些最后得到的数据被称为属性。

3)将全部信息放入一个关系,虽然功能可行,但是冗余太大,易带来不一致的危险。

4)使用“拆”的方法,将关系按照语义联系细分。

将“学号,姓名,性别,生日,身高”五个属性识别出“学生”语义,并新建关系,学号作为主键。

将“课程名”一个属性识别出“课程”语义,并新建关系,并添加课程号主键,同时体现出信息建设所具有的变革意味。

说明“成绩”属性不能建立成绩实体,因为它不能独立存在(准则2)。反过来说,它与现有关系存在联系。

说明“成绩”属性不能归入上述两个关系中任一关系,因为对于上述实体集合中的每一实体,该项属性取值不惟一(准则3)。

强调“成绩”属性是学生和课程联系的属性,即将两个实体主键拿过来新建关系,并将“成绩”属性放入该关系。

最后得到关系为:

学生(学号,姓名,性别,生日,身高)

课程(课程号、课程名)

选修(学号、课程号,成绩)

2 ER图的绘制

结合学籍信息系统案例简述建模方法,并描述相应的ER图。

说明实体、属性(包括主属性)和联系的画法。

强调ER模型设计的两大内容:一是将需求通过ER表达,另一个是将ER转换为关系模型。ER图是从实践归纳出来的理论方法,可以重新指导实践行为,既可以作为理解和表达用户数据需求的手段,同时也构成如何生成关系模型的依据。

结合电影公司案例说明ER图的绘制。

3 ER图转换为关系模型的方法

从学籍信息系统案例解释ER图和生成关系模型的对应关系,方法为:

1)一个实体直接对应一个关系,实体的所有属性成为关系的属性,实体的主属性成为关系的主属性

2)一个联系直接对应一个关系,此关系首先将联系所关联的所有实体主属性拿来一齐构成自己的主属性,并添加自己的属性。

强调实体和联系对应的关系名称命名问题,如不用汉字,联系关系要表达语义等。

按照上述方法将电影公司案例ER图转换为关系模型(属性自己添加):

Movies(mid,title,year,length,type)

Stars(stid,name,address)

Studios(sdid,name,address)

MovieStar(mid,stid,salary)

MovieStudio(mid,sdid)

说明上述做法中MovieStudio关系可以合并到Movies中,指出原因在于此种联系为1:N。

结合学生和班级的问题再次说明这种合并的用法,并说明1:N的联系如何生成关系模型,方法为:在联系值为多的实体后添加联系值为1的实体的主属性。

说明联系的三种类型,并强调涵盖关系。说明多对多联系之所以新建关系的原因在于将其拆成两个一对多,而一对多联系作为多对多联系的特例,可以按照多对多联系处理,不过合并更为简单。

ER图转换为关系模型的课堂练习之一(属性自己添加):

结果为:

学生(学号,姓名,性别)

课程(课程号,课程名称,教师号)

教师(教师号,教师名)

参考书(书号,书名,课程号)

学生课程(学号,课程号,成绩)

说明一对一联系转换方法为在任一关联实体后添加另一实体的主属性。强调必要时要结合查询要求等功能决定选择。

ER图转换为关系模型的课堂练习之二(属性自己添加):

结果为:

学生(学号,姓名,性别)

课程(课程号,课程名称)

教师(教师号,教师名)

参考书(书号,书名)

课程教师参考书(课程号,教师号,书号)

学生课程(学号,课程号,成绩)

学生管理(学号,班委号)

(注:如学生管理为1:N,则应在学生关系后添加“班委号”即可)

4 ERWin使用简介

介绍ERWin等常用数据库建模工具(还有Visio,PowerDesigner,Rational等)的好处,绘图简单、转换方便。

4.1 安装注册

4.2 ER的绘制,注意联系实体(Associate Entity)的生成

4.3 正向工程的使用,即从逻辑模型转换为物理模型

4.4 逆向工程的使用,即从物理模型转换为逻辑模型

5 ER图的规划方法

将所得到的属性分门归类,利用以前讲述的几条简单准则即可将其并入实体或者联系。

按照的准则主要有两个:

1)属性如果不能具有独立存在的意义,则不能成为一个新建立实体。

2)属性归入一个实体的依据是对实体的每个实例而言具有唯一值。

结合合同案例讲解设计方法,如:

相应的ER图结构可以描述为:

合同(合同号,订货日期,厂商名称,厂商地址)

货物(货物编号,货物分类)

合同货物(合同号,货物编号,订货数量)

除此以外,还有一种方法,将厂商视为实体,相应的ER图结构可以描述为:

合同(合同号,订货日期,厂商号)

货物(货物编号,货物分类)

厂商(厂商号,厂商名称,厂商地址)

合同货物(合同号,货物编号,订货数量)

两种方法的比较:

1)第一种方法存在冗余(相同的厂商具有相同的地址),但是实体少,处理简单,以后利用范式分析方法可以得到标准结构。所以,实体能少则少。

2)第二种方法需要考察厂商实体与合同、货物的关系,发现与合同存在一对多的关系,但与货物存在多对多的关系,明显增加处理的复杂度。事实上,可以考虑去除厂商与货物的关系(可以从剩下的关系中推断出来,但是其他的关系不能省略)。

结合学校信息系统案例讲解设计方法,如:

学院有很多不同的系,每个系下属若干个教研室,每个教研室下属若干个教师,其中的有些教授能够带若干个研究生,但是每个研究生只能有一个导师;每个系下属若干个班级,每个班有很多学生,每个学生选修很多门课程,每门课也可以被多个学生选修。

相应的ER图结构可以描述为:

学院(学院号,学院名)

系(系号,系名,学院号)

教研室(教研室号,教研室名,系号)

教师(教师号,教师名,职称,教研室号)

班级(班级号,班级名,系号)

学生(学号,名称,班级号,学历,导师号)

课程(课程号,课程名)

学生课程(学号,课程号)

除此以外,还有一种方法,将教授和研究生单独视为实体,相应的ER图结构可以描述为:

学院(学院号,学院名)

系(系号,系名,学院号)

教研室(教研室号,教研室名,系号)

教师(教师号,教师名,教研室号)

教授(教授号)

班级(班级号,班级名,系号)

学生(学号,名称,班级号,学历)

研究生(研究生号,导师号)

课程(课程号,课程名)

学生课程(学号,课程号)

两种方法的比较:

1)第一种方法实体较少,但是教师实体的职称、学生实体的学历和导师号存在较多的空值可能,在空值较少的情况下是个较好的选择。

2)第二种方法虽然实体较多,没有上述的空值问题。对于此类子类问题,要注意相应的处理方法,即子类中只留有必须的主键信息,全部信息都可以直接从父类中获取,这样查询更为简单易行。

6 子类问题

在电影公司数据库中表达电影的实体信息中,表达卡通片的主角配音演员信息

这是个子类问题,因为卡通片电影是电影的一种子类。

处理方式一:将子类视为父类的内容来处理

上述做法对应的关系模型为:

Movies(mid,title,isCartoon,sdid,did)

Studios(sdid,name)

Dubbers(did,name)

说明:

1)可以表达查询要求

2)对于非卡通片,did多为空

3)不适用于子类较多的情况,如引入爱情片(affectional film)的结局(finale)查询要求

对应的关系模型为:

Movies(mid,title,isCartoon,sdid,did, isAffectional, finale)

Studios(sdid,name)

Dubbers(did,name)

可以看出大部分电影的did和did信息皆为空

处理方式二:将子类单独表达

相应的关系模型为:

Movies(mid,title,sdid)

Studios(sdid,name)

Dubbers(did,name)

AffectionalFilms(mid,title,sdid,finale)

Cartoons(mid,title,sdid,did)

说明:

1)没有较多的空值问题

2)爱情片、卡通片和一般电影分开存储不便于那些不区分电影类型的常见检索(需要更多的表合并操作)

处理方式三:将子类单独表达,但是父类拥有全部记录信息,子类只有主键信息和自己的特殊信息。这种方式一般是最为有效的。

改进的关系模型为:

Movies(mid,title,sdid)

Studios(sdid,name)

Dubbers(did,name)

AffectionalFilms(mid,finale)

Cartoons(mid,did)

总结:

ER模型的设计一般步骤:

①客户调研,了解需求,收集数据

②根据用户需求来把数据细分到不可再分的基本数据项

③可以先将全部信息(或者称属性、字段)放入一个关系,虽然功能可行,但是冗余太大,易带来不一致的危险。使用“拆”的方法,将关系按照语义联系(实体-关系)细分。根据从客户那得到的原始信息识别出实体,依次将属性放入实体中(原则是只有该属性对于该实体来说是唯一确定的才能将这个属性归到这个实体里,否则看看能不能放到其他实体里)。注意有的属性是联系的属性,这时就要建立实体间的联系,并给联系加个属性。

从E-R模型到关系模型的变换规则:

①每个实体建一张表,实体的属性变为表的一个字段,要设个主属性。

②所有的多对多的联系也要转变为一张表,如果是多对一的联系就不要新建表了,在联系值为多的实体后面添加联系值为1的实体的主键,如果是一对一的联系那就随便在哪个实体后面加上另外一个实体的主键。

参考文献:

1.http://www.njcie.com/bbs/dispbbs.asp?boardid=19&Id=412&page=8

2.http://www.njcie.com/bbs/dispbbs.asp?boardid=19&Id=1163&page=2

3.http://www.njcie.com/bbs/dispbbs.asp?boardid=19&Id=1166&page=2

4.http://www.njcie.com/bbs/dispbbs.asp?boardid=19&Id=1173

视频下载地址(迅雷输入地址即可)

http://www.njcie.com/DB/files/41.wmv

http://www.njcie.com/DB/files/42.wmv

http://www.njcie.com/DB/files/43.wmv

时间: 2024-10-12 09:47:09

E-R模型、E-R分析介绍的相关文章

R语言重要数据集分析研究——需要整理分析阐明理念

1.R语言重要数据集分析研究需要整理分析阐明理念? 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候如何下手分析,数据分析的第一步,探索性数据分析. 统计量,即统计学里面关注的数据集的几个指标,常用的如下:最小值,最大值,四分位数,均值,中位数,众数,方差,标准差,极差,偏度,峰度 先来解释一下各个量得含义,浅显就不说了,这里主要说一下不常见的 众数:出现次数最多的 方差:每个样本值与均值的差得平方和的平均数 标准差:又称均方差,是方差的二次方根,用来衡量一个数据集的集中性 极差:最大值

C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析

C语言文件打开模式浅析 在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式  只可以读   只可以写  读写兼备 文本模式 r w a r+ w+ a+ 二进制模式 rb wb ab  rb+ (r+b)   wb+ (w+b)   ab+ (a+b)  其中,二进制模式与文本模式操作相似,只不过是以二进制流的形式读写而已,下面以文本模式为例分析: 1."r" 模式: 1.1 打开文件进行“只读”操作,即只能从文件读取内容. 1.2 若欲操作的文件不存在,则打开

Android中View自定义XML属性详解以及R.attr与R.styleable的区别

为View添加自定义XML属性 Android中的各种Widget都提供了很多XML属性,我们可以利用这些XML属性在layout文件中为Widget的属性赋值. 如下所示: <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> 我们可以通过TextView所提供

朴素、Select、Poll和Epoll网络编程模型实现和分析——朴素模型

做Linux网络开发,一般绕不开标题中几种网络编程模型.网上已有很多写的不错的分析文章,它们的基本论点是差不多的.但是我觉得他们讲的还不够详细,在一些关键论点上缺乏数据支持.所以我决定好好研究这几个模型.(转载请指明出于breaksoftware的csdn博客) 在研究这些模型前,我决定按如下步骤去做: 实现朴素模型 实现发请求的测试程序 实现Select模型,测试其效率 实现Poll模型,测试其效率 实现Epoll模型,测试其效率 分析各模型性能,分析和对比其源码 针对各模型特点,修改上述程序

数学之美——HMM模型(一)介绍

一直想写点关于数学方面的blog,这对于数据挖掘分析,NLP处理等都有着比较重要的作用,之前在CSDN上想写点HMM方面的文章,一直没写成,最近几天终于抽点时间完成了HMM的文章,加以整理,遂有这个系列文章 首先是对HMM模型的介绍. 传统的马尔可夫模型(Markov Model)主要描述了具有马尔可夫性质的一个随机过程.更特殊的来讲,是离散的马尔可夫过程——马尔可夫链(Markov Chain).马尔可夫性质是指在给定当前和之前已发生事件后,未来发生事件仅依赖当前事件.马尔可夫过程主要具有两个

类加载器深入理解和双亲委托模型的案例分析

类加载器深入理解和双亲委托模型的案例分析 我们知道类必须通过类加载器加载后,我们程序才可以使用.接下来我们就对类加载器进行分析,Java虚拟机的类加载器是如何加载类的.首先我们可以从ClassLoader的源码分析入手. ClassLoader 的源码分析 ClassLoader 的javadoc文档 javadoc文档是最权威的官方讲解,可以对ClassLoader有一个比较全面且正确的一个认知.下面是javadoc内容. A class loader is an object that is

s?q?l?s?e?r?v?e?r?结?果?集?转?为?字?符?串

比如有语句select username from Employee 返回结果是: username 张三 李四 王五 怎么输出一个字符串类似: 张三,李四,王五 答: declare @s varchar(1000) select @s=isnull(@s+',','')+username from Employee select @s as username --> 生成测试数据表:Employee   IF NOT OBJECT_ID('[Employee]') IS NULL     D

Python基础练习r=input(&#39;半径r=:&#39;) 半径r=2 &gt;&gt;&gt;areas=3.14*float(r)*float(r) &gt;&gt;&gt;print(&#39;area:%s&#39;%(area)) area:12.5

1.简单输入输出交互. input('please input your name:') please  input your name:xfy 'xfy' 2.用户输入两个数字,计算并输出两个数字之和:(尝试只用一行代码实现这个功能). n=input('输入第一个数字:') 输入第一个数字:2 m=input('输入第二个数字:') 输入第二个数字:4 print(int(n)+int(m)) 6.0 3.输入半径,计算圆的面积. r=input('r=') r=2 print('圆的面积:

P?H?P? ?5?.?3?连?接?s?q?l? ?s?e?r?v?e?r? ?2?0?0?8? ?R?2

我的机器为: xp sp3 sql server 2008 developer apache 2.2.2 php 5.3  从5.3开始,php就不再提供mssql.dll了,所以要php连接sql server 2008/2012必须要使用微软提供的sql server for php 2.0/3.0了. 有必要提醒一下,php5.4必须要3.0和Microsoft SQL Server 2012 Native Client. php官方帮助 http://php.net/manual/zh/