实体关系图基础语法

实体关系图

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

请注意,ER 建模的实践者几乎总是将实体类型简称为实体。 例如,CUSTOMER 实体类型将简称为 CUSTOMER 实体。 这种情况很常见,不建议做任何其他事情,但从技术上讲,实体是实体类型的抽象实例,这就是 ER 图显示的内容 - 抽象实例以及它们之间的关系。 这就是为什么实体总是使用单数名词来命名。

美人鱼可以绘制 ER 图

代码:

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

 

实体名称通常是大写的,尽管对此没有公认的标准,并且在 JHL 在线编辑 中也没有要求。

实体之间的关系由带有表示基数的结束标记的线表示。 美人鱼使用最流行的鱼尾纹表示法。 鱼尾纹直观地传达了它所连接的实体的许多实例的可能性。

ER 图可用于各种目的,从没有任何实现细节的抽象逻辑模型到关系数据库表的物理模型。 在 ER 图上包含属性定义有助于理解实体的目的和含义。 这些不一定需要详尽无遗; 通常一小部分属性就足够了。 美人鱼允许根据其类型和名称来定义它们。

 代码:

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
    }

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

句法


实体和关系


ER 图的 JHL 在线编辑 语法与 PlantUML 兼容,并带有用于标记关系的扩展。 每个语句由以下部分组成:

 <first-entity> [<relationship> <second-entity> : <relationship-label>]

 Where:

  •  first-entity 是实体的名称。 名称必须以字母字符开头,还可以包含数字、连字符和下划线。
  • 关系描述了两个实体相互关联的方式。 见下文。
  • secondary-entity 是另一个实体的名称。
  • 关系标签从第一个实体的角度描述关系。

 For example:

         PROPERTY ||--|{ ROOM : contains

该声明可以理解为一个房产包含一个或多个房间,而一个房间是一个且唯一一个房产的一部分。 可以看到,这里的标签是从第一个实体的角度来看的:属性包含房间,但房间不包含属性。 当从第二实体的角度考虑时,等效标签通常很容易推断出来。 (一些 ER 图从两个角度标记关系,但这在这里不受支持,并且通常是多余的)。

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

关系语法


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

  • 第一个实体相对于第二个实体的基数,
  • 该关系是否赋予“子”实体身份
  • 第二个实体相对于第一个实体的基数

基数是描述另一个实体有多少元素可以与相关实体相关的属性。 在上面的示例中,一个 PROPERTY 可以有一个或多个与其关联的 ROOM 实例,而一个 ROOM 只能与一个 PROPERTY 关联。 每个基数标记中有两个字符。 最外面的字符代表最大值,最里面的字符代表最小值。 下表总结了可能的基数。

值(左)值(右)意思
|oo|0 或者 1
||||正好一个
}oo{零或更多(无上限)
}||{一个或多个(无上限)

别名

值(左)值(右)Alias for
one or zeroone or zeroZero or one
zero or onezero or oneZero or one
one or moreone or moreOne or more
one or manyone or manyOne or more
many(1)many(1)One or more
1+1+One or more
zero or morezero or moreZero or more
zero or manyzero or manyZero or more
many(0)many(1)Zero or more
0+0+Zero or more
only oneonly oneExactly one
11Exactly one

鉴别


关系可分为识别性关系或非识别性关系,分别用实线或虚线呈现。 当所讨论的实体之一不能离开另一个实体而独立存在时,这一点是相关的。 例如,一家为人们驾驶汽车提供保险的公司可能需要存储有关指定驾驶员的数据。 在建模时,我们可能首先观察到一个 CAR 可以由许多 PERSON 实例驱动,而一个 PERSON 可以驱动许多 CAR - 两个实体都可以独立存在,因此这是我们可以在 JHL 在线编辑 中指定的非识别关系 如:人}|..|{ 汽车:“司机”。 请注意关系中间的两个点,这将导致在两个实体之间绘制虚线。 但是,当这种多对多关系解析为两个一对多关系时,我们观察到如果没有 PERSON 和 CAR,NAMED-DRIVER 就不可能存在 - 这些关系变得可识别,并且将使用连字符指定,这意味着 到实线:

Aliases

ValueAlias for
toidentifying
optionally tonon-identifying

代码:

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

属性


可以通过指定实体名称后跟包含多个类型名称对的块来定义实体的属性,其中块由左 { 和右 } 分隔。 属性在实体框内呈现。 例如:

代码:

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
    }

