【问题标题】:Representing an either-or relationship in Crows foot ERD在 Crows foot ERD 中表示非此即彼的关系
【发布时间】:2019-12-02 14:24:17
【问题描述】:

我正在为 ERD 做一个练习题,我想知道对任何一个或关系进行建模的正确方法是什么。

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

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

【问题讨论】:

  • account_id 在 person 实体而不是 student 中不是更有意义吗?您是在问如何绘制独占子类型或如何在数据库中创建它?有多种不同的符号支持独占子类型medium.com/@ericgcc/…
  • 一个帐户可以覆盖多个学生(例如,在学校有几个孩子的家长),因此students 表中的account_id 用于跟踪帐户需要为谁付款。 accounts 中的 account_owner 是实际为帐户付款的人。
  • 这是排他的子类型/继承。你在哪里停留在你所遵循的教科书/参考方法中?此外,这是一个常见问题解答。请不要再要求演示了。请参阅How to Ask、其他help center 链接、点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。 PS 通过编辑而不是 cmets 进行澄清。
  • @nvogel。 account_id 在 person 实体中而不是在 student 中是否更有意义? 不。1)然后该字段可以为 NULL。 2) Account 是 Person 的子节点,而不是相反。

标签: database database-design erd


【解决方案1】:

1 澄清

在 Crows foot ERD 中表示非此即彼的关系

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

  • 这不是 ERD。这比 ERD 可以处理的细节要多得多
  • ERD 没有鱼尾纹,即 IEEE 表示法

最终,您需要一个具有实现所需细节的数据模型(远不止 ERD)。这就是为什么我说你的图表是一个好的开始,它正朝着那个方向发展。但是,我们有一个关系数据建模标准:IDEF1X,自 1993 年以来用于建模关系数据库的标准,自 1984 年起提供,然后才提升为标准。

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

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

2 请求

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

请查看这些答案的概述和详细信息。按照链接了解实现细节和代码:

子类型可以是:

  • 独占(基类型必须是子类型之一),或

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

来自Role,它似乎是独占的。你所谓的Role 是IDEF1X 中的判别器

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

关系数据模型

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

  • 当然,我所有的数据模型都呈现在IDEF1X中。

  • 我的IDEF1X Introduction是初学者的必备读物。

  • ParentId, StudentId, OwnerId 都是PersonId角色名称(关系术语)。这使得 FK 的上下文变得明确。

3 更正

但我不确定这是否符合最佳做法

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

  • 由于个人可以有 0 或 1 个帐户,并且个人 PK(个人独有)是帐户中的 FK,因此它可以是帐户中的 PK。

  • AccountId 不是必需的:它是 100% 冗余的,可以消除一个额外的字段和一个额外的索引。


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多