关于C语言中E-R图的详解

 更新时间:2018年12月14日 10:17:38   作者:Struggler09  
今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

E-R  英文缩写为(Entity Relationship Diagram)也称实体-联系图。

提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

下面就讲详解e-r图,如下:

从上面的的图可以看到一个完整的e-r图有四个部分:

1.矩形框,矩形表示实体型,矩形框内写明实体名;

2.椭圆框,椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;

3.菱形框,菱形表示实体型之间的联系,在菱形框内写明联系名,

4.联系线,实体与属性之间;实体与联系之间;联系与属性之间用直线相连,有单向和双向线两种,同时在线旁标上联系的类型(1:1,1:n或m:n)。

构图要素

构成E-R图的3个基本要素是实体型、属性和联系,其表示方法为:

1.实体

一般认为,客观上可以相互区分的事物就是实体,实体可以是具体的人和物,也可以是抽象的概念与联系。关键在于一个实体能与另一个实体相区别,具有相同属性的实体具有相同的特征和性质。用实体名及其属性名集合来抽象和刻画同类实体。在E-R图中用矩形表示,矩形框内写明实体名;比如学生张三、学生李四都是实体。如果是弱实体的话,在矩形外面再套实线矩形。

2.属性

实体所具有的某一特性,一个实体可由若干个属性来刻画。属性不能脱离实体,属性是相对实体而言的。在E-R图中用椭圆形表示,并用无向边将其与相应的实体连接起来;比如学生的姓名、学号、性别、都是属性。如果是多值属性的话,在椭圆形外面再套实线椭圆。如果是派生属性则用虚线椭圆表示。

3.联系

联系也称关系,信息世界中反映实体内部或实体之间的关联。实体内部的联系通常是指组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。在E-R图中用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 :n或m : n)。比如老师给学生授课存在授课关系,学生选课存在选课关系。如果是弱实体的联系则在菱形外面再套菱形。

设计步骤

一、调查分析

(1)选择局部应用在需求分析阶段,通过对应用环境和要求进行详尽的调查分析,用多层数据流图和数据字典描述了整个系统。

设计分E-R图的第一步,就是要根据系统的具体情况,在多层的数据流图中选择一个适当层次的(经验很重要)数据流图,让这组图中每一部分对应一个局部应用,我们即可以以这一层次的数据流图为出发点,设计分E-R图。一般而言,中层的数据流图能较好地反映系统中各局部应用的子系统组成,因此人们往往以中层数据流图作为设计分E-R图的依据。

(2)逐一设计分E-R图每个局部应用都对应了一组数据流图,局部应用涉及的数据都已经收集在数据字典中了。现就是要将这些数据从数据字典中抽取出来,参照数据流图,<1>标定局部应用中的实体,<2>实体的属性、标识实体的码,<3>确定实体之间的联系及其类型(1:1、1:n、m:n)。

下面是对<1>、<2>和<3>步骤的具体说明:

   <1> 标定局部应用中的实体现实世界中一组具有某些共同特性和行为的对象就可以抽象为一个实体。对象和实体之间是"is member of "的关系。例如在学校环境中,可以把张三、李四、王五等对象抽象为学生实体。对象类型的组成成分可以抽象为实体的属性。组成成分与对象类型之间是"is part of "的关系。例如学号、姓名、专业、年级等可以抽象为学生实体的属性。其中学号为标识学生实体的码。

   <2> 实体的属性、标识实体的码实际上实体与属性是相对而言的,很难有截然划分的界限。同一事物,在一种应用环境中作为"属性",在另一种应用环境中就必须作为"实体"。一般说来,在给定的应用环境中:a、属性不能再具有需要描述的性质。即属性必须是不可分的数据项。b、属性不能与其他实体具有联系。联系只发生在实体之间。

   <3> 确定实体之间的联系及其类型(1:1、1:n、 m:n)。根据需求分析,要考察实体之间是否存在联系,有无多余联系。

二、合并生成

各分E-R图之间的冲突主要有三类:属性冲突、命名冲突和结构冲突。

1.属性冲突。

(1) 属性域冲突,即属性值的类型、取值范围或取值集合不同。例如:属性“零件号”有的定义为字符型,有的为数值型;

(2) 属性取值单位冲突。例如:属性“重量”有的以克为单位,有的以公斤为单位。

2.命名冲突。

(1) 同名异义。不同意义对象相同名称;

