在数据库中存储不同的值类型

时间:2009-09-28 10:13:45

标签: database-design oledb

我需要将键值对存储在数据库中,其中键是例如一个字符串,value可以是多种类型之一(整数,字符串,浮点数/日期,GUID,BLOB)。数据库是通过OLE DB访问的,所以我想要坚持使用“普通”类型。

它们的键可能涉及“存在”查询,值不涉及查询(即我不会查询“值为17的所有键”)。稍后将添加其他键值对。

我目前看到以下选项:

1。序列化BLOB
序列化键值集(此功能已经可用)并将其存储为单个blob。

我遇到的唯一问题是,在共享数据库时,无法轻松更新单个值。它现在只是一个问题(当只有DB​​打开时才更新当前的值集),但似乎是对未来访问的限制。

2。密钥BLOB
A Row将包含Key, Type, BLOB存储原始数据。进行一些丑陋的转换和测试,但稍后可以轻松扩展var类型。我不知道storign BLOB的开销有多糟糕,但是项目数量很少(大约十几个。

第3。每种值类型一列
A Row将由Key, Type, int, double, sting, blob组成,类型将指示使用哪个列。对我来说看起来很可怕,但最不“辱骂”。

4。每个设置一列
(仅使用一行)。我并没有真正考虑这一点。

想法?评论?其他方法?

1 个答案:

答案 0 :(得分:3)

另一种选择是每种类型使用一个表。使用视图可以同时显示所有键。在这里,您可以添加一个列,告诉您值的类型,以便您也可以获取它。

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