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

所属分类: 软件编程 / C 语言 阅读数: 81
收藏 0 赞 0 分享

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++中四种对象生存期和作用域以及static的用法总结分析

以下是对C++中四种对象生存期和作用域以及static的用法进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++嵌套类与局部类详细解析

从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的作用域使用该类名时,需要加名字限定
收藏 0 赞 0 分享

C++空类详解

以下是对C++中的空类进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++之友元:友元函数和友元类详解

友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元
收藏 0 赞 0 分享

C++中返回指向函数的指针示例

int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int (*) (int *,int),它是一个指向函数的指针,所指向的函数返回int型并带有两个分别是Int*和int型的形参
收藏 0 赞 0 分享

C数据结构之单链表详细示例分析

以下是对C语言中的单链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C数据结构之双链表详细示例分析

以下是对c语言中的双链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅析如何在c语言中调用Linux脚本

如何在c语言中调用Linux脚本呢?下面小编就为大家详细的介绍一下吧!需要的朋友可以过来参考下
收藏 0 赞 0 分享

深入解析unsigned int 和 int

以下是对unsigned int和int进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅谈C++中的string 类型占几个字节

本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节
收藏 0 赞 0 分享
查看更多