以文本方式查看主题

-  课外天地 李树青  (http://www.njcie.com/bbs/index.asp)
--  数据库系统原理课件  (http://www.njcie.com/bbs/list.asp?boardid=19)
----  [推荐]第四部分课堂讲稿——ER模型之一  (http://www.njcie.com/bbs/dispbbs.asp?boardid=19&id=412)

--  作者:admin
--  发布时间:2008/2/20 15:04:33
--  [推荐]第四部分课堂讲稿——ER模型之一

第四部分 ER模型

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

[此贴子已经被作者于2010-12-11 19:45:36编辑过]

--  作者:zpcandzhj
--  发布时间:2015/4/11 18:31:11
--  实体间的联系是怎么找的?
实体间的联系是怎么找的?有的属性明显是实体间联系的属性,这很容易看出哪几个实体存在什么样的联系,
但是有的联系没有属性,那是怎么看出实体间有没有联系呢,要把分析出来的实体挨个查看一下么,两两比较一下!?