2009-04-08 31 views
0

我有一个类的数据具有非常大数量的二元属性 - (!)151是准确的 - 和我所关心的是如何将这些数据结构建模。尽管把位字段存储为字节的内部效率,但我的编程spidey感觉刺激创建一个包含151位字段(除了其他属性)的表。与位域的大量的数据库结构

不会有大量行的 - 也许是1000,一旦送入产量不会经常改变。

我以为我的分类数据分成不相交的子类,并创建单独的表,但以这种方式分割属性是行不通的,甚至如果可能的话肯定不会与数据子类有效映射。另一个问题是我想将所有数据放在一起,避免现场和/或行重复。我也考虑过使用一些自定义的二进制格式,但这是不可行的,因为我的数据中的关键字段被用作其他表中的外键。

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

我将使用PostgreSQL。

所以,在这里我的问题是我只是做一个表字段的数量庞大,还是有关系模型兼容其他的方法?

回答

2

我看到的最大的问题是显而易见的事实,单场指数的基数,至少可以说,很低。也许你可以更详细地描述数据,我们可以讨论其他设计?例如,所有这些都是相互独立的吗?

只有1000行,它可能比数据库更容易存储(虽然我想有很多连接机会?)不是为了查询效率的原因,但它看起来不像数据库数据。

+0

+1。同意数据库可能不是这个数据的最佳位置。使用合适的蒙版进行逐位测试似乎更合适。 – 2009-04-08 04:48:16

+0

这实际上是我原来的计划,但我需要我的关键字段作为其他表中的外键。无论如何,由于支持位操作符的操作符现在没有意义。我的结构变得明显。 – gvkv 2009-04-08 05:00:16

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

我倒是觉得你也许可以将其整合到更小的群体,但不是做其他的,我不知道的另一种方式。

+0

我可以使用它们。这很尴尬。 – gvkv 2009-04-08 04:57:19

1

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

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