2011-05-12 2 views
1

이 문제를 표현하는 방법을 모르겠다. 이미 해결 된 경우 사과드립니다.가능성 표를 논리 문으로 변환하는 접근 방식

두 개의 입력이 주어진 출력 테이블로 요약 된 비즈니스 규칙이 있습니다. 하나의 축에 5 개의 가능한 값 각각과 다른 축에 5 개의 값 각각에 대해 단일 출력이 있습니다. 이 25 개의 셀에는 10 가지 다른 가능성이 있으므로 각 입력 쌍마다 고유 한 출력이있는 것은 아닙니다.

중첩 된 CASE 문과 함께 TSQL에서 이러한 규칙을 인코딩했지만 디버깅 및 수정하기가 어렵습니다. C#에서는 배열 리터럴을 사용할 수 있습니다. 논리적 인 규칙을 행렬로 변환하는 것과 관련된 논리적 인 주제가 있는지 궁금합니다. 자세한 SQL에서,

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

을 ... 나 : 그래서 같은 규칙에 ...

 
    A B C 
-- -- -- -- 
X 1 1 0 
Y 0 1 0 

: 예를 들어

, 하나는이 사소한 매트릭스를 번역 할 수

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

더 큰 행렬, 특히 SQL에서 사용할 수있는 좋은 접근법을 찾고 있습니다 (MS SQL 2K8, 중요하다면). 어떤 제안? 이 번역 유형을 검색해야하는 용어가 있습니까?

+0

나는 아직도 당신이 무엇을 요구에 100 % 분명 해요,하지만 당신이 생각이 (http://en.wikipedia.org/wiki/SQL_CLR) – wtjones

+0

@wtjones을 [CLR을?] : 그 절대적이다 옵션이 될 수 있습니다. 가능한 경우 관리상의 오버 헤드를 피하고 싶습니다. 내가이 질문에서 찾고있는 것은 좀 더 추상적이다. * 접근법은 무엇인가? * 나는 테이블 논리를 AND와 OR (또는 &&와?)로 변환하는 데 사용할 수있다. 우선, 이런 종류의 변형에 대한 이름이 있습니까? –

+0

나는 Karnaugh지도에서 http://stackoverflow.com/questions/4763721/logic-is-a-b-c-b-c-the-same-as-a-b-c의 방법으로 읽고 있었다. 올바른 방향 일 것 같습니다. 의견? –

답변

2

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, ...보다 가치가있다 쌍둥이의 테이블이를 저장할 수 있습니다 후 단지 그 테이블에 찾아 않습니다.

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

일반적으로 읽기가 쉽기 때문에 조회 테이블이 아닌 규칙 기반의 서비스를 기대하고있었습니다. 그러나 이것은 매우 합법적 인 접근 방법이며 아주 작은 SQL을 생성합니다. 빠른 것도. –

+0

[Karnaugh maps] (http://en.wikipedia.org/wiki/Karnaugh_map)에서는 그리드를 논리적 구문으로 변환하는 방법을 설명합니다. 이미 출력을 생성 한 모든 사각형은 그때부터 무시할 수있는 CASE 문에 래핑 될 것이므로 한 번에 하나의 출력을 염두에 두십시오. – Brian

관련 문제