首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您可以在关系数据库中使用决策表吗

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

Stack Overflow用户
提问于 2008-09-25 00:27:26
回答 4查看 3.3K关注 0票数 2

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-25 10:22:17

决策表是条件和操作的集群。条件可以非常简单,您可以用一个简单的"match a column you this value“字符串来表示它。或者一种情况可能非常复杂。类似地,一个操作可以像“将这个值移动到一列”一样简单。或者动作可能涉及多个部分或步骤,或者--好吧--任何东西。

SELECT或WHERE子句中的CASE函数是一个决策表。这是关系数据库中决策表的第一个示例。

您可以有一个“转换”表,其中包含具有旧值和替换值的列。然后,您可以编写一小段代码,如下所示。

代码语言:javascript
复制
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代码片段。

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

票数 1
EN

Stack Overflow用户

发布于 2008-11-14 21:02:51

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

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

您的条件,甚至操作的执行可能在RDBMS的外部,但您仍然可以将条件和操作的组合之间的联系保留在内部。可能是因为你们大多数人的其他数据都在那里,而你所拥有的只是一个位于它上面的web服务器。

我可以想到两种方法来对此进行建模,这取决于您有多少条件(以及它们是否是二进制的),以及每个表的列的容量。

假设你有6个条件是二进制的,这意味着你有2^6 = 64个可能的组合。然后,您可以为每个组合使用一列,为每个操作使用一行。

或者你可以有16个条件,这意味着你将拥有几乎无法计算的组合数量(实际上是65536个)。这是一个荒唐的柱子数量。更好的做法是为每个条件设置一列,为每个操作设置一列,并为每种可能情况下的操作设置65536行。每一行代表一种情况以及在这种情况下该做什么。您使用的唯一数据类型是bool。您还可以将这些bool打包为位掩码整数。

实际上,最好避免使用更大的决策表。分而治之,使用更多的表是一种更好的方法。通常,如果主题专家被要求对太多的条件给出意见,他会感到疲倦。

决策表的优势实际上是在建模阶段,开发人员和主题专家可以找出是否映射了所有可能的情况,并且不会存在盲点。

票数 1
EN

Stack Overflow用户

发布于 2009-06-18 23:49:06

我认为,它们将有助于过去“面对面”交流的已经衰落太多的状态-足够隐藏在屏幕后面……从衣柜里出来,出来--明白了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/130789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档