2013-09-26 49 views
3

我想知道哪種方法是在sql列中存儲整數列表的最佳方法。 ......即, 「1,2,3,4,6,7」在mssql中存儲整數列表的最佳選擇

編輯:這些值代表SQL表中的其他ID。該行看起來像

[1] [2]

ID,listOfOtherIDs

到目前爲止,我已經研究這些選擇是:

  1. 分隔值的VARCHAR即可通過逗號或製表符來「爆炸」
  2. 包含單獨所有值的XML
  3. 對每個值使用單獨的行。

哪種方法是最好的使用方法?

謝謝, 伊恩

+2

你應該更新你的問題並解釋這個int列表代表什麼。很可能,很明顯,就像Jeroen說的那樣,你做錯了,該列表應該是另一個表中的一些條目。 –

+1

關於你的編輯:你會想用我的答案。連接到不同表格的ID應該用作外鍵,如果它們都歸入一個字段,則不能這樣做。 –

回答

5

一個單一的記錄元件只能引用一個值;這是一個基本的數據庫設計原則。你將不得不改變數據庫的設計:對每個值使用單行。 你可能想要閱讀normalization

如在第一範式的描述示出here

首先正常形式指出在表中存在的每一行和列交叉點,存在一個單一的值,從不列表值。例如,您不能有一個名爲Price的字段,您在其中放置多個Price。如果將每個行和列的交點看作單元格,則每個單元格只能包含一個值。

4

儘管Jeroen的答案適用於「多值」屬性,但真實情況下,多個逗號分隔值實際上可能代表一個較大的值。諸如路徑數據(在地圖上),整數序列,主要因素列表等等可以存儲在逗號分隔的varchar中。我認爲最好解釋一下你究竟存儲了什麼,以及如何檢索和使用這個值。

編輯:

看你的編輯,如果標識你的意思是另一個表的PK,那麼這聽起來像這個表,其標識要存儲的一個之間建立真正的M-N的關係。這些東西應該存儲在一個單獨的gerund中,BTW是一個將每個表的PK作爲FK的表,因此鏈接了兩個表的相關行。所以傑羅恩的回答非常適合你的情況。

+0

+1,好點。自從他建議自己將價值觀放在不同的記錄中以後,我考慮過這個選項。 –

+0

謝謝。我懂了。但有些人甚至會堅持將主要因素列表存儲在多行中。 ;-) – dotNET

相關問題