2013-01-08 39 views
4

我正在尋找一種將音樂標籤和註釋存儲在運行於Android API 8(Froyo 2.2)上的SQLite數據庫中的有效方法。它們應該與Vorbis評論的格式類似。將音樂標籤存儲在SQLite數據庫中

到目前爲止,我認爲:

存儲在名爲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對象。請告訴我任何其他選擇,或者你在類似情況下做什麼。謝謝!

我創建的ASCII表與http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

回答

1

開始爲每個字段單獨列。如果您稍後需要多個用戶定義的字段,那麼您以後可以隨時添加一個json對象,但我的猜測是您不需要它。

單個字段有許多優點,包括對任何字段進行排序和過濾的能力。大多數SQL數據庫能力都基於具有單獨的字段,因此如果將字段組合在一起,那麼執行任何操作都將變得更加困難。

1

我強烈建議規範化您的數據 - 不要存儲JSON等,因爲它大大降低了您後來以任何有意義的方式查詢數據的能力(並相信我,不規範化數據似乎是最確定的 - 消防方式,以保證你需要在未來查詢該數據,即使你現在不需要)。

去你的第二個多列的例子,你會很高興你做到了。

1

您是否聽說過NoSQl數據庫?由於它將數據存儲在JSON模型中,因此它將非常適合您的需求,因此每個數據項可以具有任意字段。檢查出TouchDB-Android