【问题标题】:Approaches to converting a table of possibilities into logical statements将可能性表转换为逻辑语句的方法
【发布时间】:2011-05-12 23:19:39
【问题描述】:

我不知道如何表达这个问题,如果已经解决,我很抱歉。

我将业务规则总结为给定两个输入的输出表。对于一个轴上的五个可能值中的每一个,以及另一个轴上的五个值中的每一个,都有一个输出。这 25 个单元格中有 10 种不同的可能性,因此并不是每个输入对都有唯一的输出。

我已经用嵌套的 CASE 语句在 TSQL 中对这些规则进行了编码,但是很难调试和修改。在 C# 中,我可能会使用数组文字。我想知道是否有一个学术主题涉及将逻辑规则转换为矩阵,反之亦然。

例如,可以翻译这个微不足道的矩阵:

甲乙丙 -- -- -- -- X 1 1 0 是 0 1 0

...变成这样的规则:

if B OR (A and X) then 1 else 0

...或者,在详细的 SQL 中:

CASE WHEN FieldABC = 'B'                   THEN 1
     WHEN FieldABX = 'A' AND FieldXY = 'X' THEN 1
     ELSE 0

我正在寻找一种处理大型矩阵的好方法,尤其是我可以在 SQL 中使用的方法(MS SQL 2K8,如果重要的话)。有什么建议?是否有此类翻译的术语,我应该搜索一下?

【问题讨论】:

  • 我仍然不是 100% 清楚你在问什么,但你考虑过CLR?
  • @wtjones:这绝对是一种选择,尽管它需要一些管理开销,我希望尽可能避免。我在这个问题中寻找的是更抽象的:什么是我可以用来将表格逻辑转换为 AND 和 OR(或 &&s 和 ||s)的方法。首先,这种转换有名称吗?
  • 我一直在通过stackoverflow.com/questions/4763721/… 阅读卡诺图;看起来这可能是正确的方向。意见?
  • 不,也许不是;这些似乎仅限于回答二元问题。我的需要是根据多个输入的不同值提供多个输出之一;假设输入是布尔值是合理的。

标签: sql logic business-logic


【解决方案1】:

听起来像是对 5x5 数据网格的查找。轴上的输入和每个单元格中的输出:

    Y=1 Y=2 Y=3 Y=4 Y=5
x=1  A   A   D   B   A
x=2  B   A   A   B   B
x=3  C   B   B   B   B
x=4  C   C   C   D   D
x=5  C   C   C   C   C

您可以将其存储在 x,y,outvalue 三元组的表中,然后在该表上进行查找。

SELECT OUTVALUE FROM BUSINESS_RULES WHERE X = @X and Y = @Y;

【讨论】:

  • 我希望有一些基于规则的东西,而不是查找表,因为它通常更容易阅读。尽管如此,这是一种完全合法的方法,并且会产生非常紧凑的 SQL。也很快。
  • 好的,Karnaugh maps 说明了一种将网格转换为逻辑语句的方法。请记住一次输出一个输出,因为它将被包装在 CASE 语句中,从那时起,任何已经生成输出的方块都可以忽略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多