验证相互关联的字段

时间:2009-10-05 20:05:01

标签: java validation java-ee

我们有一个验证系统,它强制用户从一组相互关联的字段中选择一组有效的值。

用户必须填写列表中的第一个值,并且他们选择的任何值确定他们将能够在第二个字段中选择哪一组值。他们在第二个领域中的价值选择限制了第三个领域的选择。等等。

所有相互关联的字段都以树形结构组织,即用户从中开始有一个根字段,并且从根开始在树下有各种路径,例如:

        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的)可以帮助解决包含如此大量组合的类似问题?
  • 有没有人对替代实施策略有任何建议?

感谢。

2 个答案:

答案 0 :(得分:1)

看看Rules Engines。他们使用Rete Algorithm来加速进行数百万次比较所需的时间,使用内存而不是CPU。

JBoss Drools可能值得一看。

以下是您设置决策逻辑的quickest overview

答案 1 :(得分:1)

如何在PMML文档中描述规则并在每个节点上实现具有谓词功能的访问者。

http://www.dmg.org/v4-0/TreeModel.html

PMML涵盖了不少模型,但树模型可能最适合您的需求。