(2) 异名同义(一义多名)。同意义对象不相同名称。例如:“项目”和“课题”。

3.结构冲突。

(1) 同一对象在不同应用中具有不同的抽象。例如"课程"在某一局部应用中被当作实体,而在另一局部应用中则被当作属性;

(2) 同一实体在不同局部视图中所包含的属性不完全相同,或者属性的排列次序不完全相同;

(3) 实体之间的联系在不同局部视图中呈现不同的类型。例如实体E1与E2在局部应用A中是多对多联系,而在局部应用B中是一对多联系;又如在局部应用X中E1与E2发生联系,而在局部应用Y中E1、E2、E3三者之间有联系。解决方法是根据应用的语义对实体联系的类型进行综合或调整。

三、修改重构

生成基本E-R图分E-R图经过合并生成的是初步E-R图。之所以称其为初步E-R图,是因为其中可能存在冗余的数据和冗余的实体间联系,即存在可由基本数据导出的数据和可由其他联系导出的联系。冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难,因此得到初步E-R图后,还应当进一步检查E-R图中是否存在冗余,如果存在,应设法予以消除。修改、重构初步E-R图以消除冗余,主要采用分析方法。除此外,还可以用规范化理论来消除冗余。

举例:

某研究所有多名科研人员,每一个科研人员只属于一个研究所,研究所有多个科研项目,每个科研项目有多名科研人员参加,每个科研人员可以参加多个科研项目。科研人员参加项目要统计工作量。“研究所”有属性:编号,名称、地址,“科研人员”有属性:职工号、姓名、性别、年龄,职称。“科研项目”有属性:项目号、项目名、经费。

①  试画出ER图,并注明属性和联系类型。

举例2

某工厂生产若干产品,每种产品由不同的零件组成,有的零件用在不同的产品上。这些零件由不同的原材料制成。不同的零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按类型放在若干仓库中。

产品属性有:编号、名称

零件属性有:编号、名称

材料属性有:编号、名称、材料类型

仓库属性有:编号、名称、地点

①  请用E-R图画出工厂产品、零件、材料、仓库的概念模型,并注明属性和联系类型。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • C指针原理教程之C快速入门

    C指针原理教程之C快速入门

    C语言作为大学编程或者计算机专业的一门必修课,把很多初学编程的小伙伴都难住了,感觉无从下手,今天呢,我们来简单介绍下,如何快速入门C语言
    2019-02-02
  • 详解C++编程中的输入输相关的类和对象

    详解C++编程中的输入输相关的类和对象

    这篇文章主要介绍了详解C++编程中的输入输相关的类和对象,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 详解C++中StringBuilder类的实现及其性能优化

    详解C++中StringBuilder类的实现及其性能优化

    在Java和C#中,StringBuilder可以创造可变字符序列来动态地扩充字符串,那么在C++中我们同样也可以实现一个StringBuilder并且用来提升性能,下面就来详解C++中StringBuilder类的实现及其性能优化
    2016-05-05
  • OpenCV实现图像角点检测

    OpenCV实现图像角点检测

    这篇文章主要为大家详细介绍了OpenCV实现图像角点检测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C++中vector容器的用法

    C++中vector容器的用法

    在c++中,vector是一个十分有用的容器。这篇文章主要介绍了C++ vector容器的用法的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • 基于easyx的C++实现贪吃蛇

    基于easyx的C++实现贪吃蛇

    这篇文章主要为大家详细介绍了基于easyx的C++实现贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 用C++面向对象的方式动态加载so的方法

    用C++面向对象的方式动态加载so的方法

    下面小编就为大家带来一篇用C++面向对象的方式动态加载so的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C++实现随机生成迷宫地牢

    C++实现随机生成迷宫地牢

    这篇文章主要介绍了C++实现随机生成迷宫地牢的相关资料及代码分享,推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03
  • c语言在控制台判定鼠标左键的小例子

    c语言在控制台判定鼠标左键的小例子

    c语言在控制台判定鼠标左键的小例子,需要的朋友可以参考一下
    2013-06-06
  • C语言中结构体(struct)的几种初始化方法

    C语言中结构体(struct)的几种初始化方法

    相信大家都知道struct结构体是C语言中非常重要的复合类型,初始化的方法很多,那么小编下面对这些方法进行总结,便于自己和大家以后查阅,有需要的可以参考借鉴。
    2016-08-08

最新评论