ERD 关系基数 - 反向放置符号会更好吗?
Posted
技术标签:
【中文标题】ERD 关系基数 - 反向放置符号会更好吗?【英文标题】:ERD relationship cardinality - Is it better with reverse placement of symbols? 【发布时间】:2021-09-30 14:14:57 【问题描述】:与传统惯例相反,将关系基数绘制到具有关系的表而不是关系所在的表上会更好吗?换句话说,让符号显示跟随关系线的性质,而不是解释关系线已经跟随。
我正在为 SQL 数据库中的某些表制作实体关系图。 ERD 的用例是在数据库中为表创建新条目时。目标是让人们更容易理解条目依赖于哪些其他表,因此也需要条目。
传统的约定是从一个表到相关表绘制线,然后在这些线连接到其他表的地方绘制关系基数符号。因此,如果表 R 中的一个条目必须在表 C 中有一个相关条目,则它可能如下所示:(简化图。)
要查找一个表依赖于哪些其他表,有必要跟踪到相关表的每个连接以确定所需的依赖关系。当数据库有很多表时,这会变得很麻烦。
是否有可能在更容易找到依赖项的地方创建一个 ERD?如顶部问题所述,最合乎逻辑的解决方案似乎是向读者清楚地表明符号放置的传统约定已被颠倒,然后让关系基数符号显示符号后关系的性质。因此,如果表 R 中的条目必须在表 C 中具有恰好一个相关条目,则更具可读性的指示可能如下所示:
忽略大多数人习惯于传统变体这一事实,与我在上面直接建议的反向变体相比,传统变体还有其他好处吗?我曾经问过一位教授我的建议是否更好,因为它可以很容易地确定一个条目是否需要更多的表格,并且通常可以更直观地阅读,但他无法辩解超出人们目前的意见习惯了,传统并不总是值得的。
当图表中有很多表时,除了我上面展示的那些之外,还有其他替代方法更适合我的目标吗?
【问题讨论】:
【参考方案1】:在Wikipedia 上,您会发现一个非常有趣的图表,它比较了用 6 种不同符号表示基数的方式。只有一个像你想要的那样以相反的方式显示基数:它是“ISO(min,max)”符号(另见this SO question)。如果你想使用它,请坚持相应的符号。
不要颠倒使用Everest's crowfoot 表示法。你最终会成为唯一一个了解自己的人,如果你必须经常在你的实践和普通实践之间切换,甚至可能不是每天。所以一个建议:接受当前的符号:它们已经在全球数百万个项目中证明了自己。
如果大多数符号采用目标一侧的基数,并且如果放在反面的唯一符号几乎是死的(尽管有国际标准化的支持),那么必须有解释这种情况的优点和原因。原因之一可能是您经常问自己,这个实体/类与什么相关(促进目标考虑)而不是寻找依赖关系(源视图可能有一些好处)。
编辑:
我查阅了我的软件古生物学书籍,并找到了一个符号,它使用您的逻辑具有类似的原理。
它是MERISE 的一部分,这是一种在 80 年代和 90 年代在法国非常流行的开发方法。它使用了 ERD 表示法的变体,称为 MCD(概念数据模型)。后来被PowerDesigner 工具普及。它使用不带括号的 min max 表示法,但使用一种独特的方式来表示关系:
注意关系符号可以压缩成一个小圆圈,连接线可以标注。 (更多解释,here,但不幸的是只有法语 - 而 UML 似乎已经扼杀了这种符号)。
【讨论】:
我在德文页面底部发现了一条关于 min-max 表示法的说明:The (min,max) notation is considered counter-intuitive to Chen in terms of (max) cardinality, because the (min,max) notation counts relationships. Chen, MC and multiplicities count entities!
de.wikipedia.org/wiki/Min-Max-Notation 我认为数据库 ERD 使用 min-max 会更有意义max 表示法,但普遍的看法似乎是,因为某些东西已经成为标准,所以必须有充分的理由,即使没有人为该约定提供实际的论据。
但是,当使用鱼尾纹时,显示可以连接多个实体更有意义。多符号更好地表示可以有多个实体,而不是表示可以从一个实体拥有多个关系。由于 crow's foot 只需要符号,与更繁琐的 min-max 符号相比,我怀疑这就是它越来越受欢迎的原因。
@Sonlun 感谢这个有趣的来源和论据。我担心这篇 wikipedia 文章在一方面可能来源不佳,并且在比较表现力时是部分来源。关于原因,我会安全地重申我的论点。我可以,因为在我职业生涯的初期,min-max 还在,而且我是支持者,但我很快改变了主意。在这里展开太长了(但主要假设在最后一段)。
我明白了。我添加了一个我发现足以解释要考虑什么的答案,以防它对任何人都有帮助。
@Sonlun 我认为主要原因是在 ER 模型中,人们关注实体,因为它们将在实现中映射到表,而基于表的推理主导 db 设计。关联通常显示为表中的附加列(多对多和关联实体除外)。这解释了为什么实体焦点最终获胜。【参考方案2】:
似乎鱼尾纹符号更适合显示关系的每一侧可能存在的表中可能存在的实体数量。
因此,实际上不建议颠倒符号的位置,尤其是因为这会与大多数人熟悉的标准相冲突。
如果目标是便于查看在向某个表中添加新元素时还需要更新哪些其他表,则可以提出一个论点,即 min-max 表示法可能适合数据库 ERD。最小-最大表示法显示了一个表中的实体可以具有的可能关系的数量,而像鱼尾纹这样的表示法则显示了关系的两端可能有多少实体。 (我建议阅读https://de.wikipedia.org/wiki/Min-Max-Notation的翻译)
但是,鱼尾纹符号的简单性可以说是为了让信息更快地被一目了然地吸收。它还需要更少的空间,因此可能减少 ERD 的混乱。这些好处可能会超过 min-max 表示法的好处。 Crow's foot notation 的最大缺点只是对于非常复杂的 ERD 来说是一个问题,在这种情况下,很难按照关系线来确定另一个表中是否也需要一个实体。
【讨论】:
以上是关于ERD 关系基数 - 反向放置符号会更好吗?的主要内容,如果未能解决你的问题,请参考以下文章