我们的应用程序中有以下情况:
- 我们
UserGroup
有 - 这些可以由用户创建
- 用户可以将一些
User
s 映射到给定的UserGroup
(n:m 关系)
现在我们需要一些UserGroup
可以在 Java 代码中访问的特殊 s。所以当这一切都完成后,用户应该会看到他自己创建UserGroup
的 s 和我们硬编码的组的混合(当然不能删除)。
第一个想法是在创建数据库时将这些额外的组放入数据库中,并简单地依赖它们在其中的事实,但我认为这是不好的做法。(因为如果它们被删除或重命名,系统将崩溃)
第二个想法是enum
为那些特殊群体设立一个。这会很好。但是当然你不能扩展一个枚举并在其中放置额外的值。
我认为,它应该是代码中的一些枚举,我们可以在其中放置硬编码组(以便于引用),并且它必须以某种方式连接到数据库,以便用户可以进行User <-> UserGroup
映射(对于他自己创建的组和我们的特殊群体)。
所以我们需要别的东西,但是什么?
编辑:
我们现在选择了一种替代方案作为解决方案,它不会干扰正常的数据库设计:
USER GROUP_USER GROUP ACTION
-------- ---------------- --------- --------------
id | ... groupId | userId id | name groupId | enum
如您所见,我们没有尝试将一些静态组放在组表中,而是现在我们将这些内部操作公开给用户界面,现在用户可以说:“操作 A 属于组 X”。这有几个优点:用户可以选择组的名称,他也可以使用多个组。
所以ACTION
表格基本上@CollectionOfElements
在GROUP
实体内部。
这不是上述问题的确切解决方案,但在我们的案例中,它以一种很好的方式解决了问题,这才是最重要的;)