弱实体的双二元关系与三元关系

问题描述 投票:0回答:1

我有一个问题,指出一组服务器通过一组数据线发送日常数据。每个服务器都有一个id,每条数据线都有一个id。我提出了几个想法,但我不确定哪个更好。根据我的阅读,当可以用二元关系来完成某些事情时,最好避免三元关系。但就我而言,我想出了以下二元关系

(Server)[serverId]--1--------1..* --(DailyData)[date]--1..*----------1--(DataLine)[dataLineId]

DailyData 对服务器来说较弱,因为许多服务器都会在同一天产生报告。最后,我会得到一个以

(serverId)
作为 PK 的服务器表,一个以两者的组合作为 PK 的 DailyData 表
(serverId, date)
,以及一个以三者的组合作为 PK 的 DataLine 表
(serverId, date, dataLineId)
。这(如果我做得正确的话)似乎有效。

我的另一个想法是使用Server、Date和DataLine之间的三元关系,这样看起来更优雅,并且没有弱实体。关系表就是

(serverId, dataLineId, date)
,他们三个作为PK,这与我的另一个解决方案得出相同的结论,但以更优雅和直接的方式。

哪个是更好的解决方案?

database-design uml relationship class-diagram
1个回答
1
投票

您在 UML 中描述的关系类型将是一个 关联类:如果没有

DailyData
Server
Dataline
就没有意义:

关联类同时是二元关联和类。如果没有链接服务器和链接数据线,其实例就不可能存在,而这正是您尝试建模的。

UML 中的

{id}
表示属性是类标识符的一部分。它接近主键的概念,尽管 UML 没有进一步定义其语义。
Date
将是
DailyData
标识符的一部分,因为它可以区分同一服务器和数据行的多个日期。

要在数据库中实现关联类,通常会使用关联表,也称为联接表。既然你谈到“弱”和其他不是 UML 的概念,我想补充一点,在 ERD 中,最接近关联类的是“关联实体”。

顺便说一句,UML 中不存在弱实体这样的东西。最接近的是复合聚合(黑菱形),因为弱实体的生命周期取决于其所有者的生命周期。然而,在 UML 中不允许同一实例成为两个不同复合聚合的组件。因此,在 UML 中,关联类将是解决您的问题的最佳选择。

© www.soinside.com 2019 - 2024. All rights reserved.