我想创建一个关系数据库,它代表 职业生涯中可以为不同球队效力的球员。参与一支球队的特征是球员在该球队的一个或多个时期。每个时间段都有开始日期和结束日期。球员在球队期间的得分、出场次数和失球数仅对守门员有效
我认为我没有正确地描述我的职业生涯。 我知道类必须有自己的独立性或者最多依赖于其他类。此外,时间即使与团队无关而仅与参与相关,也应该是正确的,因为参与与团队隐含相关。我该如何改善这个问题?
Career
本身没有问题。确实,职业并不是球员本身,1对1协会做出了这种区分。 独立于 UML,对于数据库级别的实现,虽然表可以合并,但也可能存在将它们分开的充分理由。
但是您可以简化该图,使用与参与(即成员资格)直接的 1 - * 关联:您可以简单地将此关联命名为
▸ career made of
。
这个模型中的问题是
Period
和Time_1
。 它们都是值对象,并且不希望有标识符。 因此,在 UML 中,您应该使它们«DataType»
,同时,多对多关系无助于很好地理解它们应该如何使用。这是一步一步的改进建议:
Period
不只是由start_date
组成,而是由start_date
和end_date
组成。合并两者将进一步简化。▸ career made of
关联的关联类。然后,您可以重命名此关联 career period
,并向关联类 { periods of a player shall not overlap }
添加约束。career period
和 Membership
是否真的是不同的类别。 事实上,会员资格只在特定时期才有意义,绩效指标也不是绝对的,而是指该时期。因此,我建议将 career period
合并到 Membership
,包括建议的约束。Membership
实际上描述了 Player
和 Team
之间的关联。 虽然将 Membership
作为一个独特的类完全可以,但我个人更愿意将其作为 Player
- Team
关联的关联类。备注:虽然
0..N
和 1..N
在 ERD 表示法中很流行,但在 UML 中,我们使用 *
(0..*
的官方快捷方式)和 1..*
。此外,我们更喜欢官方快捷方式 1
而不是 1..1
,因为它更容易阅读。 并且多重性之前不应该有 +
。仅当您为关联端指定名称时,才会使用这种“可见性”装饰。
附加问题:有两个同名的分类器
Role
。这是禁止的。 玩家的角色是否仅仅意味着玩家曾经扮演过哪个角色? 在这种情况下,只需将 Player 与枚举关联起来并使用 1..*
而不是 1..4
。 还是角色与玩家的团队成员有关?