2009-09-28 45 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

相关问题