우리는 사용자가 데이터베이스 테이블의 필드에서 계산을 수행하는 표현식을 입력 할 수있는 응용 프로그램을 보유하고 있습니다. 계산을 통해 다양한 유형의 함수 (수학, 논리, 문자열, 날짜 등)를 사용할 수 있습니다. 예 : MAX (col1, col2, col3). 이 표현식은 중첩 된 함수를 사용하여 복잡해질 수 있습니다. 예 : (LENGTH (StringColumn) = 0, MAX (COL1, COL2, 32), MIN (COL1, COL2, COL3))> 길이 (COL2) 우리는 이것에 자바 CC 파서를 구비한다 구현디자인 문제 - 비즈니스 계산을위한 SQL 쿼리 생성
편도 IF 사용자가 입력 한 표현식을 구문 분석 한 다음 트리 구조의 데이터 구조를 생성합니다. 그런 다음 트리가 java에서 구문 분석되고 표현식에 사용 된 각 함수에 대해 sql 쿼리가 생성됩니다. 마지막으로 사용자 입력 식 각각에 대해 쿼리가 생성 된 후 java는 간단한 데이터베이스 호출을 사용하여이 쿼리를 실행합니다.
이 프레임 워크의 주요 문제점은 데이터베이스 문제가 Java에서 처리된다는 것입니다. 데이터베이스 문제는 데이터베이스 제한 또는 성능 최적화를 의미합니다. Microsoft SQL Server의 한 가지 데이터베이스 제한 사항은 10 개의 중첩 된 CASE WHEN 문만 허용된다는 것입니다. 즉, java 코드를 구문 분석하는 동안 쿼리 문자열이 번역되기 전에 얼마나 많은 CASE WHEN을 사용해야 하는지를 예측해야합니다. 비슷하게 수행 할 SQL 성능 최적화가있는 경우 java에서 처리하는 것이 단순히 논리적이 아닌 것입니다.
누구든지이 문제에 대한 더 나은 설계 접근법을 알고 있습니까?
이것은 소프트웨어에서 제공하는 기능입니다. 소프트웨어 사용자는 기술적으로 SQL 언어를 알지 못합니다. 그들은 위에서 언급 한 것처럼 비즈니스 기능을 제공 받고 있습니다. 예 : MAX (column1, column2)와 같은 수학 함수. 그런 다음이 함수를 SQL 쿼리로 변환하여 예상 된 계산을 수행해야합니다. –
귀하의 언어는 SQL보다 복잡합니다! 개발자도 'IF (LENGTH (StringColumn) = 0, MAX (col1, col2, 32), MIN (col1, col2, col3))> LENGTH (col2)'와 같은 것을 쓰지는 않지만, 그걸 쓰고있어. 그들이 그것을 쓸 수 있다면, 그들은 SQL을 쓸 수 있습니다! 그리고 독점적 인 언어를 배울 필요조차 없습니다. 그들은 수십 년에 걸친 문서화, 예제 및 도구의 혜택을 얻습니다. 신청서가 작성되었을 때 최소한이 시스템의 작성에 반대하여 로비를하길 바랍니다. –
저는 어플리케이션 사양을 디자인 한 기능 팀에 속해 있지 않았습니다. 앞서 언급 한 기능을 제공해야한다고 가정하면이 기능을 구현하는 더 좋은 방법이 있다고 생각합니까? –