我们有一个验证系统,它强制用户从一组相互关联的字段中选择一组有效的值。
用户必须填写列表中的第一个值,并且他们选择的任何值确定他们将能够在第二个字段中选择哪一组值。他们在第二个领域中的价值选择限制了第三个领域的选择。等等。
所有相互关联的字段都以树形结构组织,即用户从中开始有一个根字段,并且从根开始在树下有各种路径,例如:
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个领域。因此,当您在树中排除所有可能的有效值集时,就会有数千万种组合。系统开始在接缝处吱吱作响,数值集的数据维护变得困难。
我的问题是:
感谢。
答案 0 :(得分:1)
看看Rules Engines。他们使用Rete Algorithm来加速进行数百万次比较所需的时间,使用内存而不是CPU。
JBoss Drools可能值得一看。
以下是您设置决策逻辑的quickest overview。
答案 1 :(得分:1)
如何在PMML文档中描述规则并在每个节点上实现具有谓词功能的访问者。
http://www.dmg.org/v4-0/TreeModel.html
PMML涵盖了不少模型,但树模型可能最适合您的需求。