MarkDown中写E-R图、甘特图、饼图的方法
迪丽瓦拉
2024-05-29 04:26:11
0

目录

  • E-R 图
    • E-R图的构成
    • 关系的类型
    • 关系的存在性
    • 关系的语法
    • Mermaid中E-R图的简单例子
      • 样例
      • 实体与关系的表示
      • 属性的表示
        • 特殊约束关系的表示
  • 甘特图
    • Mermaid中甘特图的简单例子
      • 样例
      • 甘特图的标题
      • 子任务的表示
      • 时间格式的表示
  • 饼 图
    • Mermaid中饼图的简单例子
      • 样例
      • 以小数表示占比

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个部分:

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

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

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

Mermaid中E-R图的简单例子

样例

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

erDiagramCustomer{int CustermerID PKstring namestring adressstring tele}OrderList{int OrderID PKint CustermerID FKint ProductID FKint numdatetime Date}Product{int ProductID PKstring namestring sizefloat price}Customer o|--o{ OrderList: OrderOrderList||--|{ Product : contains
CustomerintCustermerIDPKstringnamestringadressstringteleOrderListintOrderIDPKintCustermerIDFKintProductIDFKintnumdatetimeDateProductintProductIDPKstringnamestringsizefloatpriceOrdercontains

实体与关系的表示

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

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

举个例子:

erDiagramStudent||--|{ Department: study
StudentDepartmentstudy

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

属性的表示

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

erDiagramPERSON {string firstNamestring lastNameint age}
PERSONstringfirstNamestringlastNameintage

特殊约束关系的表示

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

erDiagramDriver{int LicenseID PKstring Namestring Addressstring Telephone}Police{int PoliceID PKstring Name}Vehicle{int VehicleID PKstring Modelstring Producerdatetime Date}Citation{int CitationID PKint LicenseID FKint VehicleID FKint PoliceID FKdatetime Datestring Adressstring Penalty}Vehicle ||--o{ Citation:InvoveDriver ||--o{ Citation:ReceivePolice ||--o{ Citation:Handle
DriverintLicenseIDPKstringNamestringAddressstringTelephonePoliceintPoliceIDPKstringNameVehicleintVehicleIDPKstringModelstringProducerdatetimeDateCitationintCitationIDPKintLicenseIDFKintVehicleIDFKintPoliceIDFKdatetimeDatestringAdressstringPenaltyInvoveReceiveHandle

甘特图

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

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

Mermaid中甘特图的简单例子

样例

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

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

甘特图的标题

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

子任务的表示

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

时间格式的表示

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

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

输入示例说明
YYYY20234位数的年份
YY232位数的年份
Q1..4季度
M MM1..12月份
MMM MMMMJanuary..Dec英文表示的月份
D DD1..31月份的天数
Do1st..31st带序数的月份天数
DDD DDDD1..365年份的天数
X1410715640.579时间戳
x1410715640579毫秒时间戳
H HH0..2324小时制时间
h hh1..1212小时制时间
a Aam pm午前或午后
m mm0..59分钟
s ss0..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]
%pAM 或 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。

相关内容