【问题标题】:Store meta information as a simple Enum or in database?将元信息存储为简​​单的枚举或数据库?
【发布时间】:2013-06-15 08:38:44
【问题描述】:

我需要存储一个元信息——这些信息实际上根本不会影响系统,实际上只是提供信息的目的。

例如 - 如果我有多个应用程序:ios 应用程序、android 应用程序、移动网络、桌面网络 - 登录用户可以在其中创建内容并且内容将跨应用程序显示。我在想它可能用于存储从哪里创建的内容。

所以如果我在数据库中有:

 - USER table (user_id, username, password, email)
 - CONTENT table (content_id, user_id, content)

我想添加关于内容来自哪里的信息,所以我将修改内容表如下:

- CONTENT table (content_id, user_id, content, source)

我应该如何存储源代码?

  1. 它应该只是一个枚举类(我正在使用 Java)

    public enum Source{ IOS_APP, ANDROID_APP, MOBILE_WEB, DESKTOP_WEB } 
    

    然后简单地将它存储在数据库中的字符串(varchar)中?

  2. 或者,我是否应该实际创建一个额外的表并使用外键关系

SOURCE table (source_id, source_description)
CONTENT table (content_id, user_id, content, source_id)

哪种方法更可取?优点/缺点?

这里的信息无论如何都不会影响应用程序。在某种程度上,它只是出于统计信息的目的,所以如果我们好奇地回顾一下,我们可以回答“大部分内容来自哪里”的问题

【问题讨论】:

    标签: java database architecture


    【解决方案1】:

    我曾经在代码中使用枚举,并在数据库中使用由枚举表示的数据的表。此外,我使表中的 ID 与枚举的值匹配,并且可以轻松访问众所周知的枚举值。

    另一种方法是没有枚举,而是使用 ID + Name 的类(也许枚举仍然存在,以便将 ID 与枚举值匹配,并且可以轻松访问众所周知的枚举值)。如果你有像“if myEnum = MyEnum.SomeValue then”这样的代码(也就是说,你必须对枚举值做出决定)也许最好使用类来实现多态行为。

    PS:我不是 Java 开发人员,我使用 C#,我认为 Java 中的枚举实际上是能够具有行为的真实类,不是吗?

    【讨论】:

      【解决方案2】:

      IMO,您不应该选择其中一个,而应该两者兼而有之。

      枚举有助于保持 Java 代码整洁,而表有助于保持数据井井有条。

      最好有一个单独的(主)表来存储该类型的信息。其他表可以将其作为外键引用。有了它,您将拥有一个可能值的中心位置。您不必到处寻找所有可能的值。

      您可以创建一个表示该(主)表的枚举。如果您为其他表创建实体,它可以用作字段类型。例如,您可以查看this。此外(可选)您可以在应用程序启动时使用表内容验证枚举,以确保枚举与表保持同步,以防新值或添加或某些现有值被更新。

      【讨论】:

      • 但是当我同时拥有它时,表和枚举之间没有真正的联系不是问题吗? IE。我可以在不更改枚举类的情况下在 db 表上添加/修改条目,反之亦然,2
      • 这就是为什么我在最后一段中说“另外(可选)您可以在应用程序启动时使用表格内容验证枚举......”。
      猜你喜欢
      • 1970-01-01
      • 2012-08-03
      • 2011-09-05
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多