我需要存储元信息 - 这些信息实际上根本不会影响系统,实际上只是信息目的。
例如 - 如果我有几个应用程序:ios app,android app,mobile web,desktop web - 登录用户可以创建内容,内容将跨应用程序显示。我认为可能对于存储从中创建内容的位置非常有用。
所以,如果我在数据库中:
- USER table (user_id, username, password, email)
- CONTENT table (content_id, user_id, content)
我想添加有关内容来源的信息,因此我将修改内容表,如下所示:
- CONTENT table (content_id, user_id, content, source)
我应该如何存储来源?
它应该只是一个枚举类(我使用的是Java)
public enum Source{ IOS_APP, ANDROID_APP, MOBILE_WEB, DESKTOP_WEB }
然后只需在数据库中存储一个String(varchar)?
或者,我应该实际创建一个额外的表并使用外键关系
SOURCE table (source_id, source_description) CONTENT table (content_id, user_id, content, source_id)
哪种方法更合适?优点/缺点?
此处的信息reall不会影响应用程序。在某种程度上,它仅用于统计信息目的,所以如果我们回顾好奇心,我们可以回答“大部分内容来自哪里”的问题
答案 0 :(得分:1)
IMO,你不应该选择其中一个,而应选择两个。
枚举将有助于保持Java代码的清洁,该表将有助于保持数据的有序性。
为这种类型的信息提供单独的(主)表会很好。其他表可以将其作为外键引用。有了它,您将拥有可能值的中心位置。你不必去寻找所有可能值的地方。
您可以创建表示该(主)表的枚举。如果为其他表创建实体,它可以用作字段类型。您可以查看this作为示例。另外(可选)您可以在应用程序启动时使用表内容对枚举进行有效,以确保枚举与表保持同步,以防新值或添加或某些现有值更新。
答案 1 :(得分:0)
我用来在代码中创建枚举,并使用数据库中枚举数据表示的表。此外,我使表中的ID与枚举的值匹配,并且可以轻松访问众所周知的枚举值。
另一种方法是没有枚举,而是具有ID +名称的类(可能无论如何都存在枚举,以使ID与枚举值匹配并且可以轻松访问众所周知的枚举值)。如果你有像“if myEnum = MyEnum.SomeValue那么”的代码(这是你必须对枚举值做出决定)也许最好使用该类进行polimorphic行为。
PS:我不是Java开发人员,我使用C#,我认为Java中的枚举实际上是能够有行为的真正的类,不是吗?