具有大量位域的数据库结构

时间:2009-04-08 03:07:26

标签: database data-structures

我有一类具有大量二进制属性的数据 - 确切地说是151(!) - 我关心的是如何在结构上建模这些数据。尽管存储位字节作为字节的内部效率,我的编程蜘蛛侠感觉在创建一个包含151个字段的表(除了其他属性之外)时感到刺痛。

不会有大量行 - 可能是1000行,一旦投入生产,就不会经常变化。

我曾想过将我的数据分类为不相交的子类并创建单独的表,但是以这种方式拆分属性是不切实际的,即使可能,也肯定不能有效地映射数据子类。另一个问题是我想将所有数据保存在一起并避免字段和/或行重复。我还考虑过使用一些自定义二进制格式,但这不可行,因为我的数据中的关键字段在其他表中用作外键。

查询将大量使用WHERE子句来提取相关数据。我已经考虑过使用多个long或int字段,但是我拒绝这是不可行的,因为我知道SQL中没有按位和运算符或函数,如上所述,属性的分类是有问题的,更不用说其他主要的软件工程问题(用这种方法)。

我将使用PostgreSQL。

所以,我的问题是,我只是制作一个包含大量字段的表,还是有其他与关系模型兼容的方法?

4 个答案:

答案 0 :(得分:2)

我看到的最大问题是明显的事实,即单场索引的基数至少可以说是低。也许您可以更多地描述数据,我们可以讨论其他设计?例如,所有这些都是彼此独立的吗?

只有1000行,将其存储在数据库以外的地方可能更简单(虽然我想有很多连接机会?)不是出于查询效率的原因,但它看起来并不像数据库数据。

答案 1 :(得分:1)

为什么不能使用位智能运算符?

&   bitwise AND 91 & 15 11
|   bitwise OR  32 | 3  35
#   bitwise XOR 17 # 5  20
~   bitwise NOT ~1  -2

来自:http://www.postgresql.org/docs/7.4/static/functions-math.html

我认为你可以将它们分成小组,但除此之外我不知道另一种方式。

答案 2 :(得分:1)

答案 3 :(得分:1)

为最适合您的问题域的数据建模。在这种情况下,您没有太多数据,在最坏的情况下,假设每行占用200个字节,您正在查看少于200 Kb的数据。即使您的特定数据库没有以有效的方式实现布尔属性,这也是一个微不足道的数量。

另一方面,拥有150个布尔属性听起来有点可疑,也许您的数据模型可以进一步规范化?