Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将元信息存储为简单枚举还是存储在数据库中?_Java_Database_Architecture - Fatal编程技术网

Java 将元信息存储为简单枚举还是存储在数据库中?

Java 将元信息存储为简单枚举还是存储在数据库中?,java,database,architecture,Java,Database,Architecture,我需要存储一个元信息-这个信息实际上根本不会影响系统,实际上只是为了提供信息 例如,如果我有几个应用程序:ios应用程序、android应用程序、移动web、桌面web,则登录用户可以在这些应用程序中创建内容,内容将显示在各个应用程序中。我想它可能是有用的存储从哪里创建的内容 因此,如果数据库中有: - USER table (user_id, username, password, email) - CONTENT table (content_id, user_id, content)

我需要存储一个元信息-这个信息实际上根本不会影响系统,实际上只是为了提供信息

例如,如果我有几个应用程序:ios应用程序、android应用程序、移动web、桌面web,则登录用户可以在这些应用程序中创建内容,内容将显示在各个应用程序中。我想它可能是有用的存储从哪里创建的内容

因此,如果数据库中有:

 - USER table (user_id, username, password, email)
 - CONTENT table (content_id, user_id, content)
我想添加有关内容来源的信息,因此我将修改内容表,如下所示:

-内容表(内容id、用户id、内容、来源)

我应该如何存储源代码

  • 它是否应该只是一个枚举类(我使用的是Java)

    然后简单地在数据库中存储一个字符串(varchar)

  • 或者,我应该创建一个额外的表并使用外键关系吗

  • 哪种方法更可取?赞成/反对


    这里的信息reall不会影响应用程序。在某种程度上,这只是为了统计信息的目的,因此,如果我们出于好奇而回顾过去,我们可以回答“大部分内容来自何处”的问题。在我看来,你不应该选择其中一个,而应该两者兼而有之

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

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


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

    我通常在代码中包含枚举,在数据库中包含枚举表示的数据的表。此外,我使表中的ID与枚举的值匹配,并且可以轻松访问已知的枚举值

    另一种方法是不使用枚举,而是使用ID+名称的类(可能枚举仍然存在,以便将ID与枚举值匹配,并易于访问已知的枚举值)。如果您有类似“IfMyEnum=myEnum.SomeValue then”的代码(也就是说,您必须对枚举值做出决定),那么最好使用该类实现polimorphic行为


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

    但是当我同时拥有这两个类时,表和枚举之间就没有真正的连接了,这不是一个问题吗?也就是说,我可以在db表上添加/修改条目,而无需更改枚举类,反之亦然。这是我在最后一段中说“还可以(可选)在应用程序启动时使用表内容使枚举有效…”的原因。
    public enum Source{ IOS_APP, ANDROID_APP, MOBILE_WEB, DESKTOP_WEB } 
    
    SOURCE table (source_id, source_description)
    CONTENT table (content_id, user_id, content, source_id)