概述
entity–relationship model (简称 ER Model) 用于描述特定知识领域中相互关联的事物,基本的 ER 模型由实体类型和他们之间的关系组成
一般我们在 ER 建模的时候,将实体类型简单的叫做实体。但是在技术角度来说,实体是抽象实体类型的实例,因为是具体实例,所以命名的时候,经常使用单数表示。
实体名称通常是大写的,虽然在这方面没有公认的标准,但是这是约定成俗的做法。
ER 模型中,用头尾带有乌鸦脚符号的线条来表示实体之间的关系。
关系
基本数量上的关系 ER 如下所示:
数量上的关系
这个 ER 模型中,标识的是:
- 一个订单 order 有多个 order_deatil
- 一个订单 order 有 0 个或者 1 个物流信息,还没发货就没有物流信息
这个乌鸦脚的有两个符号组合表示数量关系:
|
表示有一个O
表示 0 个{
表示多个
并且这个两个符号属于或者的关系,相对于关系标签来说(如上面的属于、有),外层的代表是最大是数量,内层的表示最小的数量,例如:
||
,1 个或者 1 个, 就是标识只能一个o|
,表示 0 个或者 1 个
标识和非标识关系(Identifying and Non-Identifying Relationships), 这个关系用于实线和虚线来表示,例如:
- 实线表示标识关系,就是两个实体之间有直接的关系,有外键进行关联,例如 order_detail 通过 order_id 和父表 order 的 id 进行关联
- 虚线标识非标识关系,就是两个实体之间没有直接关系,独立存在,他们的关系需要通过中间表进行连接。例如 customer 和 delivery_address 没有外键进行直接关联起来,一个客户有多个地址,一个地址可以属于多个客户,他们可以分别独立存在
当然,如果要将非标识关系转为标识关系的话,可以建立一个中间实体,例如:
通过创建一个中间实体 customer_deliver_relation,这样 customer 和 customer_deliver_relation,以及 delivery_adress 和 customer_deliver_relation 之间,都是标识关系了。
父子关系
在 ER 图中,有父子关系,并且在 mermaid 中,中间的 label 是相对于第一实体,也就父亲来说的。在 ER 图中的父子关系,可以通过图形的上下位置来确定,上边的是父亲,下边的是孩子。