数据库实体关系图 --- The Entity-Relationship Model: ER Model
ER模型的作用
- 数据库设计的第一步是需求分析阶段,也是最重要的一步
- 需求分析阶段的主要工作是概念建模也就是ER建模, 将需求以ER图的方式进行可视化
- ER图可以描述一个数据库的逻辑结构
ER模型的基本组成
- 实体(entity): 最基本的数据成员,An entity is an object that exists and is distinguishable from other objects
- For instance, Michelle Lee with S.S.N.890-12-3456 is an entity
- 一个entity可以是concrete(一个人,一本书等) 也可以是abstract (比如假期或者疾病)
- entity set:一组同一类型的entities组成了entity set
- 比如银行的所有用户组成了一组entity set
- entity set可以有重叠,比如Student 和 Professor这两个entity set可以有重复的entity,因为一个人可以是老师也可以是另外一节课的学生
- 属性(attributes): 一个entity用一组attributes来表示,每一个attribute有一个对应的值,比如一个人可以有name,SSN,gender,phone number等attributes
- relationship sets: the relationship between two entity sets.
- domain: 一个attribute的domain是这个attribute值得有效范围,比如电话号码是一个十一位整数
E-R 图
ER图的基本组成
- 正方形 — 代表entity sets
- 椭圆形 — 表示attributes
- 菱形 — 表示relationship sets
- 线条 — 链接attributes和entity sets,entity sets和relationship sets
不同的键(Key)
超码: superkey
- 能够用来定位关系表中entity的一个或多个属性 Example: {name,S.S.N} 就是super key
候选码: candidate key
主键: primary key
- DB设计者指定的candidate key用来区分不同的entity 用下划线表示
外键 foreign key
- 一个关系表(relation)的一组字段指向另外一个关系表(relation)的一行 (有点类似pointer)
- 通过包含另外一个关系表(relation)的primary key实现
关于实体(Entity)
实体的四种关联关系 (Key Constraints)
- One-to-one: A中的entity最多和一个B中的entity链接, B中的entity最多和一个A中的entity链接
- One-to-many: A中的entity可以和很多个B中的entity链接, B中的entity最多和一个A中的entity链接
- Many-to-one: A中的entity最多和一个B中的entity链接, B中的entity可以和很多个A中的entity链接
- many-to-many: A中的entity可以和很多个B中的entity链接, B中的entity可以和很多个A中的entity链接
- Example: many-to-one constraints
- 一个指导老师可以指导很多学生,但是一个学生只能有一个指导老师
- 我们可以用箭头表示这种关系
- 箭头指向的是one
- Example: one-to-one constraints
- 一夫一妻就是one-to-one constraints
- Example: one-to-many constraints
- 一个母亲有很多孩子
- Example: many-to-many constraints
- 男生有很多女同学,女生也有很多女同学
实体的参与限制(Participation Constraints)
- total participantion:假如现在要创建一个 某市已婚人士 的数据库,则每个entity的participantion must be total, 也就是在这个数据库里每个entity都必须已婚
- partial participation: 假如现在要创建一个 某市婚姻状况 的数据库,则不需要每个entity都有对象
- 我们可以用加粗箭头表示 total participation
- partial participation
弱实体 Weak Entity
-
weak entity set: 如果一个entity set无法找出主键, 则这个entity set是weak entity set
- 比如下图就是weak entity set
- 为了能找出weak entity里的数据,需要把weak entity和strong entity的primary key相连, 被使用的primary key叫做identifying owner, 并且weak entity需要满足两个条件
- weak entity必须是total participantion
- identifying owner和weak entity必须是one-to-many关系
- weak entity的主键:强实体的主键 + 弱实体的部分属性(partial key)
- weak Enitty用两个方框表示
关于属性(Attribute)
多值属性 (Multivalue Attribute)
- 首先构建一个有两列的schema
- 第一列是有拥有这个多值属性的entity的primary key
- 第二列是多值属性, 每一个cell对应一个值
- 多值属性的primary key是所有属性的union
- 用两个圈圈表示多值属性
- Example:
复合属性 (Composite Attribute)
- 一个属性被分为多个属性表示
- 每一个属性对应一列
- composite attribute没有对应的列,是抽象属性
- Example:
衍生属性(Derived Attribute)
- 一个属性从另外一个属性衍生出来,比如age来自生日等
增强实体关系模型 — Enhanced Entity Relationship (EER Model)
什么是增强实体关系
- 在ER模型中引入了 subclasses and superclasses, specializations and generalizations等概念
继承 — 父类和子类
- 子类继承父类的所有属性和关系
- 子类可以有独特的属性
例子: SECRETARY有TypingSpeed属性, MANAGER有
BusinessUnitManaged属性等
-
圆圈和U型代表继承关系
- 一些约束
Specialization
- 自顶而下的将实体分为子类
例子: EMPLOYEE -> SECRETARY, MANAGER, etc.
Generalization
- 自底而上的将实体聚合
例子: CAR (属性: color, price, max speed) 和 TRUCK (属性: color, price, tonnage) 可以构建父类 VEHICLE (属性: color and price).
设计ER需要考虑的因素
实体集 or 属性 (Entity set or Attribute)
- 有时我们需要决定是否将一个property设置为一个atrribute或者设置成一个entity set
- Example:电话号码设计成学生的属性还是设计成单独的entity set
- 第二种设计方法的好处是可以处理一个学生可能有多个电话号码或者一个电话号码被好几个学生使用的情况
- Example 2:如何设计学生和学生地址之间的关系
三元 or 二元 (Binary or Ternary)
三元关系例子:
三元 or 二元 ?
- 通常如果不是确实需要三元关系,最好使用二元关系
- 所有的三元关系以及更高元的关系都可以转变成二元关系
- 三元关系
- 二元关系
Example — 设计PhotoSmart的数据库
Example — 设计Yelp数据库
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)