2

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

例如 - 如果我有多个应用程序: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)

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

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

4

2 回答 2

1

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

枚举将有助于保持 Java 代码的整洁,而表将有助于保持数据的组织性。

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

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

于 2013-06-18T23:37:13.200 回答
0

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

另一种方法是没有枚举,而是使用 ID + Name 的类(也许枚举无论如何都存在,以将 ID 与枚举值匹配,并且可以轻松访问众所周知的枚举值)。如果您有类似“if myEnum = MyEnum.SomeValue then”之类的代码(也就是说,您必须对枚举值做出决定),那么使用该类具有多态行为可能会更好。

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

于 2013-06-19T00:19:12.787 回答