4

我正在寻找一种有效的方法来将音乐标签和评论存储在运行在 Android API 8 (Froyo 2.2) 上的 SQLite 数据库中。它们应该采用与 Vorbis 注释类似的格式。

到目前为止,我已经考虑过:

存储在名为“字段”的列中的 JSON 对象,格式类似:

+-----+----------------------------------------------------------------------+
| _id |                                  fields                              |
+-----+----------------------------------------------------------------------+
|   0 | {"artist":"Artist", "title":"Track", "album":"Album 123", "track":3} |
+-----+----------------------------------------------------------------------+

每个字段的单独列。这是 google.android.music 存储字段的方式,但我担心新曲目会添加太多列。资源:

另一方面,许多有经验的数据库设计人员会争辩说,一个规范化的数据库永远不会需要超过 100 个表中的列。 http://www.sqlite.org/limits.html

+-----+-------------+----------------+------------+
| _id |   artist    |     album      |   title    |
+-----+-------------+----------------+------------+
|   0 | Test Artist | Test Album 123 | Test Title |
|   1 | An Artist   | This Album     | This Title |
+-----+-------------+----------------+------------+

最初我只是把它们放在一个

Map<String, String> and invoked toString(), adding it to 'fields' as follows:

+-----+--------------------------------------------------------------+
| _id |                            fields                            |
+-----+--------------------------------------------------------------+
|   0 | {title=Example Title, album=Example Album, artist=An Artist} |
+-----+--------------------------------------------------------------+

这类似于 JSON 对象(第一个示例),但增加了一些困难,例如将其解析回 Java 对象。

我宁愿选择任意数量的字段,所以我倾向于 JSON 对象。请告诉我任何替代选择,或者您在类似情况下会做什么。谢谢!

我使用http://www.sensefulsolutions.com/2010/10/format-text-as-table.html创建了 ASCII 表

4

3 回答 3

2

我强烈建议规范化您的数据 - 不要存储 JSON 等,因为它会大大降低您以后以任何有意义的方式查询该数据的能力(相信我,不规范化数据似乎是最可靠的保证方式即使您现在不需要查询,将来也需要查询该数据)

使用第二个多列示例,你会很高兴你做到了。

于 2013-01-08T05:08:36.457 回答
1

从每个字段的单独列开始。如果您以后需要几个用户定义的字段,您可以随时添加一个 json 对象,但我猜您不需要它。

单个字段有很多很多优点,包括对任何字段进行排序和过滤的能力。大多数 sql 数据库功能都基于具有单独的字段,因此如果将这些字段组合起来,将更难做任何事情。

于 2013-01-08T05:08:25.107 回答
1

你听说过 NoSQl 数据库吗?它将非常适合您的需求,因为它将数据存储在 JSON 模型中,因此每个数据项都可以具有任意字段。查看TouchDB-Android

于 2013-01-08T05:14:22.230 回答