我听说学术界对关系数据库中的决策表进行了大量的研究。我还知道业务规则引擎使用决策表,许多BPMS也使用它们。我想知道今天的人们是否在他们的关系数据库中使用决策表?
发布于 2008-09-25 10:22:17
决策表是条件和操作的集群。条件可以非常简单,您可以用一个简单的"match a column you this value“字符串来表示它。或者一种情况可能非常复杂。类似地,一个操作可以像“将这个值移动到一列”一样简单。或者动作可能涉及多个部分或步骤,或者--好吧--任何东西。
SELECT或WHERE子句中的CASE函数是一个决策表。这是关系数据库中决策表的第一个示例。
您可以有一个“转换”表,其中包含具有旧值和替换值的列。然后,您可以编写一小段代码,如下所示。
def decision_table( aRow ):
result= connection.execute( "SELECT replacement_value FROM transformation WHERE old_value = ?", aRow['somecolumn'] )
replacement= result.fetchone()
aRow['anotherColumn']= result['replacement_value']决策表的每一行都有一个"match this old_value“和"move this replacement_value”类型的定义。
决策表的“条件”部分必须在某个地方求值。这将在您的应用程序中发生。您将从数据库中获取条件值。您将在一些函数中使用这些值来查看规则是否为真。
决策表的"action“部分必须在某个地方执行;同样,您的应用程序会做一些事情。您将从数据库中获取操作值。您将使用这些值来插入、更新或删除其他值。
决策表一直都在使用;它们一直存在于关系数据库中。每个表都需要一个高度定制的数据模型。它还需要一个唯一的条件函数和动作过程。
它不能很好地推广。如果需要,您可以将XML存储在数据库中,并调用一些规则引擎来解释和执行BPEL规则。在这种情况下,规则引擎执行条件和操作处理。
如果需要,可以将Python (或Tcl或其他东西)存储在数据库中。我是认真的。您可以用Python编写条件和操作。您将从数据库中获取它并运行Python代码片段。
有很多选择。没有所谓的“学术”。事实上,基本的条件-动作的东西一直都在做。
发布于 2008-11-14 21:02:51
是否将决策表放在数据库中取决于许多其他问题。
您的条件是在RDBMS中计算还是在其他地方计算?如果可以设计出用于评估这些条件的数据,以及在RDBMS中评估它们的适当方法,这可能是一个好主意。也许你的行为也发生在你的数据库中,这会使它更有吸引力。
您的条件,甚至操作的执行可能在RDBMS的外部,但您仍然可以将条件和操作的组合之间的联系保留在内部。可能是因为你们大多数人的其他数据都在那里,而你所拥有的只是一个位于它上面的web服务器。
我可以想到两种方法来对此进行建模,这取决于您有多少条件(以及它们是否是二进制的),以及每个表的列的容量。
假设你有6个条件是二进制的,这意味着你有2^6 = 64个可能的组合。然后,您可以为每个组合使用一列,为每个操作使用一行。
或者你可以有16个条件,这意味着你将拥有几乎无法计算的组合数量(实际上是65536个)。这是一个荒唐的柱子数量。更好的做法是为每个条件设置一列,为每个操作设置一列,并为每种可能情况下的操作设置65536行。每一行代表一种情况以及在这种情况下该做什么。您使用的唯一数据类型是bool。您还可以将这些bool打包为位掩码整数。
实际上,最好避免使用更大的决策表。分而治之,使用更多的表是一种更好的方法。通常,如果主题专家被要求对太多的条件给出意见,他会感到疲倦。
决策表的优势实际上是在建模阶段,开发人员和主题专家可以找出是否映射了所有可能的情况,并且不会存在盲点。
发布于 2009-06-18 23:49:06
我认为,它们将有助于过去“面对面”交流的已经衰落太多的状态-足够隐藏在屏幕后面……从衣柜里出来,出来--明白了。
https://stackoverflow.com/questions/130789
复制相似问题