2014-01-19 46 views
0

JSON字符串我有一個名爲學年業務對象,它具有目前一個標誌枚舉:店JSON數組作爲數據庫

[Flags] 
public enum VisibleDayOfWeek : int 
{ 
    None = 0, 
    Monday = 1, 
    Tuesday = 2, 
    Wednesday = 4, 
    Thursday = 8, 
    Friday = 16, 
    Saturday = 32, 
    Sunday = 64 
} 

對我來說這是值對象沒有標識,他們沒有得到一個額外的SQL表。這也將是矯枉過正。

現在我想將這些可見的日子(用戶可以配置)保存爲數據庫中的int值。它目前正在運行,但在數據庫中讀取/寫入數據,並將這些值讀取/寫入業務對象,並且使用該對象進行集成測試是一件痛苦的事情。

由於我有一個javascript客戶端使用json數據,我今天早上爲什麼不把我從瀏覽器中直接獲取的json數據保存爲數據庫中的json字符串。所以我唯一需要做的就是在客戶端使用json.parse。並且要在服務器端進行集成測試,我使用json庫中現有的json.serialize/deserialize方法。

可見的日子在一年中只改變了1,2或3次。每個用戶每5年有5個學年的數據通道可能不會更多。可見的日子列永遠不會通過sql select查詢。 UI邏輯在客戶端完成。

因此,對我來說,將json數組作爲json字符串存儲在sql數據庫中是個好主意。

您對我的新方法有何看法?你有沒有看到我沒有想過的任何負面影響,我可以稍後再次悔改..?

+0

SQL本身不支持JSON,因此您無法直接對您的JSON數據運行查詢。另一方面,SQL Server支持基於XML和XML的查詢。因此,您可能需要考慮存儲將JSON轉換爲XML以進行存儲。 – wdosanjos

+0

你讀過我的全部問題嗎,還是剛讀完標題?引用:「...可見天數列永遠不會通過sql查詢select」 – Elisabeth

+0

如果有保證永遠不需要查詢該數據,那麼只需將JSON存儲在varchar/nvarchar列中。但是,我建議通過存儲XML來讓您的解決方案對未來的需求/增強更加開放。 – wdosanjos

回答

4

理由不把JSON文本字段在關係數據庫:

  1. 你失去做依賴於JSON字段中的數據查詢的能力。
  2. 由於您沒有將數據描述給SQL引擎,因此您的應用程序/服務器代碼有責任驗證數據並確保數據在數據損壞時可以運行。

理由把JSON文本字段在關係數據庫:

  1. 效率(JOIN可能會很慢,如果你知道你將永遠不會需要使用這些數據在現場查詢,你不需要以允許的方式存儲它)。
  2. 簡化實現(只需確保您檢查(在服務器上)客戶端爲您提供了有效的JSON字符串)。
+0

到你的人羣2.我不會那樣做。 JSON.Stringify函數可以做到這一點。如果有人使用提琴手向我發送錯誤的json,服務器將無法接受數據,因爲他無法序列化它。那是他的工作。 – Elisabeth

+0

@Elisa我可以假設所有可能閱讀此答案的人都不會這樣做。 – ivarne

+0

在新的SQL Server中,您無需擔心JSON驗證。您可以添加驗證文本格式正確的JSON約束。 –