在UML建模中,我们经常遇到类模型,这些模型声明给定类之间的1 x 1或1 x 1 .. *或1 .. * x 1或1 .. * x 1 .. *关联。
以示例为例:玩家1..11 x 1队。
这不会带来一个实际的问题,即无法确定先发生的是团队还是球员? 在该示例中,团队至少需要一个球员才能存在,而存在的球员则需要团队。 我误解了吗?
尝试实现它,您将无法实例化一个Team,因为您至少需要一个Player,如果尝试实例化Player,该Team将会丢失。
怎么可能建立1 x 1关联?
谢谢您的时间!
答案 0 :(得分:1)
当模型作为1..11关系(Team
-Player
)时,没有“先有先后”。必须有11个Player
,并且可以将它们连接到一个Team
。只有当所有连接都建立好之后,您才具有符合要求的模型。您可以指出,玩家可以通过添加组成来组队。但是通常从编程方面来说,这并不会增加太多语义。无论如何,您都需要具有实例才能创建连接。因此Team
可能会包含11个Player
的数组,并且要正常工作,它们中的任何一个都必须不是Null
。
1..1关系(插头/插座)也是如此。仅当它们连接时,您才具有兼容的模型。从建模角度来看,如果您需要两个类别之一的背包,通常会使用1..1。然后,您将另一个绑定有单独的信息。然后可以将其与仅对内容感兴趣的其他类一起使用,而对载体本身不感兴趣。
答案 1 :(得分:1)
您是正确的。您必须以某种方式满足所有约束。一次创建所有内容或放松约束。例如,一个团队仍然可以作为一个没有任何玩家的团队而存在,但是必须存在一个团队才能让玩家加入。
答案 2 :(得分:0)
您的问题“如何建立1 x 1关联?”指的是 强制性相互反向引用 ,或者在DBMS术语中是 循环外键 确实在数据管理应用程序或其基础数据库(DB)中创建对象/行创建或更新问题。
有两种处理方法:1)在至少一个方向上放宽强制性引用约束,2)允许不必满足约束的中间应用程序/数据库状态。
1)尽管我们知道实际上一个团队中总是有超过零个参与者,但出于实用的原因,我们可能选择不实施此约束,这样我们可以更轻松地创建团队数据对象(或DB行)向其分配玩家对象/行。
2)在我们的应用中,我们可以允许一个中间状态,在该状态下已经创建了一个团队而没有分配任何参与者,并且相应地在基础数据库中,我们可以指示事务管理器仅在以下情况下才检查外键约束:整个交易(首先创建一个空团队,然后创建11个球员,这样每个人都分配给该团队,并且该团队随他们的团队分配给他们)。这可以通过SQL子句DEFERRABLE INITIALLY DEFERRED
来实现,请参阅“深度中的可延迟SQL约束”一文的Cyclic Foreign Keys部分。
答案 3 :(得分:0)
这取决于它是哪种模型。 UML模型可能是现实世界的模型,例如人的手与人的手臂有1:1的关系。这种1:1关联为生物学事实(忽略残疾)建模。
UML模型也可以是应用程序功能的模型。如果应用程序要求每个团队有11个玩家,每个玩家只有一个团队(例如,通过使用“保存”按钮填写表单来一次创建所有团队),则1:11关联将正确地模拟以下功能该应用程序。
UML模型也可能是某种编程语言中的类的技术模型或数据库中的表。在这种情况下,只有当您的编程语言或数据库系统允许在两侧或至少在同一事务中创建实例时,才可以进行1:1关联。
侧面说明:在为团队和球员建模时,您可能会考虑团队和个人之间的关联,多样性为0 .. *,而角色名称为“玩家”在团队一侧。