为啥有必要在 ERD 中指明识别或非识别关系?

Posted

技术标签:

【中文标题】为啥有必要在 ERD 中指明识别或非识别关系?【英文标题】:Why is it necessary to indicate identifying or non-identifying relationships in an ERD?为什么有必要在 ERD 中指明识别或非识别关系? 【发布时间】:2016-04-23 03:12:20 【问题描述】:

在 ERD 中,弱/非识别关系是连接两个强实体的关系,并用虚线表示。强/标识关系是将强实体连接到弱实体(弱实体是包含来自其相关实体的外键 [FK] 作为其自己的主键 [PK] 的组成部分)的关系,并被指示用实线。

我的问题是,那又怎样?为什么区分弱/非识别关系与强/识别关系如此重要,以至于 ERD 设计人员应该分别用虚线和实线来区分?为什么这么重要?

对我来说,ERD 中的每个元素和约定都应该添加必要的信息,这些信息要么直接转化为数据库设计(即 DDL SQL 语句),要么至少解释重要但不一定显而易见的信息(以及示例最后一种情况是命名关系——它们不会转换为 SQL,但它们对于理解 ERD 非常有用)。这里是一个示例 ERD 供讨论(修改自 another *** question):

我已经考虑了很多,对我来说,实线与虚线添加的唯一信息已经在以下约定中充分传达:

FK 是否是实体 PK 的一部分(示例 ERD 中的 PK,FK1 或 PK,FK2)。 FK 是必需属性(粗体)还是可选属性(非粗体)。

据我所知,实线与虚线关系线没有添加任何额外的有用信息。这种约定不是添加信息,而是不直观且非常混乱。作为它们引起的混乱的一个例子,*** 上有许多重复的问题,询问哪个是哪个;这里只是几个例子:

How to identify a strong vs weak relationship on ERD? What's the difference between identifying and non-identifying relationships? Still Confused About Identifying vs. Non-Identifying Relationships Identifying vs Non-Identifying Relationships (Again!!!)

任何人都可以向我解释公约添加的哪些附加信息不包含在 FK 可能是或可能不是 PK 的一部分的事实中?我正在认真考虑完全忽略约定(也就是说,我想开始用所有实线绘制我的 ERD),但如果有人能指出我忽略的重要内容,我将不胜感激。

【问题讨论】:

了解弱/强实体/关系对于确定外键约束是否/如何传播删除/更新非常有用。删除往往会级联到弱实体。 @reaanb,我编辑了原始问题以添加示例 ERD,并强调了我的特定约定(我标记了 FK,并指出了必需或可选属性)。那么,通过这些说明,实线/虚线将如何指示 FK 约束的传播超出我指定的约定已经指示的范围? “ERD 中的每个元素和约定都应该...”被误解了。一个好的关系信息建模方法会,但是ER doesn't understand the relational model。它在实体、关系和属性之间进行了不必要且不明智的任意区分。它将实体类型限制为某些基表,而每个子表达式的每个超键都标识某些应用程序实体类型。根据@reaanb,“弱”实体的存在取决于一些因此(相对)“强”实体,与将它们一起插入和删除相关。 您正在使用原始 ER 方法的一种衍生方法,它扭曲了“关系”和“弱”与“强”的使用。 ER“关系”是应用关系/关系(用菱形表示),即它对应于“关系”qua关联并由“关系”qua表表示。它确实不是表示实体id FK(用一条线表示,对应于实体类型在关系中的角色)。阅读与关系建模非常接近的实体角色建模,以及它如何表达各种“ER”方法。 很好的问题 【参考方案1】:

ER 模型图中使用的约定是,除非它们是主键的一部分,否则根本不显示引用(外键)属性。如果需要引用属性,它们应该被关系线的存在所暗示。因此,即使外键属性是主键的一部分,也没有标准或普遍认可的 ER 表示法。需要引用属性以识别实体实例的情况通常在 ER 图中通过使用虚线关系线来调用。这里的动机大概是“主要”关键属性被认为是强制性和重要的,因此它们对其他事物的依赖也很重要。

如果您的图表以其他方式显示外键属性,那么在我看来,识别/非识别关系之间的区别并不重要。无论您使用哪种符号,最终重要的是您的受众正确理解您的图表。

【讨论】:

您说过,“ER 模型图中使用的约定是,除非它们是主键的一部分,否则根本不显示引用(外键)属性。”如果我理解正确,您是说某些 ERD 不提供任何外键指示(例如,通过将它们标记为“FK”),因此在这种情况下,实线/虚线确实传达了关键信息;但如果标记了 FK,则不需要实线/虚线。是这个意思吗? 这就是我的意思,是的。 部分基于您的回答和其他人的 cmets,我编辑了原始问题以添加示例 ERD 并强调了我的特定约定(我标记了 FK,并指出了必需或可选属性)。我不知道这些澄清是否会改变你的答案。

以上是关于为啥有必要在 ERD 中指明识别或非识别关系?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我需要将子表的主键作为父表的外键,而不是相反的 1:1 识别关系?

ERD图中的继承关系

识别关系和非识别关系有啥区别?

识别和非识别关系之间有什么区别?

ERD 关系基数 - 反向放置符号会更好吗?

多关系 ERD 和 SQL 建模