2009-04-08 52 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個布爾屬性聽起來有點可疑,也許你的數據模型可以進一步規範化?