概念数据建模:如何解读递归多对多关系

Conceptual data modelling: How to read a recursive many to many relationship

我理解像下面这样的简单二元关系将从左到右阅读:用户 "may" 有一张或多张图片。此外,如果您从右到左阅读它,将是...一张图像 "must" 属于一个且仅属于一个用户。

但是,当我看到以下内容时,我有点困惑。谁能告诉我您如何看待这种关系?另外,在下图后面的图片中,他们说的是同一件事,只是不同吗?

最后,在这种用户可以成为另一个用户的朋友的递归关系中,将两端都指定为可选多对有意义吗?

我的看法是,如果一个用户可以有零个或多个朋友而不是另一端,那么它应该有一个或多个朋友,因为如果用户 A 是用户 B 的朋友,那么用户 B 不再有选择有零个朋友。这个假设是正确的还是我错了?

任何想法都会有所帮助我刚刚通读了一本关于概念数据建模的书,并且在我继续进行实际表格练习之前真的很想了解这一点。

是的,这两张图显示的是同一件事。

有些人选择在概念图中留下未解决的多对多关系。一些描述这种关系的文字可能会有所帮助(我建议像 "is friends with" 这样的文字)。然后我会把它读成 "a User may be friends with other Users."

第二张图显示了如果您决定解析多对多关系,您将绘制的内容。有些人将其保留到逻辑建模,当您阅读它时您会遇到相同的构造(我建议在学习概念建模后将其作为下一步)。我会将 User 和 Friendship 之间的关系理解为 "a User may have Friendships."

这些关系始终是可选的,因为您是在为大局建模,而不是为一个特定实例建模。在右侧将其显示为非可选表示每个用户 必须 在您的数据库中的友谊 table 的第二列中至少有一个条目d 最终用这个模型制作 - 但事实并非如此。

顺便说一句,我认为您正在阅读这篇文章真的值得称赞(太多人在构建数据库时从未尝试掌握概念或逻辑建模!)。不过,我不担心等到您觉得自己完全理解它后再尝试所学的内容;一旦您将某些想法付诸实践,并根据您已知的真实数据进行实践,其中一些想法可能会更有意义。如果您还没有,请在学习的同时尝试根据您自己的数据绘制概念图。

这里有很多东西要打开。 Jo Douglass 的回答涵盖了很多方面。

我相信您的部分困惑来自于人们使用 ER 图来描述两种截然不同的模型这一事实。第一个是实体关系模型,更为人所知的是 ER 模型。第二个是关系模型。从表面上看,这两个模型看起来几乎相同。但它们具有不同的功能,并且它们是为不同的目的而构建的。

ER 模型可以促进数据库设计者和主题专家之间的交流。主题专家可能对数据有深刻的理解:它看起来像什么、它意味着什么、它为什么重要以及如何使用它。同一主题专家可能对外键、引用完整性或数据规范化等技术主题很少或根本不感兴趣。

对于打算在流行的 SQL 数据库之一(例如 SQL Server、Oracle 或许多其他数据库)中设计和构建数据库的设计人员来说,关系模型是一个很好的初步结果.

你的最后一个图表非常简洁明了,只有标有用户的方框。它突出了关系的多对多性质。它在 ER 模型中完全有效,但关系建模者会告诉您它不合法,并且需要接线盒。

确实如此,但是缺少关系的名称,即友谊。如果您可能有两个在其他方面相同的关系,则命名关系很有用。它还为您提供了一个名称来挂载属性。在某些情况下,您可能对特定友谊的开始日期感兴趣。

关系是强制性的还是可选的可能取决于您是在分析主题还是在设计解决方案。如果它是其中的第一个,您可以查看主题以了解它是否是强制性的。这里的技术专家无法为您解答问题,因为我们不了解您的主题,即使我们认为我们了解。

如果您正在设计解决方案,您可能希望从不同的角度来看待它。您是否过度约束了数据?你约束不足吗?

我希望这能解决您正在努力解决的一些问题。数据库设计并不复杂。但是很抽象。