0

我们的应用程序中有以下情况:

  • 我们UserGroup
  • 这些可以由用户创建
  • 用户可以将一些Users 映射到给定的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表格基本上@CollectionOfElementsGROUP实体内部。

这不是上述问题的确切解决方案,但在我们的案例中,它以一种很好的方式解决了问题,这才是最重要的;)

4

1 回答 1

1

第一个想法是在创建数据库时将这些额外的组放入数据库中,并简单地依赖它们在其中的事实,但我认为这是不好的做法。(因为如果它们被删除或重命名,系统将崩溃)

如果数据库根本不存在,或者您的应用程序使用的表和列被重命名,您的应用程序也会崩溃。

对我来说,这些行的存在以及正确的 ID 或名称只是一个先决条件,就像存在正确类型的表和列一样。

只需确保记录这些行必须存在的事实。确保应用程序不允许重命名或删除它们,如果您真的担心有人会删除这些行,请检查您在代码中使用的所有硬编码 ID/名称是否在启动时的数据库。

于 2013-07-19T15:24:21.200 回答