【问题标题】:Store JSON in an sqlite field?将 JSON 存储在 sqlite 字段中?
【发布时间】:2011-09-25 09:37:08
【问题描述】:

我正在编写一个与 Web API 通信的应用程序,它以 JSON 响应。目前,我正在使用 gson 将 JSON 对象转换为 Java 对象(顺便说一句,这很棒)。

现在,我想将其中一些对象存储在 SQLite 数据库中。但是,它们有许多永远不会在查询中使用的属性(即,我不会成为 ORDERing、WHEREing 或任何类似的属性),所以我觉得没有必要为所有人创建列其中。我想做的是:

  • 只有在查询数据库时将使用的基本数据列
  • 有一个 TEXTBLOB 列(您推荐哪一个?)来存储实际的 JSON,这样我就可以从中重新创建我的 Java 对象并访问所有数据。

这既可以让我的生活更轻松,也可以简化我的代码(在处理来自 API 的数据与来自数据库的数据时,我不必编写非常不同的代码)。

不过,虽然我看不出有什么不好的地方,但感觉有点可疑。

如果我使用这种技术,你认为我会遇到什么样的麻烦?

【问题讨论】:

  • 从技术上讲,这将违反规范化规则 - 字段的值取决于其他字段,但规范化规则是建议,而不是刻在石头上的你必须这样做法律。
  • 在我的应用程序中,我将 JSON 数据存储在 TEXT 字段中,但这些数据不值得拥有自己的表。
  • @Marc 我喜欢你在“违反规范化规则”中翻译“可疑”的方式:)(是的,我知道它们是什么)
  • @Felix,你问这个问题已经有一段时间了。您是否继续在数据库中使用 JSON?我正在考虑做同样的事情,但正如你所说,感觉很可疑。

标签: android json sqlite data-storage


【解决方案1】:

我不喜欢它的主要原因是依赖于存储/检索的 JSON 的结构是有效的,因为它完全不受数据库的控制。并不是说您不能对可能出现的问题采取预防措施,而是如果 JSON 以某种方式被截断或以其他方式破坏解析器,那么您将丢失整个对象,而不仅仅是一个无效或被截断的属性。如果这是一个可接受的风险,那么它可能是一种合理的技术。

【讨论】:

  • 什么情况下会截断值?如果它不在数据库的手中,那么您是在谈论硬件故障吗?如果是,那么我想我可以承担这个风险(如果硬件故障,可能会发生更糟糕的事情)。
  • 我的意思是由于人为错误而不是硬件故障 - 如果无效的 JSON 以某种方式进入数据库,它会默默地发生。在您的 JSON 库和 SQLite 的默认行为之间,不应该发生这种情况,但如果发生这种情况,其后果将比让数据库管理数据本身的结构更大。跨度>
猜你喜欢
  • 1970-01-01
  • 2012-01-12
  • 2020-07-21
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多