【例1】画出一个简单的工厂管理系统E—R模型。一个工厂中的实体类型有雇员、部门、供应商、原材料、成品和仓库。
在该系统中,与管理这些实体有关的联系有:
(1)一个雇员只能在一个部门工作,一个部门可以有多个雇员。
(2)每一个部门可以生产多种成品,但一种成品只能由一个部门生产。
(3)一个供应商可以供应多种原材料,一种原材料也可以由多个供应商供货。
(4)购买的原材料放在仓库中,成品也放在仓库中。一个仓库可以存放多种产品,一种产品也可以存放在不同的仓库中。
(5)各部门从仓库中提取原料,并将成品放在仓库中。一个仓库可以存放多个部门的产品,一个部门的产品也可以存放在不同的仓库中。
各个实体的属性如表10-1所示。
表10-1 各实体的属性
该例中包含五个实体集,最好分步画出它们的E—R图。首先,画出实体间的初步联系,如图10-11所示。为节省篇幅,实体的属性不再画出。
图10-11 一个工厂的E—R图(初步)
其次,再考虑供应商供应的原材料需要存放在仓库中,以及部门需要从仓库中提货并将成品放入仓库中。此工厂最终的E—R图如图10-12所示。
图10-12 一个工厂的E—R图
【例2】画出出版社和图书的E—R图。
一个出版社可以出版多本图书,一本图书一般由一个出版社出版,出版社和图书之间就是一对多的关系。首先,必须搞清楚出版社实体和图书实体应该有哪些属性。(www.xing528.com)
出版社实体有社名、地址、邮编、网址、联系电话等属性。为了建立出版社与图书实体一对多的联系,还应该有一个出版社代码来唯一标识出版社;图书实体有出版社代码、书名、作者、价格等属性。为了唯一标识图书,还应设置书号属性。出版社与图书实体的E—R图如图10-13所示。
图10-13 出版社与图书实体的E—R图
这里有三个问题需要仔细考虑。第一个问题是:怎么标识书号?
为了管理方便,国际上规定:全世界的每本书都应该有唯一的编号,这个号码叫做ISBN号(读者可以看看本书封底书号,前面一定有ISBN四个字母),俗称书号。ISBN号码又分为几个子域,每个域的代码表示不同的含义。例如,某本书的书号是7—302—06610—8,它有四个子域,域之间用—分隔。第一个子域7代表中国大陆出版的图书;第二个子域302代表清华大学出版社,不同的出版社代码各不相同,如人民邮电出版社的相应代码是115,因此,可以取书号的这部分作为出版社的代码;后面两个子域是出版社的内部分类编号,不同的出版社可以自己规定,各不相同,从而保证了图书书号的全球唯一性。因此,用ISBN书号作为图书的唯一标识似乎是非常合理的。
但是,有些出版社用一个书号出版多本图书,有些书或者资料根本没有书号。虽然这么做并不正规,甚至是违法的,但这种现象毕竟是客观存在的。所以,在设计实际数据库系统的时候,一般不能以ISBN书号唯一标识图书实体,而应该自己定义唯一标识图书实体的属性。
在现实世界中,类似这样的问题有很多,通常需要为实体集定义额外的关键字段。
第二个问题是,有些属性的值如果有多个,该怎么办?
比如,出版社实体应该有电话属性。但一个出版社一般不止一部电话,怎么处理?
一种方法是仍使用一个电话属性,只记下一部或几部甚至全部的电话号码即可,这种方法适合于小单位。第二种方法是将电话属性独立出来,建立一个新的电话实体,其属性包括出版社代码、部门、子部门、电话号码等,通过出版社代码属性,建立和出版社的一对多联系,如图10-14所示。
图10-14 出版社与电话实体的E—R图
一个属性可能具有多个值,比如图书的作者、译者也可能有多个。处理这种问题要具体情况具体分析,可能需要进行进一步抽象,分化出新的实体,建立更加合理的E—R模型。
第三个问题是:一个实体究竟有多少属性?
实体的属性可以说是无穷无尽,到底应提取哪些属性,要结合具体应用系统考虑。比如,图书的一般属性有书号、社代码、书名、作者、价格、版次等,如果开发的是书店管理系统,这些属性一般够用了,但如果要开发印刷厂管理系统,还需要增加图书大小(32开还是16开,或具体数字)、印刷纸张规格(60克纸还是70克纸,书写纸还是双面胶)、是否彩印、彩印规格、印刷数量、交货日期等属性。所以,提取一个实体的属性也要具体问题具体分析。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。