提问人:daniel 提问时间:11/10/2023 最后编辑:Christophedaniel 更新时间:11/11/2023 访问量:68
弱实体与三元关系的双重二元关系
Double binary relationship with weak entity vs ternary relationship
问:
我有一个问题,指出一组服务器通过一组数据线发送每日数据。每个服务器都有一个 id,每个数据线都有一个 id。我想出了几个主意,但我不确定哪个更好。从我所读到的内容来看,当可以在二元关系方面做一些事情时,避免三元关系总是更可取的。但就我而言,我想出了以下二元关系
(Server)[serverId]--1--------1..* --(DailyData)[date]--1..*----------1--(DataLine)[dataLineId]
其中 DailyData 对 Server 较弱,因为许多服务器将在同一天有报告。最后,我会得到一个 PK 为 Server 表,一个 DailyData 表,两者组合为 PK,以及一个 DataLine 表,三者组合为 PK。这(如果我做对了)似乎有效。(serverId)
(serverId, date)
(serverId, date, dataLineId)
我的另一个想法是在 Server、Date 和 DataLine 之间使用三元关系,它看起来更优雅,没有弱实体。关系表只是由他们三个人作为PK,这与我的另一个解决方案得出了相同的结论,但以一种更优雅和直接的方式。(serverId, dataLineId, date)
哪个是更可取的解决方案?
答:
您在 UML 中描述的那种关系将是一个关联类: 没有 a 和 a 就没有意义:DailyData
Server
Dataline
关联类同时是二进制关联和类。如果没有链接服务器和链接数据线,其实例就无法存在,而这正是您尝试建模的内容。
in UML 指示属性是类标识符的一部分。它接近于主键的概念,尽管 UML 没有进一步定义其语义。这将是标识符的一部分,因为它允许区分同一服务器和数据线的多个日期。{id}
Date
DailyData
若要在数据库中实现关联类,通常使用关联表,也称为联接表。既然你说的是“弱”和其他不是 UML 的概念,我想补充一点,在 ERD 中,最接近关联类的是“关联实体”。
顺便说一句,UML 中没有弱实体这样的东西。最接近的是复合聚合(黑菱形),因为弱实体的生命周期取决于其所有者的生命周期。但是,在 UML 中不允许将同一实例作为两个不同复合聚合的组件。因此,在 UML 中,关联类将是解决您的问题的最佳选择。
评论
上一个:EERD 中的全不相交与 U 型
下一个:多对多关系中约束的优缺点
评论