具有职业历史时期的类图

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

我想创建一个关系数据库,它代表 职业生涯中可以为不同球队效力的球员。参与一支球队的特征是球员在该球队的一个或多个时期。每个时间段都有开始日期和结束日期。球员在球队期间的得分、出场次数和失球数仅对守门员有效

我认为我没有正确地描述我的职业生涯。 我知道类必须有自己的独立性或者最多依赖于其他类。此外,时间即使与团队无关而仅与参与相关,也应该是正确的,因为参与与团队隐含相关。我该如何改善这个问题?

enter image description here

uml associations entity-relationship class-diagram historical-db
1个回答
0
投票

Career
本身没有问题。确实,职业并不是球员本身,1对1协会做出了这种区分。 独立于 UML,对于数据库级别的实现,虽然表可以合并,但也可能存在将它们分开的充分理由。

但是您可以简化该图,使用与参与(即成员资格)直接的 1 - * 关联:您可以简单地将此关联命名为

▸ career made of

这个模型中的问题是

Period
Time_1
。 它们都是值对象,并且不希望有标识符。 因此,在 UML 中,您应该使它们
«DataType»
,同时,多对多关系无助于很好地理解它们应该如何使用。这是一步一步的改进建议:

  • 首先,
    Period
    不只是由
    start_date
    组成,而是由
    start_date
    end_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
。 还是角色与玩家的团队成员有关?

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