3

我是 UML 建模的新学生,并且想对情况进行建模。

我有一个系统,管理员在其中创建角色、用户和文档,它们都存在于数据库中,管理员将为每个文档选择可以使用角色操作此文档的用户

  • 在系统中,用户不能拥有特定文档的角色
  • 角色可能存在并且不受任何用户文档关系的影响
  • 对于每个文档,我们都有一个可以将其与特定角色一起使用的用户列表。

问题是我试图仅使用二进制关联对其进行建模,如果不可能的话,解决方案是什么?这里的屏幕你会看到更多的情况在此处输入图像描述

如您所见, user_a 在 doc_1 中具有角色 role_1 ,在 doc_2 中具有另一个角色,而 user_c 在 doc_2 中没有角色;)

4

2 回答 2

1

Lipido 的想法很好,但不幸的是,提议的解决方案有一个明显轻微但重要的缺陷,并且不涵盖您的第三个要求:角色可能存在并且不受任何用户文档关系的影响。建模为关联类,角色只能作为用户和文档对象之间的链接实例存在。在这个解决方案中,一个角色不能被定义为一个独立的实例!此外,它不允许角色重用

在这里,您有两种解决方案可以解决此问题。您应该根据附加条件在其中选择(见注释):

在此处输入图像描述

  • 所有 3 个概念(用户、文档、角色)相互独立存在,可以自由独立地创建和查询
  • “访问”的新概念模拟了用户在特定文档的上下文中具有角色(或多个角色)的事实。有两种方法可以对 Access 进行建模,具体取决于它是否应该有更多自己的属性(参见图表)。访问作为一个独立的类允许重用角色。在这两种解决方案中,Access 恰好有 1 个文档、1 个用户和 1 个或多个角色。
  • 用户可以对他有权访问的每个文档拥有 1 个或多个角色
  • 所有可能的查询都是可能的 - getAllUsers、getAllDocuments、gettAllRoles、getUsersRoles(Document)、getRoles(User, Document) 和类似的。

更新(评论后)

这是一个解释对象运行时结构的对象图(它基于第二个类图,具有关联类而不是 n-ry 关联):

在此处输入图像描述

请参阅评论中的注释。并不是说 Access 实例既是类又是关联实例(链接)。这就是为什么它总是有两个关联类的单个实例,在这种情况下只有一个角色。另一方面,每个用户都可以访问多个文档 (0.. ),并且每个文档可以被 0 个或多个用户 (0.. ) 访问。

于 2014-05-14T07:19:55.887 回答
0

如果用户可以在系统中拥有多个角色,您将需要指定在每个具体的 [User * - * Document] 关联中担任他的哪个角色。如果是这种情况,您将需要:

  1. 正常的 [User * - * Role] 关联,独立于 [User * - * Document] 关系,此外

  2. 在IBM的这个示例中描述关联

关联类示例
(来源:ibm.com

忘记属性,在你的情况下:

  • 航班 -> 文件

  • 飞行常客 -> 用户

  • MileageCredit -> 角色

此图模拟当用户与文档相关时,将有一个角色实例指定 [User * - * Document] 关系中的具体角色。注意:您还需要 [User * - 1 Role] 关联(不在图片中),正如我之前在第 1 点中所说的那样。

如果用户只能拥有一个角色,则不需要 [User * - * Document] 关系中的关联类,因为角色明确派生自 [User * - 1 Role] 关系。

于 2014-05-13T18:27:59.413 回答