为什么有必要在 ERD 中指明识别或非识别关系?
Why is it necessary to indicate identifying or non-identifying relationships in an ERD?
在 ERD 中,weak/non-identifying 关系是连接两个强实体的关系,并用虚线表示。 strong/identifying 关系是将强实体连接到弱实体的关系(弱实体是包含来自其相关实体的外键 [FK] 作为其自身主键 [PK] 的组成部分的关系),并且用实线表示。
我的问题是,那又怎样?为什么区分 weak/non-identifying 关系和 strong/identifying 关系如此重要以至于 ERD 设计者应该分别用虚线和实线进行区分? 为什么它如此重要?
对我来说,ERD 中的每个元素和约定都应该添加必要的信息,这些信息要么直接转化为数据库设计(即 DDL SQL 语句),要么至少解释重要但不重要的信息必然显而易见(最后一种情况的例子是命名关系——它们不会转化为 SQL,但它们对于理解 ERD 非常有用)。这是一个用于讨论的示例 ERD(从 another Whosebug question 修改而来):
我考虑了很多,对我来说,实线与虚线所添加的唯一信息已经在以下约定中得到充分传达:
- FK 是否是实体 PK 的一部分(示例 ERD 中的 PK,FK1 或 PK,FK2)。
- 外键是必需属性(粗体)还是可选属性(非粗体)。
据我所知,实线与虚线的关系线没有添加额外的有用信息。这种约定不是添加信息,而是不直观的并且非常混乱。作为它们造成的混乱的一个例子,Whosebug 上有许多重复的问题,询问哪个是哪个;这里只是几个例子:
- 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),但如果有人能指出我忽略的重要内容,我将不胜感激。
ER 模型图中使用的约定是引用(外键)属性根本不显示,除非它们是主键的一部分。如果需要引用属性,则应该通过关系线的存在暗示它们。因此,对于外键属性,即使它们是主键的一部分,也没有标准或普遍认可的 ER 表示法。需要引用属性以识别实体实例的情况通常在 ER 图中使用虚线关系线来标注。这里的动机大概是 "primary" 关键属性被认为是强制性的和重要的,因此它们对其他事物的依赖性也很重要。
如果您的图表以其他方式显示外键属性,那么 identfiying/non-identifying 关系之间的区别在我看来并不重要。无论您使用什么符号,最终重要的是您的听众正确理解您的图表。
在 ERD 中,weak/non-identifying 关系是连接两个强实体的关系,并用虚线表示。 strong/identifying 关系是将强实体连接到弱实体的关系(弱实体是包含来自其相关实体的外键 [FK] 作为其自身主键 [PK] 的组成部分的关系),并且用实线表示。
我的问题是,那又怎样?为什么区分 weak/non-identifying 关系和 strong/identifying 关系如此重要以至于 ERD 设计者应该分别用虚线和实线进行区分? 为什么它如此重要?
对我来说,ERD 中的每个元素和约定都应该添加必要的信息,这些信息要么直接转化为数据库设计(即 DDL SQL 语句),要么至少解释重要但不重要的信息必然显而易见(最后一种情况的例子是命名关系——它们不会转化为 SQL,但它们对于理解 ERD 非常有用)。这是一个用于讨论的示例 ERD(从 another Whosebug question 修改而来):
我考虑了很多,对我来说,实线与虚线所添加的唯一信息已经在以下约定中得到充分传达:
- FK 是否是实体 PK 的一部分(示例 ERD 中的 PK,FK1 或 PK,FK2)。
- 外键是必需属性(粗体)还是可选属性(非粗体)。
据我所知,实线与虚线的关系线没有添加额外的有用信息。这种约定不是添加信息,而是不直观的并且非常混乱。作为它们造成的混乱的一个例子,Whosebug 上有许多重复的问题,询问哪个是哪个;这里只是几个例子:
- 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),但如果有人能指出我忽略的重要内容,我将不胜感激。
ER 模型图中使用的约定是引用(外键)属性根本不显示,除非它们是主键的一部分。如果需要引用属性,则应该通过关系线的存在暗示它们。因此,对于外键属性,即使它们是主键的一部分,也没有标准或普遍认可的 ER 表示法。需要引用属性以识别实体实例的情况通常在 ER 图中使用虚线关系线来标注。这里的动机大概是 "primary" 关键属性被认为是强制性的和重要的,因此它们对其他事物的依赖性也很重要。
如果您的图表以其他方式显示外键属性,那么 identfiying/non-identifying 关系之间的区别在我看来并不重要。无论您使用什么符号,最终重要的是您的听众正确理解您的图表。