【问题标题】:How to store data with variable number of attributes in android如何在android中存储具有可变数量属性的数据
【发布时间】:2014-03-07 06:30:03
【问题描述】:

我正在申请收集健康日志以用于研究目的。我想要一些架构设计建议。

我的应用要求:

  1. 会有多种形式和众多领域。
  2. 此数据需要存储在本地(下一阶段是存储在服务器上)
  3. 随着用户群的增加,我们还可以有新的形式
  4. 用户还必须能够更新以前输入的日志

问题

For eg : 
Form 1 : (Name  , Age, Sex ) 
Form 2 : (Name  , Age, college, height )
The actual form has many fields related to health information

由于我从用户那里收到的数据会有不同的字段,如上,我如何将多个表单的数据存储到数据库中。此外,我想添加向应用程序添加新表单的功能,因此为永远的表单制作数据库表不是一个好主意(在我看来)。我正在考虑将数据作为 JSON 字符串存储到具有关联表单 ID 的数据库中。

【问题讨论】:

  • JSON 是一个很好的解决方案,但可能效率不高——但是,如果您只与一个表单打交道,这可能并不困难。另一个优点是它易于序列化,您只需将 JSON 字符串从一个 Activity 传递到下一个 Activity(以及保存状态)。如果你想要一个纯 SQL 实现,你会有一个包含字段数据的主表(master_id,name)和一个详细表(master_id,field_name,value)。
  • 是的,这是我使用 JSON 背后的想法,感谢您的评论。对于我的要求,SQL 将非常复杂。这种实现还有其他一些技术吗?
  • JSON 或 XML 对我来说有意义。

标签: android database architecture attributes


【解决方案1】:

选项 1. 将每个字段作为自己的列存储在数据库中,在数据库中查询适当的字段以重新创建各种表单。

注意 - 更改字段值会更改所有表单的值,除非您指定不同的列名来为不同的表单保存数据。

请参阅tutorial,了解如何创建 SQlite 数据库以开始使用。

选项 2. 序列化 hashmap 并将映射作为 blob 存储在数据库中。无需更改数据库即可轻松添加新字段。缺点:无法查询个人特征(年龄、性别等)。当您检索某个人的信息时,您会检索所有信息,然后选择您需要的信息。 (更简单,但效率较低/健壮)。

【讨论】:

  • 选项 1 并不像建议的那样好——您可以轻松地将主 ID 引入 PK 以区分与自定义列相关的形式;这将使它成为一个可用的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
相关资源
最近更新 更多