java - 将元信息存储为简​​单枚举或数据库?

标签 java database architecture

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

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

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

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

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

- CONTENT 表(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)

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

反正这里的信息真的不影响申请。在某种程度上,它只是出于统计信息的目的,所以如果我们出于好奇回头看,我们可以回答“大部分内容从何而来”这个问题

最佳答案

IMO,你不应该选择一个而不是另一个,而是两者兼而有之。

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

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

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

关于java - 将元信息存储为简​​单枚举或数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17180611/

相关文章:

Java repaint() 在 jPanel 类中不起作用

java - 持续集成工具 (TeamCity) 中的集成测试

firebase - 允许用户只访问他们自己在 Firebase 数据库中的数据?

html - 监控新用户

linux - 检查我的 Linux 是 32 位还是 64 位的最佳方法是什么?

适用于大型项目的 Java GUI 架构

ruby-on-rails - 处理 Rails 中的纬度/经度和 mysql 空间点

java - 添加启动画面时,webview URL 未通过 FCM 更新

php - Codeigniter insert_batch 错误

java - 在 Android Activity 中使用 Kotlin 模型类的 getter 和 setter