在鱼尾纹 ERD 中表示非此即彼的关系

Representing an either-or relationship in Crows foot ERD

我正在研究 ERD 的练习题,我想知道建模或关系的正确方法是什么。

例如,在跆拳道学校,您将拥有客户帐户,这些帐户将代表一个或多个学生并为其付款。该帐户由家长或学生本人拥有。因此,帐户所有者要么是家长,要么是学生。表达这种关系的最佳方式是什么?

这是我的想法,但我不确定这是否符合最佳实践:

1 条说明

Representing an either-or relationship in Crows foot ERD

你的图表是一个好的开始。注:

  • 那不是 ERD。这是 ERD 无法处理的更多细节
  • ERD 没有鱼尾纹,即 IEEE 表示法

最终,您需要一个数据模型,该模型具有实现所需的详细信息(远远超过 ERD)。这就是为什么我说你的图表是一个好的开始,它正在朝着那个方向发展。但是,我们有一个关系数据建模标准:IDEF1X,该标准自 1993 年起用于关系数据库建模,自 1984 年起可用,之后才升级为标准。

  • 显然,E F Codd 博士的关系模型和关系数据库建模的图解方法都被禁止了。

关系符号,尤其是基数,在 IEEE 符号中比 IDEF1X 更好(更容易理解),因此大多数人使用它。所有数据建模工具(例如 ERwin)都实现了 IDEF1X,并允许对关系使用 IDEF1X 或 IEEE 符号。

2 个请求

预期的图表是非法的。为什么 ?因为你有一个关系 "out" 的人,到两个表。不可能。您在询问如何在数据模型中表示这种关系(在 ERD 中是不可能的)。答案是,一个或门是逻辑项,一个子类型是关系项。

请检查这些答案的概述和细节。点击链接获取实现细节和代码:

  • How can I relate a primary key field to multiple tables?

子类型可以是:

  • Exclusive(基本类型必须是子类型之一),或

  • 非排他性(基类型必须是任何 [多个] 子类型)。

Role 看来它是独家的。你所说的 Role 是 IDEF1X 中的一个 Discriminator.

这是关系数据库的最佳实践。

关系数据模型

这是数据模型的最佳实践(此详细程度仅显示属性名称)。

  • 当然我所有的数据模型都是在IDEF1X.

  • 中渲染的
  • 我的IDEF1X Introduction是初学者必读的

  • ParentId, StudentId, OwnerId 都是 PersonIdRoleNames(关系词)。这使得 FK 的上下文变得明确。

3更正

but I am unsure if this conforms to best practice

既然你担心,还有一个问题。您的模型中存在错误,这是在每个文件上标记 id 时发生的常见错误之一。这种做法削弱了建模练习,并使其容易出现各种错误。 (我知道你被教的是那种残废的方法。)

  • 由于一个人可以有0-1个Account,而Person PK(对Person来说是唯一的)是Account中的FK,所以可以是Account中的PK。

  • AccountId不是必需的:它是100%冗余的,多了一个字段和一个索引,可以去掉。