MarkDown中写E-R图、甘特图、饼图的方法

2023-11-01

Mermaid(中译为美人鱼,就好比一条美人鱼在流动构成了各种的图),是一种在MarkDown中以特定格式的文字生成各种图示的方法。

接着之前写过的MarkDown中写UML图的方法这篇博客,这篇博客将为大家介绍如何绘制E-R图、甘特图以及饼图。

E-R 图

E-R图也叫做实体-关系图(Entity Relationship Diagram),是一种表示实体类型、属性和关系的方法,用来描述现实世界的概念模型。

E-R图的构成

E-R图由以下3个要素构成:

  • 实体(Entity):数据模型中的数据对象(即数据表),用长方体来表示,每个实体都有自己的实体成员(entity member)或者说实体对象(entity instance),如学生实体里包括张三、李四等。
  • 属性(Attribute):实体所具有的属性,如学生具有姓名、学号、年级等属性,用椭圆形表示,属性分为唯一属性( Unique Attribute)和非唯一属性,唯一属性指的是唯一可用来标识该实体实例或者成员的属性,用下划线表示,一般来说实体至少有一个唯一属性。
  • 关系(Relationship):用于表现实体与实体之间的联系,如学生的实体和成绩表的实体之间有一定的联系,每个学生都有自己的成绩表,这就是一种关系,关系用菱形来表示。

关系的类型

关系有如下3种类型:

  • 1:1:1对1关系。指对于实体集A与实体集B,A中的每一个实体至多与B中一个实体有关系;反之,在实体集B中的每个实体至多与实体集A中一个实体有关系。
  • 1:N:1对多关系。指实体集A与实体集B中至少有N(N>0)个实体有关系;并且实体集B中每一个实体至多与实体集A中一个实体有关系。
  • M:N:多对多关系。多对多关系是指实体集A中的每一个实体与实体集B中至少有M(M>0)个实体有关系,并且实体集B中的每一个实体与实体集A中的至少N(N>0)个实体有关系。

关系的存在性

关系的存在性用最小基数来表示,即一个实体在一个联系中的存在性。存在性在转换成逻辑模式后表现为某个属性是否可以为空值,空值为不明确的值,在数据库管理系统中用 NULL 表示。
一般地,关系有如下几种存在性:

  • 强制存在:连线上划“1”,表示最小的基数为1。如果联系一端的实体的实例对于该联系的其他实体的实例必须存在,则称该实体为强制的。
  • 可选存在:连线上划“0”,表示最小基数为0。如果联系一端的实体的实例对于该联系的其他实体的实例不要求一定存在,则称该实体为可选的。
  • 未知存在:连线上不划“1”或“0”,表示目前不知道是强制还是可选的。

关系的语法

每一个语句的关系都可以拆解为如下的3个部分:

  • 第一个实体相对于第二个实体的基数;
  • 这种关系是否赋予了实体的“孩子”身份;
  • 第二个实体相对于第一个实体的基数。

基数的表示用两个符号来表示,外侧的符号表示最大值,里侧的符号表示最小值。基数的表示如下表所示:

