Java教程

【纯复习用】数据库笔记(2)ER Diagram

本文主要是介绍【纯复习用】数据库笔记(2)ER Diagram,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

Entity-Relationship Model

Entity

ER Diagram

 Different attribute types(属性的不同类型)

Simple attribute

 Composite attribute

 Multi-valued attribute

 Derived attribute (派生属性)

 Key attributes

Key

Composite Key

Relationship (Binary relationship)

Binary Relationship

 Recursive Relationship        

 Constraints

 One-to-many relationship

Many-to-one relationship

One-to-one relationship

Many-to-many Relationship

Participation Constraint

Weak Entity/Strong Entity

Strong Entity

Weak Entity

Class Hierarchy

Non-binary Relationship

Ternary Relationship(三元关系)


Entity-Relationship Model

        ER model 是一种普遍的概念数据模型,其中E代表EntitiesR代表Relation

Entity

        实体(Entity)是现实世界中有别于其他对象的对象,如一间教室,一位老师,老师的地址。

        实体可以用一些属性(attributes)的集合来描述,这些属性的值是用来区分同一个类型的实体与其他实体的。

实体的集合(entity set)就是相同类型实体的集合,所有在这个集合里的实体都有相同的属性,但是属性的值可能会不一样。

ER Diagram

ER model可以用ER diagram图像化的表示出来。

 Different attribute types(属性的不同类型)

Simple attribute

        这种属性只包含一个值。(黄色虚线圈)

 Composite attribute

        这种属性包括多个元素。(黄色虚线圈)

 Multi-valued attribute

        这种属性包含多个。(用双椭圆表示)

 Derived attribute (派生属性)

  • 由其他属性计算得来
  • eg,年龄可以由生日的数据和现存年份得出。(用虚线椭圆表示)

 Key attributes

Key

        属性的集合,一个key可以特别地表示一个实体。

Composite Key

        两个或多个属性用来表示一个key

        eg, 名字和地址各自都不能单独表示某一个雇员,但是它们在一起却可以。


        一个实体可能有不止一个key,由此我们有很多种key。

candidate key(候选key):A minimal set of attributes that uniquely identifies an entity is called a candidate key.  能够表示一个实体的属性们的最小集。这个最小集的含义是,里面的元素可以是多个或一个(如果能有一个那就是这个),如果是多个,那么拆出来的任何一个元素都无法独立地表示一个实体。

这样的候选key有很多个,因此我们需要选出我们地主key(primary key),同时,我们还可以自己创建新的key。

Relationship (Binary relationship)

关系是几个实体之间的联系。

degree: 参与关系集的实体集的数量(多少个种类的实体),两个种类的实体集之间的关系就是binary or degree two。两个实体集以上的关系很少。

Binary Relationship

一个例子

员工在部门工作

“Work_in”是员工和部门之间的关系

它代表一个员工在多个部门工作,反之亦然。

 关系也可以有它对应的属性

 Recursive Relationship        

        关系的实体集不必是不同的

        有时候,一个关系可能会包括在同一个实体集里面的两个实体

        比如在同一个实体集里面的两个员工

 Constraints

        描述储存的数据及其限制的model。

        二元关系的映射可以分为四种情况:

 One-to-many relationship

        一个B里的实体可以和最多一个A里的实体有联系

         如图:

         一个customer可以借多个贷款(loan),而一个loan只能分配给一个customer因此此时loan是是many而customer是one。

        关系borrower的key可以是{customer-id, loan-number},但是我们取这个key里面many的部分,也就是loan-number,它才是candidate key。

Many-to-one relationship

        其实就是one-to-many的反过来,对于关系的candidate key的寻找也和上方类似,找many的部分。

One-to-one relationship

  • A里面的一个实体最多和B里的一个实体有关系
  • B里面的一个实体最多和A里的一个实体有关系

         

         此时关系的key也可以是{customer-id, loan-number},但是candidate key就可以是两者中的任意一个。

Many-to-many Relationship

  • A里面的实体可以与B里面任意数量的实体有关系
  • B里面的实体可以与A里面任意数量的实体有关系(反正就是互搞)
  • 所以这种关系的映射没有什么限制

         此时这种关系key也可以是{customer-id, loan-number},与此同时也是candidate key,也就是这俩同时存在才能表示这种关系。

        我们可以发现在ER-diagram中有个→的符号,这个→的没有箭头的部分对应的是many,有箭头的一端对应的是one,所以在上面的图中因为都是many,所以没有箭头只有短线(投机取巧)。

Participation Constraint

        从one-to-many的例子中可以看出来一个customer可以借一些loans。此时可以很自然的提出,是否每一个loan都至少被一个customer借了呢。如果我们假设都被借了,这样的假设就叫做participation constraint(参与约束)。

        我们可以把参与者(两个实体)分为两个部分:

  • Total:每一个在这个实体集的实体必须至少有一个相关的关系。(此时在ER-diagram图中单线变成双线)
  • Partial: 在这个实体集的实体即可以有也可以没有相关的关系。

        因此上面的假设成立后,loan就变成了total(每个贷款都要被借),customer就变成了partial(customer又不一定非要借)

Weak Entity/Strong Entity

Strong Entity

  • 这种实体可以仅仅由和它有关的独特属性定义。
  • eg, 员工由员工ID的属性,这个属性是它自己独特的并且可以单独定义它。

Weak Entity

  • 这种实体,就算把它所有独特属性加在一起,也没办法定义它。

eg:

  • 假设员工可以给他们的家属购买保险
  • 家属的属性有pname(名字)和age
  • pname这个属性无法定义一个家属(age不是独特的属性)
  • 所以家属是一个弱实体
  • 只有考虑到当家属的属性+员工的primary key(此时员工的set称为Identifying entity set)时,才能定义一个家属
  • 此时,来自家属这部分的属性称为discriminator(辨别者)或者partial key

         如图,identity entity set为employee, discriminator为pname,而dependent的Key为{pname, EmpID}.

        如果一个弱实体集W依赖于一个强实体E,我们可以说E owns W, 在上面的例子中,Employee owns Dependent.

Class Hierarchy

        有时候,我们会很自然的把一个实体集分为好几个实体集

         子集会继承父级的属性,如hourly_emps也会有ID、name、address。

        一个类的层次体系可以用两种角度来看

  • 一个类被特殊化成子类
  • 子类由父类泛化。

在上面的例子中,我们可以指定两种约束

  • Overlap constraints

        决定两个子类是否允许含有相同的实体。比如一个雇员既可以是hourly_emps又可以是contract_emps吗?(显然不能)

  • Covering constraints

        决定子类中的实体是否可以包括父类中的所有实体。比如Employee实体肯定要么是hourly_emps要么是contract_emps,所以子类的实体包括了父类中的所有实体。

Non-binary Relationship

Ternary Relationship(三元关系)

        比如一个员工在某一个位置的部门工作

         总的来说,任意一个非二元关系都可以用二元关系来表示(通过创建一个人工的实体集)

这篇关于【纯复习用】数据库笔记(2)ER Diagram的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!