2009-12-27 42 views
0

我不知道如何解釋這可能,所以我會用一個例子。SQL Server:在一個值中存儲更多整數

我必須將一些用戶ID存儲在我的SQL Server表中的單個值/列中,因此一個值可能類似於「4231 3271 3722 7432 4831 3192」。當然這可以存儲爲文本,char,nchar,nvarchar和som。但哪個最好?如果我只需要存儲整數(以及將它們分開的東西)?

那麼在單個SQL Server單元內存儲多個整數值的最佳方法是什麼?

而且你沒有張貼我任何替代方法可以做到這一點,因爲這只是一個例子,它是這樣做的唯一正確途徑,即使我不得不使用VARCHAR :)

+4

你試圖做的是違反最基本的數據庫規範 - 它違反了第一種規範,即數據庫中的單個單元格只能有一個單一的原子值。堅持下去 - 經過數十年的實踐證明它是值得的! – 2009-12-27 19:04:39

回答

8

我知道你問我們不要提供這樣做的替代方法,但這裏有:

Normalize !!!

基本上,您創建至少有2列(UserId和上面描述的表的主鍵)的另一個表。這樣,您可以爲此表中的單個記錄設置任意數量的用戶ID。您還可以在一列中只放置一個用戶ID。

現在...如果你想這樣做,反正你描述的方式,這裏是你可以做什麼:

你不能把多個整數中的一列,並仍然使用數據類型INT。你將不得不使用某種文本類型(varchar,nvarchar等)。你應該有一個共同的,易於閱讀的分隔符(如果它們都是整數,那麼空格或逗號就可以正常工作)。

這樣做會導致你的問題在路上,我真的鼓勵你用正常化來做。

2

在單個SQL Server單元內存儲多個整數值的最佳方法是什麼?

簡單 - 你不需要。

  1. CHAR and VARCHAR最多可包含8,000個字符。您的示例中的空格也會影響到這一點 - 在您的示例中,長度爲4加上空格的1個字符的整數表示最多可以有1,600個不同的值。即使將值存儲在XML中,SQL Server支持的值最大爲2 GB,也必須使用XPATH/XQUERY從XML標記中獲取值。
  2. 使用這種方法時,有可靠的方法來保持數據一致(間距,字符),使數據出現等待發生問題。

最佳方法數據標準化的:

  1. 有沒有限制的關聯數
  2. 可靠的數據執行 - 一個INT列不允許字母字符
  3. 數據處理性能好得多,因爲沒有轉換
0

我同意其他:標準化。但我也會添加一個實際的解決方案,即使用CLR類型。 hierarchyid在技術上是一個整數序列,但很難獲得內部存儲的實際「數字」。您可以編寫自己的CLR數據類型來存儲嵌套集合,並且通常比將其存儲爲varchar或類似的東西的類型具有更好的類型安全性和效率。

請注意,我不是建議這是典型的數據庫。嵌套集有其用途,但這些用途相當罕見。除非是性能問題,否則應始終使用3NF作爲OLTP數據庫。

+1

'hierarchyid'只能在SQL Server 2008上使用 – 2009-12-27 21:39:25

+0

但是自2005年以來,CLR類型一般都可用。 – Aaronaught 2009-12-27 22:27:25

相關問題