我正在寻找一种在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表答案 0 :(得分:1)
从每个字段的各个列开始。如果稍后需要几个用户定义的字段,您可以随后添加一个json对象,但我猜您不需要它。
单个字段具有许多优点,包括对任何字段进行排序和筛选的功能。大多数sql数据库功能都基于具有单独的字段,因此如果组合字段将会更加困难。
答案 1 :(得分:1)
我强烈建议规范化您的数据 - 不要存储JSON等,因为它会大大降低您以后以任何有意义的方式查询数据的能力(相信我,不规范数据似乎是最可靠的保证您 将来需要查询该数据的方法,即使您现在不这样做。)
使用您的第二个多列示例,您会很高兴。
答案 2 :(得分:1)
您听说过NoSQl数据库吗?它将完美地满足您的需求,因为它将数据存储在JSON模型中,因此每个数据项都可以包含任意字段。查看TouchDB-Android。