Markdown mermaid种草(6)_ ER图

本文介绍了如何使用Markdown和Mermaid库绘制ER图,包括基本语法、乌鸦足符号和属性定义。ER图用于表示实体关系模型,常用于数据库设计和逻辑建模。Mermaid提供了一种简洁的语法来创建包含实体、关系和属性的ER图,支持多种关系基数和身份标识。通过示例,展示了如何在ER图中表示实体及其关系,并讨论了在不同情况下是否包含外键属性的决策。
摘要由CSDN通过智能技术生成

Markdown mermaid种草(6)_ ER图

1. ER图

​ ER图全称为Entity Relationship Diagram. 即实体关系图.

​ 实体关系模型(或ER模型)描述了特定知识领域中相互关联的兴趣事物. 基本的ER模型由实体类型(对感兴趣的东西进行分类)组成,并指定实体之间可能存在的关系(这些实体类型的实例).——《维基百科》

​ 请注意,ER 建模的从业人员几乎总是简单地将实体类型称为实体.例如,客户实体类型将简单地称为客户实体.这对几乎其他任何事情来说都是不可取的,但从技术上讲,实体是实体类型的抽象实例,这就是ER图显示 - 抽象实例,以及它们之间的关系.这就是为什么实体总是使用单个名词命名的原因.

​ 实体名称通常全大写,尽管没有这方面的公认标准,mermaid也不要求这样做.

​ 实体之间的关系以表示基数的末端标记的行表示.mermaid使用最流行的乌鸦脚符号.乌鸦脚符号直观地传达了它连接到实体的许多实例的可能性.

​ ER 图可用于各种目的,从缺乏任何实现详细信息的抽象逻辑模型到关系数据库表的物理模型.在 ER 图上加入属性定义,以帮助理解实体的目的和意义,是很有用的.这些不一定需要详尽无遗:通常一小部分属性就足够了. mermaid允许根据其类型和名称进行定义.

2. ER图绘制

erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
    CUSTOMER }|..|{ DELIVERY-ADDRESS : uses

在这里插入图片描述

​ 以上是一个简单实例,其中的矩形代表实体,中间的连接线表明了实体之间的关系,连接线和实体之间的接头称为“乌鸦足”连接线,表明了实体和实体间的关系.

​ 在 ER 图上包含属性时,必须决定是否将外键作为属性.这可能取决于你试图代表关系表结构的紧密程度.如果你的图表是一个逻辑模型,其含义不是暗示关系实现,那么最好将这些模型排除在外,因为关联关系已经传达了实体关联的方式.例如,JSON 数据结构可以使用阵列实现一对多关系,而无需使用外键属性.类似地,面向对象的编程语言可能使用指向集合的指点或引用.即使对于用于关系实现的模型,你也可以决定,包含外键属性会重复关系已经描绘的信息,并且不会为实体添加意义.

erDiagram
    CUSTOMER ||--o{ ORDER : places
    CUSTOMER {
        string name
        string custNumber
        string sector
    }
    ORDER ||--|{ LINE-ITEM : contains
    ORDER {
        int orderNumber
        string deliveryAddress
    }
    LINE-ITEM {
        string productCode
        int quantity
        float pricePerUnit
    }

在这里插入图片描述

2.1 基本语法

<first-entity> [<relationship> <second-entity> : <relationship-label>]
  • first-entity 是实体的名称.名称必须以字母字符开头,也可能包含数字、连字符和下划线.
  • relationship 描述了两个实体相互关联的方式.请参阅下文.
  • second-entity 是另一个实体的名称.
  • relationship-label 从第一个实体的角度描述关系.
PROPERTY ||--|{ ROOM : contains

​ 此语句可以理解为属性包含一个或多个房间,并且一个房间是一个和唯一一个属性的一部分。你可以从第一个实体的角度看到此处的标签:属性包含一个房间,但一个房间不包含属性。从第二个实体的角度考虑时,等效标签通常很容易推断。(某些 ER 图从两个角度标记关系,但此处不支持此关系,并且通常是多余的)。

​ 只有声明的第一实体部分是强制性的。这使得显示一个没有关系的实体成为可能,这在图表的迭期构造中是有用的。如果指定了语句的任何其他部分,则所有部分都是强制性的。

2.2 乌鸦足语法

​ 每个语句的关系部分可以细分为三个子组件:

  • 第一个实体与第二个实体的Cardinality,
  • 关系是否赋予“孩子”实体身份
  • 关于第一个实体的第二个实体的Cardinality

​ Cardinality是描述另一个实体中有多少元素可以与相关实体相关的属性。在上述示例中,属性可以关联一个或多个 ROOM 实例,而 ROOM 只能与一个属性关联。在每个基数标记中有两个字符。最外层字符表示最大值,最内层字符表示最小值。

​ 乌鸦足表明了实体和实体之间N对N的关系.一共有四种,如下表所示:

左值右值含义
|oo|0 或 1
||||1
}oo{0 或 多(无上限)
}||{1 或 多(无上限)

​ 关系可以分为识别或非识别,这些关系分别以实心线或虚线呈现。当其中一个实体没有另一个实体不能独立存在时,这是相关的。例如,为人们驾驶汽车提供保险的公司可能需要将数据存储在NAMED-DIRVER上。在建模时,我们可能首先注意到,CAR可以由许多PERSON实例驱动,而一个PERSON可以驱动许多CAR - 这两个实体都可以在没有其他实体的情况下存在,因此,我们可以在mermaid中指定为:PERSON {|..|{CAR:"driver"。请注意,关系中间的两个点将导致两个实体之间划出虚线。但是,当这种多对多的关系被解决成两个一对多的关系时,我们观察到,没有一个PERSON和一辆CAR,一个NAMED-DRIVER就不可能存在——这种关系变得识别,并将使用连字符进行指定,这转化为一条坚实的线:

CAR ||--o{ NAMED-DRIVER : allows
PERSON ||--o{ NAMED-DRIVER : is

2.3 属性语法

需要注意的是,经过小白尝试发现,typora不支持添加属性的ER图语法,即属性语法在typora的mermaid版本中暂(2021.2.24)不成立.

​ 属性可以通过指定实体名称,然后指定包含多个类型名称对的块来定义实体,其中一个块由一对花括号定义。例如:

erDiagram
    CAR ||--o{ NAMED-DRIVER : allows
    CAR {
        string registrationNumber
        string make
        string model
    }
    PERSON ||--o{ NAMED-DRIVER : is
    PERSON {
        string firstName
        string lastName
        int age
    }

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值