Database design 为什么有必要在ERD中指出识别或非识别关系?

Database design 为什么有必要在ERD中指出识别或非识别关系?,database-design,foreign-keys,composite-primary-key,erd,Database Design,Foreign Keys,Composite Primary Key,Erd,在ERD中,弱/非识别关系是连接两个强实体的关系,并用虚线表示。强/标识关系是将强实体连接到弱实体的关系(弱实体是包含来自其相关实体的外键[FK]作为其自身主键[PK]的组成部分的关系),并用实线表示 我的问题是,那又怎样?为什么区分弱/非识别关系和强/识别关系如此重要,以至于ERD设计师应该分别用虚线和实线进行区分?为什么它如此重要 对我来说,ERD中的每个元素和约定都应该添加必要的信息,这些信息要么直接转化为数据库设计(即DDL SQL语句),要么至少解释重要但不一定显而易见的信息(最后一个

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

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

对我来说,ERD中的每个元素和约定都应该添加必要的信息,这些信息要么直接转化为数据库设计(即DDL SQL语句),要么至少解释重要但不一定显而易见的信息(最后一个例子是命名关系——它们不会转换为SQL,但它们对于理解ERD非常有用)

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

  • FK是否是实体PK的一部分(样本ERD中的PK、FK1或PK、FK2)
  • FK是否为必需属性(粗体)或可选属性(非粗体)
就我所见,实线与虚线之间的关系线没有添加任何其他有用的信息。这种约定不是添加信息,而是不直观的,而且非常混乱。作为它们导致混乱的一个例子,StackOverflow上有许多重复的问题,询问which is which;这里仅举几个例子莱斯:


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

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


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

理解弱/强实体/关系对于确定g如果/外键约束应该如何传播删除/更新。删除往往会级联到弱实体。@reaanb,我编辑了原始问题以添加示例ERD,并强调了我的特定约定(我标记FKs,并指出了必需或可选属性).那么,通过这些澄清,实线/虚线如何表示FK约束的传播超出了我指定的约定已经指出的范围?“ERD中的每个元素和约定都应该…”是错误的。一个好的关系信息建模方法会,但是。它在实体、关系和属性之间做出不必要的、不明智的任意区分。它将实体类型限制在一些基表中,而每个子表达式的每个超键都标识一些应用程序实体类型。Per@reaanb是一个“弱”实体的存在取决于一些与插入和删除实体相关的(相对“强”实体。您使用的是原始ER方法的一个衍生工具,该方法扭曲了“关系”和“弱”与“强”的用法。ER“关系”是应用程序关系/关系(由菱形表示),即它对应于“关系”qua关联,并由“关系”qua表表示。它不是指实体id FK(用一行表示,对应于实体类型在关系中的角色)。了解实体角色建模,非常接近关系建模,以及“ER”的多样性方法是用它来表示的。非常好的问题您说,“ER模型图中使用的一个约定是,引用(外键)属性根本不显示,除非它们是主键的一部分。”如果我理解正确,您是说一些ERD不提供外键的任何指示(例如,通过将它们标记为“FK”),因此在这种情况下,实线/虚线确实传达了关键信息;但是如果FK被标记,那么实线/虚线就没有必要了。这就是你的意思吗?这就是我的意思,是的。部分基于你的答案和其他人的评论,我编辑了原始问题以添加示例ERD,并强调了我的特定约定(我标记了FKs,并指出了必需或可选属性)。我不知道这些澄清是否会改变您的答案。