我們有一個驗證系統,強制用戶從一組相互關聯的字段中選擇一組有效的值。相關領域的驗證
用戶必須填寫列表中的第一個值,並且他們選擇的值決定了他們可以在第二個字段中選擇哪組值。他們在第二個領域的價值選擇限制了第三個領域的選擇。等等。
所有相關字段在樹結構組織的,即,存在從該用戶從開始一個根領域,有各種路徑向下樹從根開始,例如:
Field1
/ \
Field2 Field7
| |
Field3 etc
|
Field4
/ \
Field5 Field6
我們選擇使用以下數據庫模型實現方式:
ID
Parent ID
Field Type
Delimited Chain Data
1,null,Field1,F1-1
2, 1,Field2,F1-1|F2-1
3, 1,Field2,F1-1|F2-2
4, 1,Field2,F1-1|F2-3
5, 1,Field2,F1-1|F2-4
6, 2,Field3,F1-1|F2-1|F3-1
7, 2,Field3,F1-1|F2-1|F3-2
8, 3,Field3,F1-1|F2-2|F3-1
9, 3,Field3,F1-1|F2-2|F3-3
etc
的數據值之間的關係是多對多的,如Field3中的多個值與Field2中的多個值相關。
什麼這種結構可以讓你做的是兩兩件事:
- 輕鬆查詢一組值的特定字段,可以將該字段上方之前選擇的數據。
- 檢查在樹中給定路徑包含了所有的字段
然而有效值,該系統不斷壯大。其中一些字段有數千個可能的值。總共有大約30個領域。所以,當你在樹上遍歷所有可能的有效值集時,有數千萬個組合。系統開始在接縫處發生吱吱聲,並且數據維護的數值變得困難。
我的問題是:
- 有沒有人碰到類似的相互關聯的領域驗證問題?你是如何解決它的?
- 是否有任何產品或開源庫(最好是基於Java的)可以幫助解決包含如此大量組合的類似問題?
- 對替代實施策略有任何建議嗎?
感謝。
謝謝。我認爲規則引擎更像商業規則,例如檢查一個人年齡在18至25歲之間? – 2009-10-05 20:20:05
他們當然是爲了商業規則,但是你所描述的聲音與我有關。 :-) – 2009-10-06 15:13:45
所以你可以問Drool的東西,如「如果字段1的值是A,字段2的值是B,那麼字段3的可能值是多少?」? – 2009-10-13 07:36:28