左值 右值 说明
|o o| 0或1
|| || 1
}o o{ 0或更多
}| |{ 1或更多

Mermaid中E-R图的简单例子

样例

在下面这段文字(代码块中)的前面和后面一行各自添加```(键盘左上,与~共用一个键)即可生成如下图的展示结果(注意在使用时需要增加mermaid标识,加在前面那三点的后面)。

erDiagram
	Customer{
        int CustermerID PK
        string name
        string adress
        string tele
    }
    OrderList{
    	int OrderID PK
    	int CustermerID FK
    	int ProductID FK
    	int num
    	datetime Date
    }
    Product{
    	int ProductID PK
    	string name
    	string size
    	float price
    }
    Customer o|--o{ OrderList: Order
    OrderList||--|{ Product : contains
Customer int CustermerID PK string name string adress string tele OrderList int OrderID PK int CustermerID FK int ProductID FK int num datetime Date Product int ProductID PK string name string size float price Order contains

实体与关系的表示

Mermaid中E-R图的语法兼容PlantUML,每个语句都由以下的部分组成:

<实体A> [<关系> <实体B> : <关系上的标签>]

举个例子:

erDiagram
	Student||--|{ Department: study
Student Department study

“系”与“学生”两个实体之间的联系是一对多联系,换句话说“学生”和“系”之间的联系是多对一联系。一个学生必须属于一个系,并且只能属于一个系,不能属于零个系,所以从“学生”实体至“系”实体的基数为“1,1”,从联系的另一方向考虑,一个系可以拥有多个学生,也可以没有任何学生,即零个学生,所以该方向联系的基数就为“0,n”。

属性的表示

对于实体属性的表示,可以在实体名后用{}来包含:

erDiagram
    PERSON {
        string firstName
        string lastName
        int age
    }
PERSON string firstName string lastName int age
特殊约束关系的表示

如果该属性有特殊的约束关系,如PK(主键)、FK(主外键约束)、UK(唯一约束)等,那么在定义好的属性后加一个空格写上即可。如果一个属性同时拥有多个约束,那么使用,分隔。

erDiagram
    Driver{
        int LicenseID PK
        string Name
        string Address
        string Telephone
    }
    Police{
    int PoliceID PK
    string Name
    }
    Vehicle{
    int VehicleID PK
    string Model
    string Producer
    datetime Date
    }
    Citation{
    int CitationID PK
    int LicenseID FK
    int VehicleID FK
    int PoliceID FK
    datetime Date
    string Adress
    string Penalty
    }
    Vehicle ||--o{ Citation:Invove
    Driver ||--o{ Citation:Receive
    Police ||--o{ Citation:Handle
Driver int LicenseID PK string Name string Address string Telephone Police int PoliceID PK string Name Vehicle int VehicleID PK string Model string Producer datetime Date Citation int CitationID PK int LicenseID FK int VehicleID FK int PoliceID FK datetime Date string Adress string Penalty Invove Receive Handle

甘特图

甘特图是柱状图的一种,通常用来表示一个项目(任务)的推进进度以及项目(任务)完成所需的时间。

甘特图把每个项目(任务)记录为一个从左到右的连续条形图。其中,X轴表示时间,Y轴用于记录不同任务以及完成任务的顺序。

Mermaid中甘特图的简单例子

样例

在下面这段文字(代码块中)的前面和后面一行各自添加```(键盘左上,与~共用一个键)即可生成如下图的展示结果(注意在使用时需要增加mermaid标识,加在前面那三点的后面)。

gantt
    title 一个甘特图的例子
    dateFormat  YYYY-MM-DD
    section Section
    任务1 :a1, 2023-03-01, 30d
    任务2 :after a1  , 20d
    section Another
    任务3 : 2023-03-12  , 12d
    任务4 : 24d
Mon 06 Mon 13 Mon 20 Mon 27 Mon 03 Mon 10 Mon 17 任务1 任务2 任务3 任务4 Section Another 一个甘特图的例子

甘特图的标题

甘特图的标题是可选的,可以用来描述图表的总任务名字。
使用关键字title来定义一个甘特图的标题。

子任务的表示

一个甘特图用于表示一个总任务,而总任务可以划分为若干个子任务。
使用关键字section来标识不同的子任务。

时间格式的表示

关键字dateFormat用来定义输入甘特图的时间格式。而这些时间格式的表现方式由关键字axisFormat来决定。

输入的时间格式如下表所示:

输入 示例 说明
YYYY 2023 4位数的年份
YY 23 2位数的年份
Q 1..4 季度
M MM 1..12 月份
MMM MMMM January..Dec 英文表示的月份
D DD 1..31 月份的天数
Do 1st..31st 带序数的月份天数
DDD DDDD 1..365 年份的天数
X 1410715640.579 时间戳
x 1410715640579 毫秒时间戳
H HH 0..23 24小时制时间
h hh 1..12 12小时制时间
a A am pm 午前或午后
m mm 0..59 分钟
s ss 0..59 秒钟

日期格式的输出如下表所示:

格式 含义
%a 工作日简称
%A 工作日全称
%b 月份简称
%B 月份全称
%c 日期和时间,即“%a %b %e %H:%M:%S %Y
%d 十进制数表达的月份的天数[01,31]
%e 十进制数表达的月份的天数[ 1,31],相当于%_d
%H 十进制数表达的24小时制[00,23]
%I 十进制数表达的12小时制[01,12]
%j 十进制数表达的一年中的天[001,366]
%m 十进制数表达的月份[01,12]
%M 十进制数表达的分钟[00,59]
%L 十进制数表达的毫秒[000,999]
%p AM 或 PM
%S 十进制数表达的秒[00,61]
%U 十进制数表达的一年的星期数(周日作为第一天)[00,53]
%w 十进制数表达的工作日[0(周天),6]
%W 十进制数表达的一年的星期数(周一作为第一天)[00,53]
%x 日期,即“%m/%d/%Y
%X 时间,即“%H:%M:%S
%y 不能用十进制数表达世纪的年份[00,99]
%Y 可以用十进制数表达世纪的年份
%Z 时区偏移量,如“-0700”
%% %字符

注:以上的日期格式的输出表在CSDN中的MarkDown不适用(即axisFormat关键字无效),但官网Mermaid语法是支持的。

饼 图

饼图是圆形的统计图,它被分成若干个切片来展示数字的占比。饼图中,每个切片的弧长与它所代表的数量成正比。

Mermaid中饼图的简单例子

样例

在下面这段文字(代码块中)的前面和后面一行各自添加```(键盘左上,与~共用一个键)即可生成如下图的展示结果(注意在使用时需要增加mermaid标识,加在前面那三点的后面)。

pie title 志愿者领养的宠物占比
    "小狗" : 386
    "小猫" : 85
    "仓鼠" : 15
79% 17% 3% 志愿者领养的宠物占比 小狗 小猫 仓鼠

在Mermaid中画饼图非常简单,只需要使用pie关键字作为开始,后面可跟上关键字title定义饼图的标题。

然后,就是将数据以数字或是小数的方式呈现。饼图中,各切片将按照与标签相同的顺序按顺时针的方向排序。

以小数表示占比

上述样例中是以数字作为演示的,接下来的这个例子用小数展示饼图的用法:

78% 21% 1% 0% 0% 空气中各成分含量占比图 氮气 [78.09] 氧气 [20.95] 稀有气体 [0.932] 二氧化碳 [0.034] 水和杂质 [0.002]

其中在关键字pie后使用了showData关键字,这表示在图例中同时也有数据占比的显示。

需要注意的是,如果以百分比来表示数据,那么所有数据加起来需要为1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MarkDown中写E-R图、甘特图、饼图的方法 的相关文章

  • URP自定义后处理(相机滤镜)

    前言 之前做游戏一直想弄个可以实时触发相机滤镜的效果 自处找了教程和资料 想要做到自定义效果的话最好办法是在unity 内部实现 这个办法比较硬核 其实不适合我这样的小白 所以我在实现的过程中非常痛苦 我用的unity URP 模式其实自带

随机推荐

  • OMG!解释执行java字节码文件的命令

    美团一面 收到了HR的信息 通知我去面试 说实话真的挺紧张的 自己准备了近一个月的时间 很担心面试不过 到时候又后悔不该 裸辞 自我介绍 spring的IOC AOP原理 springmvc的工作流程 handlemapping接收的是什么
  • python中的list格式化输出

    在使用python时 我们经常会用到列表 list 由于它可以保存不同类型的数据 因此很多场景下我们都会使用它来保存数据 在写代码的过程中我们经常想要显示list的内容 直接调用print又会显得很丑 还会带着方括号 和逗号 这个太丑 又不
  • Hive数据库连接-连接池实现

    Hive数据库连接 连接池实现 通过HiveJDBC获取Hive的连接Connection 下面我们简单介绍HiveJDBC数据库连接实现 HiveJDBC配置文件 连接池配置文件hive jdbc properties 初始化连接池数 d
  • Linux运维跳槽必备的40道面试精华题

    1 什么是运维 什么是游戏运维 1 运维是指大型组织已经建立好的网络软硬件的维护 就是要保证业务的上线与运作的正常 在他运转的过程中 对他进行维护 他集合了网络 系统 数据库 开发 安全 监控于一身的技术 运维又包括很多种 有DBA运维 网
  • 鼠标点击获得opencv图像坐标和像素值

    目录 一 核心函数 二 在类中定义并且使用 1 将回调函数直接声明为友元函数 2 h 3 DW S OnMou cpp 4 main cpp 三 函数调用 1 OnMouse h 2 OnMouse cpp 一 核心函数 setMouseC
  • 如何在没有 USB 数据线的情况下使用 Android Studio 在手机中安装 Android

    背景 如何在没有 USB 数据线的情况下使用 Android Studio 在手机中安装 Android 应用程序 运行调式一个Android项目 写下必要的代码后 接下来的任务是在模拟器或手机上运行应用程序 测试应用程序是否正常 及deb
  • python numpy中对ndarry按照index(位置下标)增删改查

    在numpy中的ndarry是一个数组 因此index就是位置下标 注意下标是从0开始 增加 在插入时使用np insert 在末尾添加时使用np append 删除 需要使用np delete 修改 直接指定下标 查找 直接指定下标 示例
  • 【Shell】find文件查找

    语法格式 find 路径 选项 操作 选项参数对照表 常用选项 name 查找 etc目录下以conf结尾的文件ind etc nam iname 查找当前目录下文件名为aa的文件 不区分大小写 find iname aa user 查找文
  • [激光原理与应用-69]:激光焊接的10大常见缺陷及解决方法

    激光焊接是一种以高能量密度的激光束作为热源的高效精密焊接方法 如今 激光焊接已广泛应用于各个行业 如 电子零件 汽车制造 航空航天等工业制造领域 但是 在激光焊接的过程中 难免会出现一些缺陷或次品 只有充分了解这些缺陷并学习如何避免它们 才
  • 九轴传感器之测试篇

    关于九轴传感器的数据测试处理
  • CORS与CSRF

    本文首发于我的Github博客 本篇文章介绍了CORS和CSRF的概念 作者前几天在和带佬们聊天的时候把两个概念搞混了 所以才想要了解 简单来说 CORS Cross Origin Resource Sharing 跨域资源分享 是一种机制
  • (1)基础学习——图解pin、pad、port、IO、net 的区别

    本文内容有参考多位博主的博文 综合整理如下 仅做和人学习记录 如有专业性错误还请指正 谢谢 参考1 芯片资料中的pad和pin的区别 imxiangzi的博客 CSDN博客 pin和pad的区别 参考2
  • IntelliJ IDEA 运行卡顿解决方案

    IntelliJ IDEA 运行卡顿解决方案 1 开启IntelliJ IDEA缓慢 想要提升启动速度 则打开D JetBrains IntelliJ IDEA 2020 3 2 bin 依据实际安装路径 目录下对应文件idea64 exe
  • 对csv文件,又get了新的认知

    背景 在数据分析时 有时我们会碰到csv格式文件 需要先进行数据处理 转换成所需要的数据格式 然后才能进行分析 业务侧的同学可能对Excel文件比较熟悉 Excel可以把单个sheet直接保存为csv文件 也可以直接读取csv文件 变成Ex
  • Qt 进程间通信

    Qt进程间通信的方法 TCP IP Local Server Socket 共享内存 D Bus Unix库 QProcess 会话管理 TCP IP 使用套接字的方式 进行通信 之前介绍了 这里就不介绍了 Local Server Soc
  • 用Tensorflow Agents实现强化学习DQN

    在我之前的博客中强化学习笔记 4 深度Q学习 gzroy的博客 CSDN博客 实现了用Tensorflow keras搭建DQN模型 解决小车上山问题 在代码里面 需要自己实现经验回放 采样等过程 比较繁琐 Tensorflow里面有一个a
  • C/C++编程:模板特例

    为什么要引入 单一模板很难兼顾各种情况 为此 C 提供了一种特例机制 对于某个已有模板 可以为某个或者某组模板参数类型另外指定一种变体 以应对原模板无法处理的情况 或者提供更高效的实现方案 这就是模板特例 实例 vector
  • win7 & centos7 双系统安装方法

    1 准备 1 Centos7镜像 官方 https www centos org 阿里镜像64位 http mirrors aliyun com centos 32位 https mirrors aliyun com centos alta
  • 计算机专业考哪些证书含金量高?考到就能加薪吗

    计算机专业要不要考证 考证很重要吗 考哪个好 对于有些人而言 他们可能会有人认为认证就是一张纸 没有太大的用处 看到大家都在考 心里又会产生动摇 还有人会认为考证的价格太高 担心自己没有办法考上白白浪费自己的金钱和时间 或者还有的人在认证的
  • MarkDown中写E-R图、甘特图、饼图的方法

    目录 序 E R 图 E R图的构成 关系的类型 关系的存在性 关系的语法 Mermaid中E R图的简单例子 样例 实体与关系的表示 属性的表示 特殊约束关系的表示 甘特图 Mermaid中甘特图的简单例子 样例 甘特图的标题 子任务的表