Notes: E/ R Diagram (数据库ER图)

来源:互联网 发布:刘亦菲是否整容知乎 编辑:程序博客网 时间:2024/06/11 18:22

需要E/R图的动机:E/R图是关系型数据库的抽象,以一种抽象的、更高层的描述方式去描述一个数据库各个Entity(实体)之间的关系和每个实体的Attributes(特点)。当你去从另一个数据库的管理员当中接手他的数据库管理工作时,最能节省你熟悉数据库的工具就是E/R图,否则,看代码再慢慢理解schema很费时。


作为后端程序员,必须能够胜任的角色是:1)能开发数据库的接口程序给Naive Users;2)能做好Database Administrator. 


一个典型的数据库设计流程是:




之所以需要画E/R图作为High Level Design理由是我们的建立目标是Relational Database。Relations是最主要的特点。除了E/R图,还可以使用UML(Unified Modeling Language)和ODL(Object Description Language )。


E/R图由三个元素组成;Entity Set(长方形表示)、Attributes(椭圆形表示)还有Relations(菱形表示)。Entity Set的实质是代表一类的需要记录的对象,对象就是Entity。类似于面向对象编程里的Class。但是,在E/R抽象关系中,entity set只有属性(Attributes)而没有对应的方法。默认而言,Entity set的属性都是基本类型,如int/ string等。在E/R关系中,Entity Set和Relations其实是可以转换的,所以,有可能Movie的Entity Set会和Movie的Relation是拥有相同的性质的。


当两个Entity Set的对象之间可能具有(不一定所有的对象都具有这种关系,可能只有一部分的对象有这种关系)某种关系时,两个Entity Set就可以用Relation连起来。只涉及到两个Entity Set的关系,称为 Binary Relation。当然,也有涉及到多个Entity Set的Multiway Relation。同时,也有Entity Set当中的其中一部分元素和另一部分元素由Relation,在E/R图看来,就是自己和自己的Relation(当然,同一个Entity Set在自己和自己的Relation当中会扮演不同的角色,详见下例)。


但无论上述哪种Relation都分为多对多(简单的连线表示)、多对一(从多指向一的箭头)和一对一(双向箭头)。A指向B的多对一的意思是,每个A的元素只能对应一个B的元素,但是每个B的元素可以对应多个A的元素。


例子1:


这是一个扮演不同角色的例子,部分的Movies是某一个Movie的续集。所以,续集可以有多部,但是首部只有一部。所以画成上述图。


例子2:在涉及到多方关系时,箭头的解释


当给定某部影片和影片中的某个明星,必定只有一个工作室与其签约。相反,给定某个明星,某个工作室可以与其同时在不同的电影签约。或者,给定一部电影,工作室可以同时和不同的明星签约。


另外,也有一些特殊情况,譬如,我们可以往关系的菱形中添加Attribute。这种情况仅限于这个性质要由处于关系中的多方(不止一方,否则这个性质可以直接放在某一方)来决定的。一个例子就是合同的金额。




一个明星的Salary根据不同的影片和工作室而不同,所以不能放在明星。而工作室支付的薪水也因不同的影片、不同的明星不同。而电影的薪水而因不同的明星给的不同。所以,薪水这一性质无法单独放在个别的实体集当中。出现这种由多个实体集共同决定的性质,可以把这一性质加到关系的菱形当中。


当然,这种加到关系上的属性,可以转换成另外一种实体集:




最后,再说说E/R图的最后一种情况:当某个实体集的一些个例具有这个实体集其它个例所不具有的性质或者关系时,我们可以为这个实体集引申子集关系来表示。


引申子集的方法是在原父集的基础上,引申出一个用三角形表示的特殊关系。isa,表示某个实体集是另一个实体集的子集。注意,isa的关系是一对一的,虽然我们没有把箭头加上。


例如:




卡通电影和明星之间具有其它电影没有的配音关系,所以单独分了一部分子集出来表示这种关系。


















0 0
原创粉丝点击