2011-06-29 74 views
6

我正在編寫一個應用程序,該應用程序與使用JSON響應的Web API進行通信。目前,我正在使用gson(這很棒,順便說一句)將JSON對象翻譯成Java對象。將JSON存儲在sqlite字段中?

現在,我想將這些對象中的一些存儲在SQLite數據庫中。然而,它們有很多屬性在查詢中永遠不會被使用(即我不會使用ORDER ing,WHERE ing,或者那些具有這些屬性的東西),所以我覺得沒必要爲它們創建列。我在想什麼做的是:

  • 只爲將查詢數據庫時
  • 有一個TEXTBLOB列(你推薦哪一個?)中使用的基本數據列存儲的實際的JSON,所以我可以從它重新創建我的Java對象並訪問所有數據。

這樣既能讓我的生活更輕鬆,並簡化我的代碼(我也不會從API與數據從數據庫中的數據處理時,寫非常不同的代碼)。

但是,雖然我沒有看到缺點,但感覺有點可疑。

如果我使用這種技術,你會認爲我會遇到什麼樣的麻煩?

+3

這在技術上會違反規範化規則 - 其值依賴於其他領域的領域,但規範化規則是建議,而不是刻在石頭上 - 你必須做的是這樣的規則。 –

+0

在我的應用程序中,我將JSON數據存儲在'TEXT'字段中,但是它的數據不適合使用它自己的表格。 – javisrk

+0

@Marc我喜歡你如何在「違反規範化規則」中翻譯「腥」:)(是的,我知道他們是什麼) – Felix

回答

3

我不喜歡它的主要依賴於存儲/檢索的JSON的結構是有效的,因爲它完全不在數據庫之手。並不是說你不能預防可能出現的問題,但是如果JSON以某種方式被截斷或以跳過解析器的方式受到損害,那麼就會丟失整個對象而不是一個無效或截斷的屬性。如果這是一個可接受的風險,那麼這可能是一種合理的技術。

+0

在什麼情況下值會被截斷?如果它超出了數據庫的範圍,那麼你是否在談論硬件故障?如果是的話,那麼我想我可以承擔這種風險(在硬件故障的情況下可能會發生更糟糕的事情)。 – Felix

+0

我的意思是由於人爲錯誤而不是硬件故障 - 如果無效的JSON以某種方式將其存入數據庫,它會默默地發生。在你的JSON庫和SQLite的默認行爲之間,這個*不應該發生,但是如果它發生的話,結果會比讓數據庫自己管理數據結構更大。 –