Подходы к преобразованию таблицы возможностей в логические утверждения - PullRequest
1 голос
/ 13 мая 2011

Я не знаю, как выразить эту проблему, поэтому приношу свои извинения, если она уже решена.

У меня есть бизнес-правила, обобщенные в виде таблицы результатов с двумя входными данными. Для каждого из пяти возможных значений на одной оси и каждого из пяти значений на другой оси существует один выход. В этих 25 ячейках есть десять различных возможностей, поэтому не каждая пара входов имеет уникальный выход.

Я закодировал эти правила в TSQL с помощью вложенных операторов CASE, но их сложно отлаживать и изменять. В C # я мог бы использовать литерал массива. Мне интересно, есть ли академическая тема, которая касается преобразования логических правил в матрицы и наоборот.

В качестве примера можно перевести эту тривиальную матрицу:

   A  B  C
-- -- -- --
X  1  1  0
Y  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, если это имеет значение). Какие-либо предложения? Есть ли термин для этого типа перевода, с которым я должен искать?

1 Ответ

2 голосов
/ 18 мая 2011

Звучит как поиск в сетке данных 5х5. Входы по оси и выход в каждой ячейке:

    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, переоценить триплеты, а затем просто посмотреть на эту таблицу.

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