从Android应用程序存储/检索高动态数据

时间:2017-09-27 20:17:54

标签: android database sqlite

我正在尝试开发一款Android应用来帮助我测试陶瓷釉料,并且遇到了存储数据的问题。我想要的主要功能是,在一个釉料中,能够修改其配方,但仍然保留该配方的旧版本。由于我的很多数据都是重复的(完成,不透明,激发气氛等),因此数据库将是存储该数据的最佳方式。但是,每个釉料可以有任意数量的版本,每个版本中的配方可以有任意数量的成分(通常1-10,但多达20)。我想不出存储和检索这种“二维”动态数据的方法。我可以为每个釉料制作一个单独的数据库,但我觉得这会破坏数据库的目的。任何实现存储这种高度动态数据的方法的帮助都将受到赞赏。谢谢。

2 个答案:

答案 0 :(得分:0)

您应该能够添加多个具有相同标识符的釉料(例如名称),并为每个釉添加相关信息和日期。然后,当您选择查看釉面时,您可以下拉具有该标识符的釉面的所有信息,并按日期排序。

真正唯一要添加的是另一个日期,ID和名称。否则,该条目包含您需要的所有相同数据。

答案 1 :(得分:0)

我认为您希望拥有一些相关的表格。

我建议一个釉面基座,包含基础釉料,食谱/版本釉料的表格。成分/属性表。然后是一个扩展的链接/关联表表,用于将成分属性链接到配方,还包含金额。

Glaze 表格只是釉面名称和唯一标识符非常简单。例如 CREATE TABLE IF NOT EXISTS glazes (_id INTEGER PRIMARY KEY, glazename TEXT)

GlazeVersion 表再次相对简单,唯一标识符,版本以及对其父/基釉的引用。 e.g。

CREATE TABLE glazeversions (_id INTEGER PRIMARY KEY, version TEXT, glazebase_ref INTEGER)

Indgredients 表再次变得简单,一个唯一的ID和名称,例如。

CREATE TABLE ingredients (_id INTEGER PRIMARY KEY, ingredient TEXT)

食谱表可以参考釉料(因此含有釉料),成分的参考和成分含量的字段,例如

CREATE TABLE IF NOT EXISTS recipes (glazeversion_ref INTEGER, ingredient_ref INTEGER, amount INTEGER, PRIMARY KEY(glazeversion_ref, ingredient_ref))

因此我们假设我们有3个基础釉红色,绿色和蓝色。 glazes 表格中有3个条目(出于说明目的,ID为1 2和3)。

另外假设每个版本都有三个版本,分别是Version001,Version002和Version003(为了便于说明,在glazeversion表id为1-9中有9行)。

得到的glazeversions表可以是: -

enter image description here

可以编写查询以显示链接/关联/引用,例如

SELECT * FROM glazeversions JOIN glazes WHERE glazebase_ref = glazes._id ORDER BY glazename

结果将是: -

enter image description here

对于成分表,我们假设有5种成分,赭石,钙,大气,温度(简称温度)和持续时间(分别为1-5)。 e.g。

enter image description here

现在它已进入食谱表,我们最初假设1釉蓝色版本版本的配方,它有3种成分Atmosphere,Temp和Ocher

食谱表将有3行,所有三行都参考了glazeversion Version001 for glaze Blue(_id 2),但每个引用相应的成分(id为1,3和4)。

我们还会假设另外两种釉料: -

  • 红色版本001含有4种成分持续时间,温度,气氛和赭石所以4行都引用了釉料版本001为红色(_id 1),各自的成分id为1,3,4和5.

  • 绿色版本003含有2种成分赭石和钙。所以两行都引用了glazeversion Version003 for Blue(_id 9),其成分是id 1和2。

所以表格如下: -

enter image description here

以下查询是将所有内容捆绑在一起的示例: -

SELECT glazename, version, ingredient, amount FROM recipes JOIN ingredients ON ingredient_ref = ingredients._id JOIN glazeversions ON glazeversion_ref = glazeversions._id JOIN glazes ON glazebase_ref = glazes._id

这将导致: -

enter image description here

如果你只想给绿色Version003上釉,那么你可以添加一个WHERE子句: -

SELECT glazename, version, ingredient, amount FROM recipes JOIN ingredients ON ingredient_ref = ingredients._id JOIN glazeversions ON glazeversion_ref = glazeversions._id JOIN glazes ON glazebase_ref = glazes._id WHERE glazeversions._id = 9

会导致: -

enter image description here