我需要存储一个元信息——这个信息实际上根本不会影响系统,实际上只是提供信息的目的。
例如 - 如果我有几个应用程序:ios 应用程序、android 应用程序、移动网络、桌面网络 - 登录用户可以在其中创建内容,并且内容将在应用程序中显示。我在想它可能有助于存储从哪里创建的内容。
所以如果我在数据库中有:
- USER table (user_id, username, password, email)
- CONTENT table (content_id, user_id, content)
我想添加关于内容来源的信息,所以我将修改内容表如下:
- CONTENT 表(content_id, user_id, content, source)
我应该如何存储源?
它应该只是一个枚举类吗(我正在使用 Java)
public enum Source{ IOS_APP, ANDROID_APP, MOBILE_WEB, DESKTOP_WEB }
然后简单地将它存储在数据库中的字符串(varchar)?
或者,我真的应该创建一个额外的表并使用外键关系
SOURCE table (source_id, source_description) CONTENT table (content_id, user_id, content, source_id)
哪种方法更可取?优点/缺点?
反正这里的信息真的不影响申请。在某种程度上,它只是出于统计信息的目的,所以如果我们出于好奇回头看,我们可以回答“大部分内容从何而来”这个问题
最佳答案
IMO,你不应该选择一个而不是另一个,而是两者兼而有之。
枚举有助于保持 Java 代码整洁,表格有助于保持数据井井有条。
最好为此类信息提供一个单独的(主)表。其他表可以将其作为外键引用。有了它,您将拥有一个可能值的中心位置。您不必到处寻找所有可能的值。
您可以创建一个代表该(主)表的枚举。如果您为其他表创建实体,它可以用作字段类型。可以看到this举个例子。此外(可选)您可以在应用程序启动时使用表内容验证枚举,以确保枚举与表保持同步,以防新值或添加或更新某些现有值。
关于java - 将元信息存储为简单枚举或数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17180611/