您可以在关系数据库中使用决策表吗?

时间:2008-09-25 00:27:26

标签: database

我听说关系数据库中的决策表已在学术界进行了大量研究。我也知道业务规则引擎使用决策表,许多BPMS也使用它们。 我想知道今天人们是否在他们的关系数据库中使用决策表?

4 个答案:

答案 0 :(得分:1)

决策表是一系列条件和行动。条件可以很简单,您可以使用简单的“匹配此值的列”字符串来表示它。或者条件可能非常复杂。类似地,动作可以像“将此值移动到列”一样简单。或者行动可能涉及多个部分或步骤,或者 - 任何事情。

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']

决策表的每一行都有一个“匹配此old_value”和“移动此replacement_value”类型的定义。

决策表的“条件”部分必须在某处进行评估。您的应用程序就是这样的地方。您将从数据库中获取条件值。您将在某些函数中使用这些值来查看规则是否为真。

决策表的“行动”部分必须在某处执行;再次,你的应用程序做的东西。您将从数据库中获取操作值。您将使用这些值来插入,更新或删除其他值。

决策表一直在使用;他们一直在关系数据库中。每个表都需要高度自定义的数据模型。它还需要一个独特的条件功能和行动程序。

它没有很好地概括。如果需要,可以将XML存储在数据库中,并调用一些规则引擎来解释和执行BPEL规则。在这种情况下,规则引擎执行条件和操作处理。

如果需要,可以在数据库中存储Python(或Tcl或其他内容)。认真。您将在Python中编写条件和操作。您将从数据库中获取它并运行Python代码片段。

很多选择。没有“学术”。事实上,基本条件 - 行动的东西一直在做。

答案 1 :(得分:1)

是否将决策表放入数据库取决于许多其他问题。

您的条件是否会在RDBMS或其他地方计算?如果可以设计用于评估这些条件的数据,以及在RDBMS内部评估它们的合适方法,那么这可能是一个好主意。也许你的行为也发生在你的数据库中,这将使它更具吸引力。

您的条件,甚至您的操作的执行可能都在RDBMS的外部,但您仍然可以在内部保持条件和操作组合之间的连接。可能是因为大多数其他数据都在那里,而你所拥有的只是一个位于其上的网络服务器。

我可以考虑两种方法对此进行建模,具体取决于您拥有多少条件(以及它们是二进制的),以及每个表的列容量是多少。

假设您有6个二元条件,这意味着您有2 ^ 6 = 64种可能的组合。然后,每个组合可以有一列,每个操作都有一行。

或者你可能有16个条件,这意味着你将拥有几乎无法估量的组合数量(实际上是65536)。这是一个荒谬的列数。最好是为每个条件创建一个列,为每个操作创建一列,并在每种可能的情况下创建65536行。每一行都代表一种情况以及在这种情况下该怎么做。您使用的唯一数据类型是bool。你也可以将这些bool打包成bitmasked整数。

实际上,更好地避免使用更大的决策表。划分和规则,并使用更多的表是一个更好的方法。如果被要求就过多条件提出意见,主题专家通常会感到疲倦。

决策表的强度实际上处于建模阶段,开发人员和主题专家可以找出是否映射了每种可能的情况,并且不存在盲点。

答案 2 :(得分:0)

我认为他们将为过去已经过多的“面对面”通讯状态做出贡献 - 足够隐藏在屏幕后面,因为它是......走出壁橱,走出去 - 得到了图片。

答案 3 :(得分:-1)

我会研究使用Object数据库而不是传统的RDBMS(关系数据库管理系统)。对象数据库旨在快速处理对象之间的层次关系,而在RDBMS中,您必须在多个表行甚至表中表示这些关系,以便您的查询(树遍历)变慢。