概述

entity–relationship model (简称 ER Model) 用于描述特定知识领域中相互关联的事物,基本的 ER 模型由实体类型和他们之间的关系组成

一般我们在 ER 建模的时候,将实体类型简单的叫做实体。但是在技术角度来说,实体是抽象实体类型的实例,因为是具体实例,所以命名的时候,经常使用单数表示。

实体名称通常是大写的,虽然在这方面没有公认的标准,但是这是约定成俗的做法。

ER 模型中,用头尾带有乌鸦脚符号的线条来表示实体之间的关系。

关系

基本数量上的关系 ER 如下所示:

customerintidPK自增idstringname客户姓名delivery_adressintidPK递增idstringadress省市区intcreated_time创建时间orderintidPK订单idintcustomer_idFK订单类型intcreated_time创建时间order_detailintidPK递增idintorder_idFK订单idintproduct_id商品idintproduct_num商品数量intcreated_time创建时间有多个地址有多个地址有订单明细

数量上的关系

这个 ER 模型中,标识的是:

  1. 一个订单 order 有多个 order_deatil
  2. 一个订单 order 有 0 个或者 1 个物流信息,还没发货就没有物流信息

这个乌鸦脚的有两个符号组合表示数量关系:

  1. | 表示有一个
  2. O 表示 0 个
  3. { 表示多个

并且这个两个符号属于或者的关系,相对于关系标签来说(如上面的属于、有),外层的代表是最大是数量,内层的表示最小的数量,例如:

  1. ||,1 个或者 1 个, 就是标识只能一个
  2. o|,表示 0 个或者 1 个

标识和非标识关系(Identifying and Non-Identifying Relationships), 这个关系用于实线和虚线来表示,例如:

  1. 实线表示标识关系,就是两个实体之间有直接的关系,有外键进行关联,例如 order_detail 通过 order_id 和父表 order 的 id 进行关联
  2. 虚线标识非标识关系,就是两个实体之间没有直接关系,独立存在,他们的关系需要通过中间表进行连接。例如 customer 和 delivery_address 没有外键进行直接关联起来,一个客户有多个地址,一个地址可以属于多个客户,他们可以分别独立存在

当然,如果要将非标识关系转为标识关系的话,可以建立一个中间实体,例如:

customerintidPK自增idstringname客户姓名customer_deliver_relationintidPK递增idintcustomer_idFK客户idintdelivery_adress_idFK地址idintcreated_time创建时间delivery_adressintidPK递增idstringadress省市区intcreated_time创建时间有多个地址有多个地址

通过创建一个中间实体 customer_deliver_relation,这样 customer 和 customer_deliver_relation,以及 delivery_adress 和 customer_deliver_relation 之间,都是标识关系了。

父子关系

在 ER 图中,有父子关系,并且在 mermaid 中,中间的 label 是相对于第一实体,也就父亲来说的。在 ER 图中的父子关系,可以通过图形的上下位置来确定,上边的是父亲,下边的是孩子。

最后修改:2023 年 12 月 30 日
如果觉得我的文章对你有用,请随意赞赏