2010-05-19 69 views
0

我知道在一列中存儲多個值。不是一個好主意。SQL Server - 在一列中存儲多個十進制值?

它違反了第一個正常形式---其中沒有多值屬性。正常化時期......

我使用SQL Server 2005

我有需要存儲的下限和uppper限制的測量,把它作爲一個最低和最高限速表...只有問題只有2%,我需要上限。我只會有數據下限。

我當時就想,這兩個值存儲在列(稀疏列在2008年引入了所以不是我)

有沒有辦法...?不知道XML ..

回答

2

你必須存儲瘋狂的數量的行爲此甚至很重要。 1TB磁盤的價格現在是60美元!

兩個浮點使用8個字節;一個XML字符串將使用其中的一個數字來存儲一個浮點數。所以即使XML只能存儲一個而不是兩個列,它仍然會消耗更多的空間。

只需使用空列。

+2

乘以您的RAID配置。承載1TB的硬件花費多少?通過這種方式,所有的人(可能是1M的互聯網用戶)都可以連續並行訪問它?和人們支持這個硬件?電源?災難規劃,如果你失去了這些數據,那麼你的公司將會面臨死亡? 硬盤空間很便宜。企業級硬盤空間不是。 – 2010-05-19 13:52:47

+0

@菲利普凱利:你列出的東西可以花費(很多)錢,但它與硬盤大小無關。 1GB磁盤的電源成本與1TB磁盤相當 – Andomar 2010-05-19 14:31:02

2

要回答你的問題,你可以將它存儲爲一個字符串,並且使用你知道如何解析的特定格式(例如「low:high」)。

但是...這真的不是一個好主意。

處理98%具有NULL值爲上限的行是完全正確的恕我直言。保持清潔,以後不會後悔。

1

即便如此,我同意Andomar。使用兩個柱,低限和高限。如果任何一個值可能未知,請將這些列設爲可空。

或者,指定默認的任意最小值和最大值,並使用這些值而不是空值。 (這樣做意味着你永遠不必嘲弄三元邏輯,例如必須用ISNULL或COALESCE包裝所有東西。)

一旦定義了模式,就可以使用一些技巧來減少存儲空間(如壓縮和sparce列)。

相關問題