我知道有几个符号可以表达实体之间的基数。
但是在 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 符号中找到这一点。
然而,这通常适用于许多不同的建模图,而不仅仅适用于 ERD。当以关系方式编写表之间的关系时,我发现最广泛使用的符号是N:M(或N to M,N,M)。描述关系的方式也很重要,因为实际上需要指定 2 个基数/重数部分。检查以下示例:
带有行项目的订单。订单必须至少有 1 个订单项,并且可能有无限个。订单项不能没有订单而存在,并且仅属于 1 个订单。这将在具有 Order 和 LineItem 表的关系数据库上实现,其中 LineItem 对于 Order 有一个非空外键。
Order to LineItem: 1 to N
LineItem to Order: 1 to 1
Run Code Online (Sandbox Code Playgroud)员工与其自身(指挥链关系)。某个特定员工可能没有老板(最高领导)或只有 1 个老板。老板不能有下级员工,也可以有无限多个员工。这将在具有一个表 Employee 的关系数据库上实现,该表本身具有一个可以为空的外键。
Boss to Employee: 0 to N
Employee to Boss: 0 to 1
Run Code Online (Sandbox Code Playgroud)人与自身(父亲和母亲的关系)。每个人都有一位父亲和一位母亲。每个父母可能没有孩子,或者有很多孩子(例如,父亲可以有无限多个,而母亲最多可以有 10 个)。在关系数据库上实现这一点的方法是通过同一个表 Person 上的 2 个字段,它们通过可为空的外键(部分强制)与其自身链接。
Person to father: 1 to 1
Father to person: 0 to N
Person to mother: 1 to 1
Mother to person: 0 to 10
Run Code Online (Sandbox Code Playgroud)大多数这些关系通常通过仅提及每一边的上限来简化。因此,boss to employee它可以1 to N理解为“一个老板最多可以有 N 个员工,一个员工最多可以有 1 个老板”。
根据您使用的每个数据库,这些表达式在实现上有一些注意事项。
以订单为例,如果创建记录时一个订单必须有一个现有的行项目,并且一个行项目必须有一个现有的订单,那么如何加载它们而不失败呢?在关系数据库上,首先加载订单,然后加载订单项,因此在某一时刻存在一个没有订单项的订单,但这种表示法并不表达它应该如何实现,而是表达这些实体如何在业务水平。
在父母身份的例子中,在某些时候将不会有关于父母的信息,否则你将拥有无限数量的父母身份级别。所以顶层的实际执行是Person to father: 0 to 1。
至于图形示例,我发现鱼尾纹表示法最简单,但没有通用标准。