在SQLite数据库中存储音乐标签

时间:2013-01-08 05:03:15

标签: java android sql

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

到目前为止,我一直在考虑:

存储在名为“fields”的列中的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表

3 个答案:

答案 0 :(得分:1)

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

单个字段具有许多优点,包括对任何字段进行排序和筛选的功能。大多数sql数据库功能都基于具有单独的字段,因此如果组合字段将会更加困难。

答案 1 :(得分:1)

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

使用您的第二个多列示例,您会很高兴。

答案 2 :(得分:1)

您听说过NoSQl数据库吗?它将完美地满足您的需求,因为它将数据存储在JSON模型中,因此每个数据项都可以包含任意字段。查看TouchDB-Android