类型值必须以字母字符开头,并且可以包含数字、连字符、下划线、圆括号和方括号。 名称值遵循与类型类似的格式,但可能以星号开头,作为指示属性是主键的另一个选项。 除此之外,没有任何限制,也没有隐式的有效数据类型集。

属性键和注释


属性还可以定义键或注释。 键可以是 PK、FK 或 UK,分别表示主键、外键或唯一键。 要在单个属性上指定多个键约束,请用逗号分隔它们(例如 PK、FK)。注释由属性末尾的双引号定义。 注释本身不能包含双引号字符。

代码:

erDiagram
    CAR ||--o{ NAMED-DRIVER : allows
    CAR {
        string registrationNumber PK
        string make
        string model
        string[] parts
    }
    PERSON ||--o{ NAMED-DRIVER : is
    PERSON {
        string driversLicense PK "The license #"
        string(99) firstName "Only 99 characters are allowed"
        string lastName
        string phone UK
        int age
    }
    NAMED-DRIVER {
        string carRegistrationNumber PK, FK
        string driverLicence PK, FK
    }
    MANUFACTURER only one to zero or more CAR : makes

 

其他事情

  • 如果您希望关系标签超过一个单词,则必须在短语周围使用双引号
  • 如果您根本不需要关系上的标签,则必须使用空双引号字符串

造型


配置选项


对于简单的颜色定制:

NameUsed as
fill实体或属性的背景颜色
stroke实体或属性的边框颜色、关系的线条颜色

Classes used

以下 CSS 类选择器可用于更丰富的样式:

选择器描述
.er.attributeBoxEven包含偶数行上的属性的框
.er.attributeBoxOdd包含奇数行上的属性的框
.er.entityBox表示实体的框
.er.entityLabel实体的标签
.er.relationshipLabel关系的标签
.er.relationshipLabelBox关系标签周围的框
.er.relationshipLine表示实体之间关系的线
### 实体关系抽取方法 实体关系(Entity-Relationship, ER)模型是一种用于表示信息系统中数据对象及其之间联系的方法。为了有效地进行实体关系抽取,需遵循一系列原则和步骤。 #### 定义实体集 识别并定义系统内的主要实体集合是构建ER的第一步。这些实体通常是业务流程中的核心参与者或事物。例如,在书馆管理系统中,“书籍”、“读者”可视为两个基本实体[^3]。 #### 确定属性 对于每一个已确认的实体,都需要明确其具有的特性即属性。这一步骤至关重要,因为实体间的关联往往依赖于特定属性的存在与否。比如,“书籍”的ISBN号可以作为唯一标识符来区分不同书实例。 #### 建立关系 通过分析各实体间存在的交互模式,确立它们之间的逻辑连接形式——一对一、一对多或多对多的关系类型。这种关联不仅反映了实际操作场景下的互动情况,同时也为后续数据库表结构提供了基础框架[^1]。 --- ### ER绘制教程 创建有效的ER表有助于直观展示复杂的信息架构,并指导具体的数据库实现方案。 #### 工具选择 可以选择专业的软件工具如Erwin来进行ER的设计工作。这类工具有助于简化形化表达过程,支持自动生成对应的关系型数据模型及SQL脚本等功能。 #### 绘制指南 以下是使用通用符号体系制作ER的一些要点: - **矩形框**代表实体; - **椭圆圈**标记属性,其中加粗字体显示的是主键字段; - **菱形形状**用来描绘实体间的关系,内部注明具体名称; - 连接线两端附带箭头指示方向性和基数比例(0..n),以此说明参与度限制条件。 ```mermaid erDiagram CUSTOMER }o..|{ ORDER : places ORDER ||--|| LINE_ITEM : contains PRODUCT |p..|{ LINE_ITEM : appears_in ``` 上述Mermaid语法片段展示了客户下单购买商品这一简单交易行为所涉及的主要成分及其相互作用方式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你们的q哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值