代码之家  ›  专栏  ›  技术社区  ›  peterchen

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

  •  1
  • peterchen  · 技术社区  · 16 年前

    我需要在数据库中存储键值对,其中键可以是字符串,值可以是多种类型(整数、字符串、浮点/日期、guid、blob)之一。数据库是通过ole db访问的,所以我需要坚持“普通”类型。

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

    我目前看到以下选项:

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

    唯一的问题是,当数据库被共享时,单个值不能很容易地更新。现在有一个问题(当前的值集只有在数据库以独占方式打开时才更新),但似乎是对未来访问的限制。

    2。密钥块
    一行包括 Key, Type, BLOB 存储原始数据。这使得转换和测试有些丑陋,但允许稍后轻松扩展var类型。我不知道storign blob的开销有多大,但是项目的数量很低(大约12个)。

    三。每种值类型一列
    一行包括 Key, Type, int, double, sting, blob ,类型将指示使用的列。在我看来很可怕,但也最不“辱骂”。

    4。每个设置一列
    (仅使用一行)。我不是真的在考虑这个。

    思想?评论?其他方法?

    1 回复  |  直到 16 年前
        1
  •  3
  •   Aaron Digulla    16 年前

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

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