2011-03-17 96 views
17

上下文:SQL Server 2008,C#將數組數組存儲在數據庫字段

我有一個整數數組(0-10個元素)。數據不會經常更改,但會經常檢索。

我可以創建一個單獨的表來存儲數字,但由於某種原因,它覺得這不會是最佳的。

問題1:我應該將數組存儲在單獨的表中嗎?請給出一種或另一種方式的理由。

問題#2:(無論Q#1的答案是什麼),在數據庫字段中存儲int []的「最佳」方式是什麼? XML? JSON? CSV?

編輯: 一些背景資料:存儲數字只是不參與任何關係,和總是用作陣列(即從未在值被檢索或單獨使用)的一些係數。

回答

10

將數據存儲在數據庫中的「最佳」方式是最有利於將在其上執行的操作以及使維護最簡單的操作的方式。正是這個後來的要求,應該引導你到一個規範化的解決方案,這意味着將整數存儲在一個關係表中。除了易於更新之外,下一位開發人員更容易理解信息的存儲方式和方式。

3

一個單獨的表格將是最「正常化」的方式來做到這一點。從長遠來看,這可能更好,因爲您不必解析列的值來提取每個整數。

如果你想要你也可以使用XML column來存儲數據。

Sparse columns也可能是您的另一種選擇。

如果你想保持它非常簡單,你可以只限定值:10;2;44;1

+1

XML列有一些惱人的限制,比如不能從鏈接的服務器上工作。 – 2011-03-17 16:07:57

+0

很高興知道,謝謝。如果我在答案中不清楚,我推薦一個單獨的表格作爲適用於大多數情況的解決方案。 – 2011-03-17 16:25:00

28

附表,標準化

還不如在不同的行

無論XML或JSON,但不同的號碼你的想法是最好的。您可以稍後再感謝我

+14

+1爲「您可以稍後再感謝我」。 「稍後」的時間將會到來 – 2012-10-16 16:55:48

+5

在極少數情況下,你會發現相反的情況是真的... – andreas 2013-12-07 20:25:17

+4

你好,我來自遙遠的未來(2014年)。我在這裏感謝你。 – Voldemort 2014-10-23 03:42:02

1

我想因爲您正在談論的SQL Server,它表明您的應用程序可能是一個數據驅動的應用程序。如果是這樣的話,我會一直保持在數據庫中的數組作爲一個獨立的表和每個值的記錄。它將被標準化並針對retreival進行優化。即使數組中只有一些值,您可能需要將該數據與可能需要與您的數組值「聯合」的其他回讀數據合併。在這種情況下,sql通過使用索引,外鍵等(標準化)進行了優化。這就是說,如果你不需要改變這些值,你總是可以在你的代碼中硬編碼10個值並保存到數據庫的往返行程。這取決於你的應用程序如何工作以及這個數組將被用於什麼。

1

我同意所有其他人關於最好的是一個單獨的規範化表。但是如果你堅持把它放在同一張表中,不要將數組放在一列中。相反,創建10列並將每個數組值存儲在不同的列中。它會爲您解決和更新問題。

+0

我不完全同意 - 有時你可能需要2列,其他時間也許你需要40 。如果你的表中有一堆可選的列,那麼它們只會佔用空間。 – 2011-03-17 20:35:04

+0

@Josh據我所知,它永遠不會超過10個。 – 2011-03-18 13:22:11

4

將其存儲爲JSON數組,但知道現在所有訪問都是針對整個數組的 - 無需對特定係數進行單獨的讀/寫操作。

在我們的例子中,我們將它們存儲爲一個json數組。就像你的情況一樣,單個數組之間沒有關係 - 數組只能作爲一個單位有意義,並且作爲一個單位它與表中的其他列有關係。順便說一句,其他的東西都是標準化的。我把它比作這個:如果你要存儲一個10字節的塊,你可以將它保存在VARBINARY(10)的單個列中。你不會將它分成10個字節,將它們存儲在VARBINARY(1)的列中,然後用外鍵將它們拼接在一起。我的意思是你可以 - 但它沒有任何意義。

你作爲開發人員需要了解int的數組是如何「單塊」的。