数据库设计 – 为什么有必要在ERD中指明识别或非识别关系?

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

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

对我来说,ERD中的每个元素和约定都应该添加直接转换为数据库设计的必要信息(即DDL SQL语句),或者至少解释重要但不一定明显的信息(以及最后一个案例的示例)将命名关系 – 它们不会转换为SQL,但它们对于理解ERD非常有用).以下是为了讨论而进行的ERD示例(从another StackOverflow question修改):

我已经考虑了很多这个问题,对我来说,固体与虚线相加的唯一信息已经在以下约定中得到了充分的传达:

> FK是否是实体PK的一部分(PK,FK1或PK,样本ERD中的FK2).
> FK是否为必需属性(粗体)或可选属性(非粗体).

据我所知,实线与虚线关系线不会增加额外的有用信息.这种约定不是直观的,而是非常混乱,而不是添加信息.作为他们造成混淆的一个例子,StackOverflow上有许多重复的问题,询问哪个是哪个;这里只是几个例子:

> 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图上调出.这里的动机大概是“主要”关键属性被认为是强制性的和重要的,因此它们对其他事物的依赖也很重要.

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

点赞