在Android sqlite数据库中存储和检索Vector

时间:2010-09-01 22:03:32

标签: android sql database-design

我需要在android sqlite数据库中存储检索未知数量对象的向量。

基本上,设置是这样的:我正在开发一个任务管理应用程序,用户可以在其中添加任意数量的笔记。我当前的设置使用一个数据库,每个任务一行。当我需要将多个音符及其相关信息与一个任务相关联时,这会出现问题。我可以看到两种方法:尝试将一组注释或一个向量或某物作为BLOB存储在任务的行中,或者有另一个注释数据库,其中每行包含一个注释及其信息,以及任务的ID这张便条属于。这似乎更容易实现,因为我需要做的就是检索数据将获得与特定id匹配的所有音符的光标,然后遍历它以将其显示给用户。但是,为笔记创建一个全新的数据库似乎效率不高,它使同步和删除笔记变得更加困难。

你怎么看?有一个单独的笔记数据库是否值得?我应该使用BLOB还是去单独的数据库?如果是BLOB,是否有任何好的教程用于存储和检索BLOB对象?

2 个答案:

答案 0 :(得分:1)

我认为这个问题的答案实际上在于如果他们改变了,你将如何更新。目前,BLOB路线似乎是一个非常好的主意,但如果您想添加一些新功能并且想要存储一些新的音符属性(想想星号或重要性等),会发生什么。为了更新notes对象以添加这个新字段,您需要做什么?如果它只是一个数据库表,则很容易更改表的布局,甚至添加默认值。如果它是BLOB,您将需要遍历每个条目,反序列化BLOB对象,修复它并重新序列化。这可能会变得棘手。

此外,对于使用嵌入式数据库的小型应用程序而言,这可能并不重要,但如果对象不是BLOB,则更容易在应用程序之外修改数据库。更不用说您可以使用单独的表编写的查询。例如,某人如何计算附加到任务的笔记数?如果它在数据库中分离出来,那么这是一个简单的查询。

只是我的两分钱。

答案 1 :(得分:1)

听起来你需要数据库中的另一个表(而不是另一个数据库)。您已经拥有了一个任务表。现在为Notes制作一个。将列设置为Tasks表中的外键。也就是说,Notes.Task_ID将保存Note所用的Task的ID。然后,当您想要获取任务的所有注释时,请查询Notes表。