所以我有这个问题,我已经坚持了一段时间。我必须根据一些业务规则绘制关系,并包括多重性。问题如下:
一部电影要么有一个明星,要么有两个联合主演,要么有10多个人一起看。明星必须至少出现在一部电影中。
到目前为止,我已经得到了这种关系,
电影------------------1..* 明星
电影明星关系的多样性应该是怎样的?我知道它类似于 1..2 或 11..*
我可以将这两个结合起来得到 1..2..11..* 的多重性吗?
帮助将不胜感激。
谢谢!
所以我有这个问题,我已经坚持了一段时间。我必须根据一些业务规则绘制关系,并包括多重性。问题如下:
一部电影要么有一个明星,要么有两个联合主演,要么有10多个人一起看。明星必须至少出现在一部电影中。
到目前为止,我已经得到了这种关系,
电影------------------1..* 明星
电影明星关系的多样性应该是怎样的?我知道它类似于 1..2 或 11..*
我可以将这两个结合起来得到 1..2..11..* 的多重性吗?
帮助将不胜感激。
谢谢!
正式 UML 规范的摘录:
“多重性是对非负整数的包含区间的定义,该区间以下限开始并以(可能是无限的)上限结束。”
因此,您只能将一个连续段作为多重性。
在您的情况下,我会在两端使用 0..* 并分别指定这些特殊限制。您可以或多或少正式地指定它们。一些想法:
这个逻辑可以在像 addStars(Star[]) 这样的 Movie 方法中进一步实现,以便集中它。然而,有很多正确的解决方案。
也许你已经注意到我推荐的是 0..* 而不是 1..*。这只是一个导致更灵活解决方案的建议。1 的下限过于严格,仅应在真正必要时使用(父子可能是一个例子,孩子不能在没有父母的情况下出生)。它在 Star 端的值为 1 意味着在创建电影的过程中必须至少有 1 个 Star 与电影相关联!我觉得很丑。如果系统中还没有创建星星怎么办?
如果电影是作为愿望清单创建的,或者在创建时根本不知道阵容怎么办?如果电影根本没有星星怎么办?:)
通过将两个边界都保留为 0,您可以创建彼此独立的 Movies 和 Start。您以后可以随时链接它们,使您的系统更加灵活和用户友好。