代码之家  ›  专栏  ›  技术社区  ›  A_M

相关领域的验证

  •  1
  • A_M  · 技术社区  · 16 年前

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

    用户必须填写列表中的第一个值,他们选择的值决定了他们可以从第二个字段中选择哪一组值。他们在第二个字段中选择的值限制了在第三个字段中的选择集。等等。

    所有相关字段都以树形结构组织,即有一个根字段,用户从该根字段开始,树上有从根开始的各种路径,例如:

            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
    

    数据值之间的关系是多对多的,例如字段3中的多个值与字段2中的多个值相关。

    这种结构允许您做两件事:

    • 轻松查询特定字段的一组值,给出该字段上方先前选定的数据。
    • 检查树中的给定路径是否包含其所有字段的有效值

    然而,这一体系已经发展壮大。其中一些字段有数千个可能的值。总共有大约30个字段。所以,当你在树上排列出所有可能的有效值集时,有上千万个组合。系统开始出现裂缝,数据的维护变得困难。

    我的问题是:

    • 有没有人遇到过类似的相互关联的字段验证问题?你是怎么解决的?
    • 是否有任何产品或开源库(最好是基于Java的)有助于解决类似的问题,包含如此大量的组合?
    • 有人对其他实施策略有什么建议吗?

    谢谢。

    2 回复  |  直到 16 年前
        1
  •  1
  •   srini.venigalla    16 年前

    如何在pmml文档中描述您的规则,并在每个节点上实现一个支持谓词的访问者。

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

    pmml涵盖了很多模型,但是树模型可能最适合您的需要。

        2
  •  1
  •   Dean J    16 年前

    看看规则引擎。他们使用 Rete Algorithm 为了加快进行数百万次比较所需的时间,使用内存而不是CPU。

    JBOSS Drools 可能值得一看。

    这里是 quickest overview 你建立决策逻辑的方式。