我知道有几种符号可以表示实体之间的基数。
但是有没有一种务实的通用方式来表达 ascii 中的基数?
示例:用户 -- 组。一个用户可以有多个组,一个组可以有多个用户。
我查看了此页面:https://en.wikipedia.org/wiki/Cardinality_(data_modeling)
例如:一对多“订单”←→“订单项”
以下是一些表达基数的图形方式:
https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Cardinalities
表示基数的最常用方法是什么?
这有标准/ rfc吗?
UML方法(统一建模语言)是用来描述基数
<lower bound> .. <upper bound>
,每个都绑定一个非负整数并*
描述潜在的无限。您可以在之前链接的文档中的7.5.4 Notation点上找到它。然而,这通常适用于许多不同的建模图,而不仅仅适用于 ERD。在以关系方式编写表之间的关系时,我发现使用最广泛的符号是
N:M
(orN to M
,N,M
)。描述关系的方式也很重要,因为实际上有 2 个基数/多重性部分需要指定。检查以下示例:订单与行项目。一个订单必须至少有 1 个行项目,并且可能有无限个。一个订单项不能没有订单而存在,并且只属于 1 个订单。这将在具有 Order 和 LineItem 表的关系数据库上实现,其中 LineItem 具有针对 Order 的非空外键。
员工与自己(指挥链关系)。一个特定的员工可能没有老板(最高主管)或只有 1 个。老板可以没有下面的员工,也可以是无限多个。这将在具有一个表 Employee 的关系数据库上实现,该表自身有一个可以为空的外键。
人与自己(父亲和母亲的关系)。每个人都有一位父亲和一位母亲。每个父母可能没有孩子,或者有很多(假设父亲可以有无限数量,而母亲最多可以有 10 个)。在关系数据库上实现这一点的方法是通过同一个表 Person 上的 2 个字段,它们通过可为空的外键(部分强制)与自身链接。
大多数这些关系通常通过仅提及每一边的上限来简化。所以对于
boss to employee
它来说1 to N
,它被解读为“一个老板最多可以有 N 名员工,一个员工最多可以有 1 个老板”。这些表达式在实现时有一些注意事项,具体取决于您使用的每个数据库。
在订单示例中,如果在创建记录时订单必须有一个现有的行项目,并且一个行项目必须有一个现有的订单,那么您如何才能加载它们而不会失败?在关系数据库上,首先加载订单,然后加载订单项,因此有一次订单没有订单项,但这种表示法并未表达应如何实现,而是表达了这些实体在业务层面。
在父母身份的例子中,在某些时候不会有关于父母的信息,否则你会有无限多的父母身份级别。所以顶层的实际实现是
Person to father: 0 to 1
。至于图形示例,我发现鱼尾纹符号使用起来最简单,但是没有通用的标准。
我简单的说:
也有 1:1 的,但是让两个表处于 1:1 的关系通常是糟糕的设计。
可以有带有“0”的变体,但这可能比有益更令人困惑。
我通常使用鱼尾纹表示法。在 ASCII 艺术中,我会使用连字符和大于/小于。例如
一个客户下了很多订单
Customer -< Order
一个用户在多个组中;一个组包含许多用户
User >-< Group
关系名称可以插入连字符或方括号内
Customer --[Places]--< Order
如果精确的基数很重要,可以将其附加到末尾
Child (1) --[Loves]--<(3) Teddies
脱字符 (^)、小写 v 和竖线 (|) 可以旋转图表(如果适用)