2009-09-28 99 views
1

我需要將鍵值對存儲在數據庫中,其中鍵是例如一個字符串和值可以是多種類型之一(整數,字符串,浮點數/日期,GUID,BLOB)。數據庫是通過OLE DB訪問的,所以我需要堅持「正常」類型。在數據庫中存儲不同的值類型

這些鍵可能涉及「存在」查詢,值不涉及查詢(即,我不會查詢「值爲17的所有鍵」)。其他鍵值對將在稍後添加。

我目前看到的以下選項:

1.序列化BLOB
序列化鍵值設置(此功能已經可用),並將其存儲爲單個斑點。

我遇到的唯一問題是,共享數據庫時無法輕鬆更新單個值。目前它是一個問題(當前的一組值僅在數據庫完全打開時更新),但似乎是未來訪問的限制。

2.鑰匙BLOB
一排將包括Key, Type, BLOB存儲的原始數據。會導致一些難以進行的轉換和測試,但會允許稍後輕鬆擴展var類型。我不知道的開銷是多麼糟糕的storign BLOB的,但項目的數量爲低(大約一打。

每個值類型

3.一列
一排將包括Key, Type, int, double, sting, blob,類型將表示使用哪個列。看起來可怕給我,但也至少是「自虐」。

4.一列每
(只用一行)設定。我沒有真正考慮到這一點。

想法?評論?其他a pproaches?

+0

您的應用程序如何知道保存和加載時的值是什麼類型?它在問價值之前是否知道它,即事先知道只有一個整數值纔有意義?這確實推動了一些選擇。 – Mark

+0

是的,它事先知道。基本上,它被密鑰(隱含地)定義,例如,關鍵「DBDefaultNodeID」將始終是「GUID」。但是,未知的密鑰應該不會受到影響。 – peterchen

回答

3

另一種選擇是每種類型使用一個表格。使用視圖使所有鍵同時可見。在這裏,您可以添加一個列,告訴您值的類型,以便您可以獲取該值。

create view KEY_TABLES as 
select key, 'INT_TABLE' from INT_TABLE 
union 
select key, 'STRING_TABLE' from STRING_TABLE 
... 
+0

對於我現在正在查看的數據量來說,看起來有點過分,但在任何情況下都是一個有趣的想法。我至少會嘗試通過我們使用的OLE DB提供程序進行操作。 – peterchen

+0

鑑於您知道數據類型之前不需要整體視圖只是基礎表。 – Mark

相關問題